Compare commits
1 Commits
master
...
hermes-rep
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
831e80360a |
32
Jenkinsfile
vendored
32
Jenkinsfile
vendored
@ -1,8 +1,6 @@
|
|||||||
pipeline {
|
pipeline {
|
||||||
agent {
|
agent {
|
||||||
kubernetes {
|
kubernetes {
|
||||||
// Keep build I/O off the node's runtime USB drive.
|
|
||||||
workspaceVolume dynamicPVC(accessModes: 'ReadWriteOnce', requestsSize: '40Gi', storageClassName: 'ci-scratch')
|
|
||||||
defaultContainer 'builder'
|
defaultContainer 'builder'
|
||||||
yaml """
|
yaml """
|
||||||
apiVersion: v1
|
apiVersion: v1
|
||||||
@ -11,9 +9,6 @@ metadata:
|
|||||||
labels:
|
labels:
|
||||||
app: bstein-dev-home
|
app: bstein-dev-home
|
||||||
spec:
|
spec:
|
||||||
securityContext:
|
|
||||||
fsGroup: 1000
|
|
||||||
fsGroupChangePolicy: OnRootMismatch
|
|
||||||
nodeSelector:
|
nodeSelector:
|
||||||
kubernetes.io/arch: arm64
|
kubernetes.io/arch: arm64
|
||||||
node-role.kubernetes.io/worker: "true"
|
node-role.kubernetes.io/worker: "true"
|
||||||
@ -22,9 +17,14 @@ spec:
|
|||||||
requiredDuringSchedulingIgnoredDuringExecution:
|
requiredDuringSchedulingIgnoredDuringExecution:
|
||||||
nodeSelectorTerms:
|
nodeSelectorTerms:
|
||||||
- matchExpressions:
|
- matchExpressions:
|
||||||
- {key: hardware, operator: In, values: [rpi5, rpi4]}
|
- key: kubernetes.io/hostname
|
||||||
- {key: node-role.kubernetes.io/worker, operator: In, values: ["true"]}
|
operator: NotIn
|
||||||
- {key: kubernetes.io/hostname, operator: NotIn, values: [titan-04, titan-05, titan-06, titan-08, titan-11, titan-12, titan-13, titan-14, titan-15, titan-17, titan-18, titan-19]}
|
values:
|
||||||
|
- titan-06
|
||||||
|
- titan-12
|
||||||
|
- titan-13
|
||||||
|
- titan-14
|
||||||
|
- titan-19
|
||||||
preferredDuringSchedulingIgnoredDuringExecution:
|
preferredDuringSchedulingIgnoredDuringExecution:
|
||||||
- weight: 100
|
- weight: 100
|
||||||
preference:
|
preference:
|
||||||
@ -57,9 +57,8 @@ spec:
|
|||||||
- --host=tcp://0.0.0.0:2375
|
- --host=tcp://0.0.0.0:2375
|
||||||
- --tls=false
|
- --tls=false
|
||||||
volumeMounts:
|
volumeMounts:
|
||||||
- name: workspace-volume
|
- name: dind-storage
|
||||||
mountPath: /var/lib/docker
|
mountPath: /var/lib/docker
|
||||||
subPath: .cache/docker
|
|
||||||
- name: builder
|
- name: builder
|
||||||
image: registry.bstein.dev/bstein/docker:27
|
image: registry.bstein.dev/bstein/docker:27
|
||||||
command: ["cat"]
|
command: ["cat"]
|
||||||
@ -98,8 +97,12 @@ spec:
|
|||||||
- name: workspace-volume
|
- name: workspace-volume
|
||||||
mountPath: /home/jenkins/agent
|
mountPath: /home/jenkins/agent
|
||||||
volumes:
|
volumes:
|
||||||
|
- name: workspace-volume
|
||||||
|
emptyDir: {}
|
||||||
- name: docker-config-writable
|
- name: docker-config-writable
|
||||||
emptyDir: {}
|
emptyDir: {}
|
||||||
|
- name: dind-storage
|
||||||
|
emptyDir: {}
|
||||||
- name: harbor-config
|
- name: harbor-config
|
||||||
secret:
|
secret:
|
||||||
secretName: harbor-robot-pipeline
|
secretName: harbor-robot-pipeline
|
||||||
@ -110,10 +113,6 @@ spec:
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
environment {
|
environment {
|
||||||
PIP_CACHE_DIR = '/home/jenkins/agent/.cache/pip'
|
|
||||||
NPM_CONFIG_CACHE = '/home/jenkins/agent/.cache/npm'
|
|
||||||
SONAR_USER_HOME = '/home/jenkins/agent/.cache/sonar'
|
|
||||||
TMPDIR = '/home/jenkins/agent/.cache/tmp'
|
|
||||||
REGISTRY = 'registry.bstein.dev/bstein'
|
REGISTRY = 'registry.bstein.dev/bstein'
|
||||||
FRONT_IMAGE = "${REGISTRY}/bstein-dev-home-frontend"
|
FRONT_IMAGE = "${REGISTRY}/bstein-dev-home-frontend"
|
||||||
BACK_IMAGE = "${REGISTRY}/bstein-dev-home-backend"
|
BACK_IMAGE = "${REGISTRY}/bstein-dev-home-backend"
|
||||||
@ -139,11 +138,6 @@ spec:
|
|||||||
pollSCM('H/2 * * * *')
|
pollSCM('H/2 * * * *')
|
||||||
}
|
}
|
||||||
stages {
|
stages {
|
||||||
stage('Prepare build scratch') {
|
|
||||||
steps {
|
|
||||||
sh 'mkdir -p /home/jenkins/agent/.cache/tmp /home/jenkins/agent/.cache/go-tmp'
|
|
||||||
}
|
|
||||||
}
|
|
||||||
stage('Checkout') {
|
stage('Checkout') {
|
||||||
steps {
|
steps {
|
||||||
checkout scm
|
checkout scm
|
||||||
|
|||||||
@ -5,7 +5,7 @@ from __future__ import annotations
|
|||||||
import sys
|
import sys
|
||||||
|
|
||||||
from .access_request_onboarding import register_access_request_onboarding
|
from .access_request_onboarding import register_access_request_onboarding
|
||||||
from .access_request_state import * # noqa: F403 - facade preserves existing patch surface
|
from . import access_request_state
|
||||||
from .access_request_status import register_access_request_status
|
from .access_request_status import register_access_request_status
|
||||||
from .access_request_submission import register_access_request_submission
|
from .access_request_submission import register_access_request_submission
|
||||||
|
|
||||||
|
|||||||
@ -107,7 +107,7 @@
|
|||||||
<div v-if="wolf.canControlGpu" class="secret-box">
|
<div v-if="wolf.canControlGpu" class="secret-box">
|
||||||
<div class="secret-head">
|
<div class="secret-head">
|
||||||
<div class="pill mono">Admin</div>
|
<div class="pill mono">Admin</div>
|
||||||
<span class="hint mono">RTX 3080 checkout</span>
|
<span class="hint mono">GPU priority</span>
|
||||||
</div>
|
</div>
|
||||||
<div class="wolf-controls">
|
<div class="wolf-controls">
|
||||||
<select v-model="wolf.selectedGame" class="input mono">
|
<select v-model="wolf.selectedGame" class="input mono">
|
||||||
@ -115,19 +115,15 @@
|
|||||||
<option value="arc-raiders">Arc Raiders</option>
|
<option value="arc-raiders">Arc Raiders</option>
|
||||||
<option value="satisfactory">Satisfactory</option>
|
<option value="satisfactory">Satisfactory</option>
|
||||||
<option value="wolf">Wolf</option>
|
<option value="wolf">Wolf</option>
|
||||||
<option value="desktop">Desktop + Wolf</option>
|
|
||||||
</select>
|
</select>
|
||||||
<input v-model="wolf.note" class="input mono" type="text" placeholder="note" />
|
<input v-model="wolf.note" class="input mono" type="text" placeholder="note" />
|
||||||
<button class="primary" type="button" :disabled="Boolean(wolf.actioning)" @click="$emit('game-mode', 'start')">
|
<button class="primary" type="button" :disabled="Boolean(wolf.actioning)" @click="$emit('game-mode', 'start')">
|
||||||
{{ wolf.actioning === "start" ? "Reserving..." : "Reserve RTX 3080" }}
|
{{ wolf.actioning === "start" ? "Starting..." : "Prioritize Wolf" }}
|
||||||
</button>
|
</button>
|
||||||
<button class="copy mono" type="button" :disabled="Boolean(wolf.actioning)" @click="$emit('game-mode', 'stop')">
|
<button class="copy mono" type="button" :disabled="Boolean(wolf.actioning)" @click="$emit('game-mode', 'stop')">
|
||||||
{{ wolf.actioning === "stop" ? "Releasing..." : "Release for images" }}
|
{{ wolf.actioning === "stop" ? "Stopping..." : "Restore AI" }}
|
||||||
</button>
|
</button>
|
||||||
</div>
|
</div>
|
||||||
<div class="hint mono">
|
|
||||||
Desktop and Wolf may share this reservation. Local image generation waits until it is released.
|
|
||||||
</div>
|
|
||||||
<div class="wolf-controls manual-unlock">
|
<div class="wolf-controls manual-unlock">
|
||||||
<input v-model="wolf.manualIp" class="input mono" type="text" placeholder="IP address" />
|
<input v-model="wolf.manualIp" class="input mono" type="text" placeholder="IP address" />
|
||||||
<input v-model="wolf.manualUser" class="input mono" type="text" placeholder="user" />
|
<input v-model="wolf.manualUser" class="input mono" type="text" placeholder="user" />
|
||||||
|
|||||||
@ -82,9 +82,7 @@ test("shows Brad's professional homepage and opens the platform diagram overlay"
|
|||||||
await expect(page.getByRole("link", { name: "View Résumé" })).toBeVisible();
|
await expect(page.getByRole("link", { name: "View Résumé" })).toBeVisible();
|
||||||
await expect(page.getByRole("link", { name: "Explore the Live Platform" })).toBeVisible();
|
await expect(page.getByRole("link", { name: "Explore the Live Platform" })).toBeVisible();
|
||||||
await expect(page.getByRole("button", { name: "Login" })).toBeVisible();
|
await expect(page.getByRole("button", { name: "Login" })).toBeVisible();
|
||||||
await expect(
|
await expect(page.getByRole("link", { name: "Register" })).toBeVisible();
|
||||||
page.getByLabel("Primary navigation").getByRole("link", { name: "Register" }),
|
|
||||||
).toBeVisible();
|
|
||||||
await expect(page.getByRole("heading", { name: "Quality Systems I Can Take From Zero to Reliable" })).toBeVisible();
|
await expect(page.getByRole("heading", { name: "Quality Systems I Can Take From Zero to Reliable" })).toBeVisible();
|
||||||
await expect(page.getByRole("link", { name: "Nextcloud", exact: true })).toBeVisible();
|
await expect(page.getByRole("link", { name: "Nextcloud", exact: true })).toBeVisible();
|
||||||
await expect(page.getByText("2 of 2 online")).toBeVisible();
|
await expect(page.getByText("2 of 2 online")).toBeVisible();
|
||||||
|
|||||||
@ -6,7 +6,6 @@ const testingDir = path.dirname(fileURLToPath(import.meta.url));
|
|||||||
|
|
||||||
export default defineConfig({
|
export default defineConfig({
|
||||||
testDir: path.resolve(testingDir, "component"),
|
testDir: path.resolve(testingDir, "component"),
|
||||||
retries: process.env.CI ? 1 : 0,
|
|
||||||
use: {
|
use: {
|
||||||
ctPort: 3100,
|
ctPort: 3100,
|
||||||
ctTemplateDir: "../../frontend/playwright",
|
ctTemplateDir: "../../frontend/playwright",
|
||||||
|
|||||||
@ -9,7 +9,6 @@ const webServerCommand = process.env.PLAYWRIGHT_REUSE_DIST === "1" ? previewComm
|
|||||||
|
|
||||||
export default defineConfig({
|
export default defineConfig({
|
||||||
testDir: path.resolve(testingDir, "e2e"),
|
testDir: path.resolve(testingDir, "e2e"),
|
||||||
retries: process.env.CI ? 1 : 0,
|
|
||||||
workers: 1,
|
workers: 1,
|
||||||
timeout: 60000,
|
timeout: 60000,
|
||||||
expect: {
|
expect: {
|
||||||
|
|||||||
@ -258,7 +258,7 @@ describe("account dashboard", () => {
|
|||||||
await dashboard.unlockWolf();
|
await dashboard.unlockWolf();
|
||||||
dashboard.wolf.pinInputs["secret-1"] = "1234";
|
dashboard.wolf.pinInputs["secret-1"] = "1234";
|
||||||
await dashboard.pairWolf("secret-1");
|
await dashboard.pairWolf("secret-1");
|
||||||
dashboard.wolf.selectedGame = "desktop";
|
dashboard.wolf.selectedGame = "arc-raiders";
|
||||||
dashboard.wolf.note = "now";
|
dashboard.wolf.note = "now";
|
||||||
await dashboard.setWolfGameMode("start");
|
await dashboard.setWolfGameMode("start");
|
||||||
await dashboard.setWolfGameMode("stop");
|
await dashboard.setWolfGameMode("stop");
|
||||||
@ -276,7 +276,7 @@ describe("account dashboard", () => {
|
|||||||
source_ip: "181.1.87.186",
|
source_ip: "181.1.87.186",
|
||||||
});
|
});
|
||||||
expect(JSON.parse(seen.find((item) => item.url.includes("/game-mode/start")).body)).toEqual({
|
expect(JSON.parse(seen.find((item) => item.url.includes("/game-mode/start")).body)).toEqual({
|
||||||
game: "desktop",
|
game: "arc-raiders",
|
||||||
note: "now",
|
note: "now",
|
||||||
});
|
});
|
||||||
expect(JSON.parse(seen.find((item) => item.url.includes("/admin/firewall/unlock")).body)).toEqual({
|
expect(JSON.parse(seen.find((item) => item.url.includes("/admin/firewall/unlock")).body)).toEqual({
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user