Compare commits
9 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 6fa4745aa1 | |||
| 8027e702d8 | |||
| c815b2fd44 | |||
| 97ef7788e2 | |||
| 4942692e64 | |||
| 645cd742a1 | |||
| 2645b62290 | |||
| 85c839bc19 | |||
| 00c29e36dd |
@@ -0,0 +1,42 @@
|
|||||||
|
---
|
||||||
|
# e2e-ci-runner-rbac.yaml
|
||||||
|
#
|
||||||
|
# Grants the GitHub Actions runner's service account (Arc Runners) the minimum
|
||||||
|
# permissions needed to deploy/teardown an E2E Headlamp instance in the
|
||||||
|
# privilegedescalation-dev namespace.
|
||||||
|
#
|
||||||
|
# RBAC is managed via Flux from privilegedescalation/infra — do not apply manually.
|
||||||
|
# This manifest is a reference copy in the plugin repo.
|
||||||
|
|
||||||
|
apiVersion: rbac.authorization.k8s.io/v1
|
||||||
|
kind: Role
|
||||||
|
metadata:
|
||||||
|
name: e2e-ci-runner
|
||||||
|
namespace: privilegedescalation-dev
|
||||||
|
rules:
|
||||||
|
- apiGroups: [""]
|
||||||
|
resources: ["configmaps", "serviceaccounts", "events"]
|
||||||
|
verbs: ["get", "list", "create", "delete"]
|
||||||
|
- apiGroups: ["apps"]
|
||||||
|
resources: ["deployments"]
|
||||||
|
verbs: ["get", "create", "delete"]
|
||||||
|
- apiGroups: [""]
|
||||||
|
resources: ["services"]
|
||||||
|
verbs: ["get", "create", "delete"]
|
||||||
|
- apiGroups: [""]
|
||||||
|
resources: ["pods"]
|
||||||
|
verbs: ["get", "list"]
|
||||||
|
---
|
||||||
|
apiVersion: rbac.authorization.k8s.io/v1
|
||||||
|
kind: RoleBinding
|
||||||
|
metadata:
|
||||||
|
name: e2e-ci-runner
|
||||||
|
namespace: privilegedescalation-dev
|
||||||
|
subjects:
|
||||||
|
- kind: ServiceAccount
|
||||||
|
name: runners-privilegedescalation-gha-rs-no-permission
|
||||||
|
namespace: arc-runners
|
||||||
|
roleRef:
|
||||||
|
kind: Role
|
||||||
|
name: e2e-ci-runner
|
||||||
|
apiGroup: rbac.authorization.k8s.io
|
||||||
+21
-13
@@ -19,16 +19,18 @@ test.describe('Intel GPU plugin smoke tests', () => {
|
|||||||
|
|
||||||
// Should navigate to the overview route
|
// Should navigate to the overview route
|
||||||
await expect(page).toHaveURL(/\/intel-gpu$/);
|
await expect(page).toHaveURL(/\/intel-gpu$/);
|
||||||
await expect(page.getByRole('heading', { name: /Intel GPU — Overview/i })).toBeVisible();
|
await expect(
|
||||||
|
page.locator('main').getByRole('heading', { name: 'Intel GPU — Overview' })
|
||||||
|
).toBeVisible();
|
||||||
});
|
});
|
||||||
|
|
||||||
test('overview page renders GPU device list or empty state', async ({ page }) => {
|
test('overview page renders GPU device list or empty state', async ({ page }) => {
|
||||||
await page.goto('/c/main/intel-gpu');
|
await page.goto('/c/main/intel-gpu');
|
||||||
|
|
||||||
// Overview heading should be present
|
// Overview heading should be present
|
||||||
await expect(page.getByRole('heading', { name: /Intel GPU — Overview/i })).toBeVisible({
|
await expect(
|
||||||
timeout: 15_000,
|
page.locator('main').getByRole('heading', { name: 'Intel GPU — Overview' })
|
||||||
});
|
).toBeVisible({ timeout: 15_000 });
|
||||||
|
|
||||||
// Either a populated table/list or an empty-state indicator must be visible
|
// Either a populated table/list or an empty-state indicator must be visible
|
||||||
const hasTable = await page.locator('table').first().isVisible().catch(() => false);
|
const hasTable = await page.locator('table').first().isVisible().catch(() => false);
|
||||||
@@ -43,9 +45,9 @@ test.describe('Intel GPU plugin smoke tests', () => {
|
|||||||
test('device plugins page renders or shows empty state', async ({ page }) => {
|
test('device plugins page renders or shows empty state', async ({ page }) => {
|
||||||
await page.goto('/c/main/intel-gpu/device-plugins');
|
await page.goto('/c/main/intel-gpu/device-plugins');
|
||||||
|
|
||||||
await expect(page.getByRole('heading', { name: /Intel GPU — Device Plugins/i })).toBeVisible({
|
await expect(
|
||||||
timeout: 15_000,
|
page.locator('main').getByRole('heading', { name: 'Intel GPU — Device Plugins' })
|
||||||
});
|
).toBeVisible({ timeout: 15_000 });
|
||||||
|
|
||||||
const hasTable = await page.locator('table').first().isVisible().catch(() => false);
|
const hasTable = await page.locator('table').first().isVisible().catch(() => false);
|
||||||
const hasEmptyState = await page
|
const hasEmptyState = await page
|
||||||
@@ -61,18 +63,24 @@ test.describe('Intel GPU plugin smoke tests', () => {
|
|||||||
// not after clicking the parent entry from the overview. Test route
|
// not after clicking the parent entry from the overview. Test route
|
||||||
// accessibility via direct navigation — each route must render its heading.
|
// accessibility via direct navigation — each route must render its heading.
|
||||||
await page.goto('/c/main/intel-gpu');
|
await page.goto('/c/main/intel-gpu');
|
||||||
await expect(page.getByRole('heading', { name: /Intel GPU — Overview/i })).toBeVisible({
|
await expect(
|
||||||
timeout: 15_000,
|
page.locator('main').getByRole('heading', { name: 'Intel GPU — Overview' })
|
||||||
});
|
).toBeVisible({ timeout: 15_000 });
|
||||||
|
|
||||||
await page.goto('/c/main/intel-gpu/nodes');
|
await page.goto('/c/main/intel-gpu/nodes');
|
||||||
await expect(page.getByRole('heading', { name: /Intel GPU — Nodes/i })).toBeVisible({ timeout: 15_000 });
|
await expect(
|
||||||
|
page.locator('main').getByRole('heading', { name: 'Intel GPU — Nodes' })
|
||||||
|
).toBeVisible({ timeout: 15_000 });
|
||||||
|
|
||||||
await page.goto('/c/main/intel-gpu/pods');
|
await page.goto('/c/main/intel-gpu/pods');
|
||||||
await expect(page.getByRole('heading', { name: /Intel GPU — Pods/i })).toBeVisible({ timeout: 15_000 });
|
await expect(
|
||||||
|
page.locator('main').getByRole('heading', { name: 'Intel GPU — Pods' })
|
||||||
|
).toBeVisible({ timeout: 15_000 });
|
||||||
|
|
||||||
await page.goto('/c/main/intel-gpu/metrics');
|
await page.goto('/c/main/intel-gpu/metrics');
|
||||||
await expect(page.getByRole('heading', { name: /Intel GPU — Metrics/i })).toBeVisible({ timeout: 15_000 });
|
await expect(
|
||||||
|
page.locator('main').getByRole('heading', { name: 'Intel GPU — Metrics' })
|
||||||
|
).toBeVisible({ timeout: 15_000 });
|
||||||
});
|
});
|
||||||
|
|
||||||
test('plugin settings page shows intel-gpu plugin entry', async ({ page }) => {
|
test('plugin settings page shows intel-gpu plugin entry', async ({ page }) => {
|
||||||
|
|||||||
Generated
+3
-3
@@ -11600,9 +11600,9 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/lodash": {
|
"node_modules/lodash": {
|
||||||
"version": "4.17.23",
|
"version": "4.18.1",
|
||||||
"resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.23.tgz",
|
"resolved": "https://registry.npmjs.org/lodash/-/lodash-4.18.1.tgz",
|
||||||
"integrity": "sha512-LgVTMpQtIopCi79SJeDiP0TfWi5CNEc/L/aRdTh3yIvmZXTnheWpKjSZhnvMl8iXbC1tFg9gdHHDMLoV7CnG+w==",
|
"integrity": "sha512-dMInicTPVE8d1e5otfwmmjlxkZoUpiVLwyeTdUsi/Caj/gfzzblBcCE5sRHV/AsjuCmxWrte2TNGSYuCeCq+0Q==",
|
||||||
"dev": true,
|
"dev": true,
|
||||||
"license": "MIT"
|
"license": "MIT"
|
||||||
},
|
},
|
||||||
|
|||||||
+2
-1
@@ -44,6 +44,7 @@
|
|||||||
},
|
},
|
||||||
"overrides": {
|
"overrides": {
|
||||||
"tar": "^7.5.11",
|
"tar": "^7.5.11",
|
||||||
"undici": "^7.24.3"
|
"undici": "^7.24.3",
|
||||||
|
"lodash": ">=4.18.0"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user