Compare commits
5
Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
0458403e67 | ||
|
|
885dff413c | ||
|
|
f8a30c0f5c | ||
|
|
2d92084489 | ||
|
|
a42012d9c0 |
@@ -86,6 +86,10 @@ N8N_ENCRYPTION_KEY=replace-me
|
|||||||
N8N_BASIC_AUTH_ACTIVE=true
|
N8N_BASIC_AUTH_ACTIVE=true
|
||||||
N8N_BASIC_AUTH_USER=admin
|
N8N_BASIC_AUTH_USER=admin
|
||||||
N8N_BASIC_AUTH_PASSWORD=change-me
|
N8N_BASIC_AUTH_PASSWORD=change-me
|
||||||
|
# Recipient and sender used by the importable alert workflow. Configure real,
|
||||||
|
# monitored addresses in the deployment environment; repository defaults stay synthetic.
|
||||||
|
MOBILITYOPS_ALERT_RECIPIENT=alerts@example.test
|
||||||
|
MOBILITYOPS_ALERT_SENDER=n8n@example.test
|
||||||
MOBILITYOPS_CALLBACK_TOKEN=replace-me-n8n-callback-token
|
MOBILITYOPS_CALLBACK_TOKEN=replace-me-n8n-callback-token
|
||||||
# Sent as the X-Fleet-Ops-Trigger-Token header when Fleet Ops calls the n8n return-
|
# Sent as the X-Fleet-Ops-Trigger-Token header when Fleet Ops calls the n8n return-
|
||||||
# processing webhook, so the webhook trigger can require Header Auth instead of being
|
# processing webhook, so the webhook trigger can require Header Auth instead of being
|
||||||
|
|||||||
@@ -14,7 +14,7 @@ permissions:
|
|||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
chromium:
|
chromium:
|
||||||
runs-on: ubuntu-latest
|
runs-on: linux-validation
|
||||||
timeout-minutes: 15
|
timeout-minutes: 15
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@11d5960a326750d5838078e36cf38b85af677262 # v4
|
- uses: actions/checkout@11d5960a326750d5838078e36cf38b85af677262 # v4
|
||||||
|
|||||||
@@ -12,7 +12,9 @@ permissions:
|
|||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
acceptance:
|
acceptance:
|
||||||
runs-on: ubuntu-latest
|
# Never execute code from an untrusted public fork on the private runner.
|
||||||
|
if: ${{ gitea.event.pull_request.head.repo.full_name == gitea.repository }}
|
||||||
|
runs-on: linux-validation
|
||||||
timeout-minutes: 60
|
timeout-minutes: 60
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@11d5960a326750d5838078e36cf38b85af677262 # v4
|
- uses: actions/checkout@11d5960a326750d5838078e36cf38b85af677262 # v4
|
||||||
|
|||||||
@@ -14,7 +14,7 @@ permissions:
|
|||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
public-probe:
|
public-probe:
|
||||||
runs-on: ubuntu-latest
|
runs-on: linux-validation
|
||||||
timeout-minutes: 3
|
timeout-minutes: 3
|
||||||
steps:
|
steps:
|
||||||
- name: Verify HTTPS readiness and certificate horizon
|
- name: Verify HTTPS readiness and certificate horizon
|
||||||
|
|||||||
@@ -1,6 +1,8 @@
|
|||||||
name: Managed validation
|
name: Managed validation
|
||||||
|
|
||||||
on:
|
on:
|
||||||
|
push:
|
||||||
|
branches: [master]
|
||||||
workflow_dispatch:
|
workflow_dispatch:
|
||||||
inputs:
|
inputs:
|
||||||
profile:
|
profile:
|
||||||
@@ -20,7 +22,7 @@ concurrency:
|
|||||||
jobs:
|
jobs:
|
||||||
full:
|
full:
|
||||||
name: full
|
name: full
|
||||||
runs-on: ubuntu-latest
|
runs-on: linux-validation
|
||||||
timeout-minutes: 30
|
timeout-minutes: 30
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
|
- uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
|
||||||
|
|||||||
@@ -6,7 +6,7 @@ on:
|
|||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
release-evidence:
|
release-evidence:
|
||||||
runs-on: ubuntu-latest
|
runs-on: linux-validation
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@11d5960a326750d5838078e36cf38b85af677262 # v4
|
- uses: actions/checkout@11d5960a326750d5838078e36cf38b85af677262 # v4
|
||||||
- name: Build commit-labelled release images
|
- name: Build commit-labelled release images
|
||||||
|
|||||||
@@ -14,7 +14,7 @@ permissions:
|
|||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
images:
|
images:
|
||||||
runs-on: ubuntu-latest
|
runs-on: linux-validation
|
||||||
timeout-minutes: 30
|
timeout-minutes: 30
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@11d5960a326750d5838078e36cf38b85af677262 # v4
|
- uses: actions/checkout@11d5960a326750d5838078e36cf38b85af677262 # v4
|
||||||
|
|||||||
@@ -1,31 +0,0 @@
|
|||||||
name: Unraid autoredeploy
|
|
||||||
|
|
||||||
on:
|
|
||||||
push:
|
|
||||||
branches: [master]
|
|
||||||
paths-ignore:
|
|
||||||
- ".gitea/**"
|
|
||||||
- "docs/**"
|
|
||||||
- "**/*.md"
|
|
||||||
workflow_dispatch:
|
|
||||||
|
|
||||||
concurrency:
|
|
||||||
group: unraid-production-mobilityops
|
|
||||||
cancel-in-progress: false
|
|
||||||
|
|
||||||
permissions:
|
|
||||||
contents: read
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
deploy:
|
|
||||||
name: Deploy mobilityops
|
|
||||||
runs-on: unraid-deploy
|
|
||||||
timeout-minutes: 180
|
|
||||||
steps:
|
|
||||||
- name: Deploy exact Gitea revision
|
|
||||||
run: |
|
|
||||||
set -euo pipefail
|
|
||||||
docker exec gitea-deploy-control \
|
|
||||||
/opt/gitea-deploy/deploy.py deploy \
|
|
||||||
"$GITHUB_REPOSITORY" "$GITHUB_SHA"
|
|
||||||
|
|
||||||
@@ -0,0 +1,4 @@
|
|||||||
|
81e3fd63bdbcb2e9c4ae1d709ea46f40537b6f62:backend/tests/test_data_quality.py:generic-api-key:869
|
||||||
|
0091c57c7fd82ffda16da1edfe5fa5589c8f1e13:backend/tests/test_return.py:generic-api-key:93
|
||||||
|
0091c57c7fd82ffda16da1edfe5fa5589c8f1e13:backend/tests/test_return.py:generic-api-key:122
|
||||||
|
0091c57c7fd82ffda16da1edfe5fa5589c8f1e13:backend/tests/test_return.py:generic-api-key:127
|
||||||
+1
-1
@@ -15,7 +15,7 @@ release line only.
|
|||||||
|
|
||||||
Do not disclose suspected vulnerabilities through a public issue.
|
Do not disclose suspected vulnerabilities through a public issue.
|
||||||
|
|
||||||
Report them privately to `jens@itworx.tech` with:
|
Report them privately to `security@itworx.tech` with:
|
||||||
|
|
||||||
- the affected revision, endpoint or component;
|
- the affected revision, endpoint or component;
|
||||||
- reproduction steps and prerequisites;
|
- reproduction steps and prerequisites;
|
||||||
|
|||||||
@@ -107,6 +107,8 @@ services:
|
|||||||
N8N_BASIC_AUTH_PASSWORD: ${N8N_BASIC_AUTH_PASSWORD:-change-me}
|
N8N_BASIC_AUTH_PASSWORD: ${N8N_BASIC_AUTH_PASSWORD:-change-me}
|
||||||
N8N_SECURE_COOKIE: "false"
|
N8N_SECURE_COOKIE: "false"
|
||||||
N8N_BLOCK_ENV_ACCESS_IN_NODE: "false"
|
N8N_BLOCK_ENV_ACCESS_IN_NODE: "false"
|
||||||
|
MOBILITYOPS_ALERT_RECIPIENT: ${MOBILITYOPS_ALERT_RECIPIENT:-alerts@example.test}
|
||||||
|
MOBILITYOPS_ALERT_SENDER: ${MOBILITYOPS_ALERT_SENDER:-n8n@example.test}
|
||||||
MOBILITYOPS_CALLBACK_TOKEN: ${MOBILITYOPS_CALLBACK_TOKEN:-replace-me-n8n-callback-token}
|
MOBILITYOPS_CALLBACK_TOKEN: ${MOBILITYOPS_CALLBACK_TOKEN:-replace-me-n8n-callback-token}
|
||||||
ports:
|
ports:
|
||||||
- "5678:5678"
|
- "5678:5678"
|
||||||
|
|||||||
@@ -6,6 +6,10 @@ export default defineConfig({
|
|||||||
// it mutates demo data via a reset and is run explicitly, not as part of the suite.
|
// it mutates demo data via a reset and is run explicitly, not as part of the suite.
|
||||||
testIgnore: process.env.CAPTURE_EVIDENCE === "1" ? undefined : "**/_*.spec.ts",
|
testIgnore: process.env.CAPTURE_EVIDENCE === "1" ? undefined : "**/_*.spec.ts",
|
||||||
timeout: 30_000,
|
timeout: 30_000,
|
||||||
|
// CI exercises the browser while image scans and container services share the
|
||||||
|
// same runner. Keep assertions strict, but allow successful API-backed route
|
||||||
|
// transitions enough time to render under that bounded load.
|
||||||
|
expect: { timeout: 15_000 },
|
||||||
fullyParallel: false,
|
fullyParallel: false,
|
||||||
workers: 1,
|
workers: 1,
|
||||||
snapshotPathTemplate: "{testDir}/__screenshots__/{arg}{ext}",
|
snapshotPathTemplate: "{testDir}/__screenshots__/{arg}{ext}",
|
||||||
|
|||||||
@@ -121,4 +121,4 @@ this handler was not observed live.
|
|||||||
| Active status | Imported inactive by default; production deployment must publish it before enabling Alertmanager. |
|
| Active status | Imported inactive by default; production deployment must publish it before enabling Alertmanager. |
|
||||||
| Error Workflow | `Fleet Ops — Workflow Error Handler` (wired) |
|
| Error Workflow | `Fleet Ops — Workflow Error Handler` (wired) |
|
||||||
| Safety | Strict Alertmanager payload shape, bounded to 25 alerts and bounded text fields. |
|
| Safety | Strict Alertmanager payload shape, bounded to 25 alerts and bounded text fields. |
|
||||||
| Checksum (sha256) | `3672ad3d14b65c603c8c3f2067197cc50372e9d4c2fc314d1c9b6aaf3ecef444` |
|
| Checksum (sha256) | `4eb1ae41c4e675a9bb51a43722a507da8a6eae8a6ce8649b7e3a57417911a418` |
|
||||||
|
|||||||
@@ -17,7 +17,7 @@
|
|||||||
"id": "accept", "name": "Accept alert", "type": "n8n-nodes-base.respondToWebhook", "typeVersion": 1.4, "position": [740, 300]
|
"id": "accept", "name": "Accept alert", "type": "n8n-nodes-base.respondToWebhook", "typeVersion": 1.4, "position": [740, 300]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"parameters": {"toRecipients": "jens@itworx.tech", "subject": "={{ $('Validate and format').item.json.subject }}", "bodyContent": "={{ $('Validate and format').item.json.html }}", "additionalFields": {"from": "n8n@itworx.tech", "bodyContentType": "html"}},
|
"parameters": {"toRecipients": "={{ $env.MOBILITYOPS_ALERT_RECIPIENT || 'alerts@example.test' }}", "subject": "={{ $('Validate and format').item.json.subject }}", "bodyContent": "={{ $('Validate and format').item.json.html }}", "additionalFields": {"from": "={{ $env.MOBILITYOPS_ALERT_SENDER || 'n8n@example.test' }}", "bodyContentType": "html"}},
|
||||||
"id": "email", "name": "Send owner email", "type": "n8n-nodes-base.microsoftOutlook", "typeVersion": 2, "position": [980, 300],
|
"id": "email", "name": "Send owner email", "type": "n8n-nodes-base.microsoftOutlook", "typeVersion": 2, "position": [980, 300],
|
||||||
"credentials": {"microsoftOutlookOAuth2Api": {"id": "EDTj3sOsganaoDVL", "name": "M365 n8n Shared Mailbox"}},
|
"credentials": {"microsoftOutlookOAuth2Api": {"id": "EDTj3sOsganaoDVL", "name": "M365 n8n Shared Mailbox"}},
|
||||||
"retryOnFail": true, "maxTries": 3, "waitBetweenTries": 1000
|
"retryOnFail": true, "maxTries": 3, "waitBetweenTries": 1000
|
||||||
|
|||||||
Reference in New Issue
Block a user