Skip to content

Commit 10a4097

Browse files
committed
Release Server v1.6.355 authentication update
1 parent 46540d7 commit 10a4097

6 files changed

Lines changed: 335 additions & 50 deletions

.github/workflows/publish-port-preflight-runtime-patch.yml

Lines changed: 116 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,10 @@ on:
55

66
permissions:
77
contents: read
8+
id-token: write
9+
attestations: write
810
packages: write
11+
artifact-metadata: write
912

1013
concurrency:
1114
group: server-port-preflight-runtime-patch
@@ -105,6 +108,96 @@ jobs:
105108
"$SOURCE_SHA" "$RELEASE_TAG" "$payload_a" "$image_a" "$image_b" |
106109
tee "$RUNNER_TEMP/reproducibility.txt"
107110
111+
- name: Verify scanner and enforce image security gates
112+
shell: bash
113+
run: |
114+
set -Eeuo pipefail
115+
trivy_version=0.73.0
116+
trivy_sha256=2edd39da482bb4e9831962487b68f68e3928ec3137794757f54d00383d79547b
117+
trivy_source_sha=40c73e5d6166dcc0346a1ab4e94499d1572854e4
118+
trivy_root="${RUNNER_TEMP}/trivy-${trivy_version}"
119+
trivy_asset="${trivy_root}/trivy_${trivy_version}_Linux-64bit.tar.gz"
120+
mkdir -p "$trivy_root"
121+
122+
curl --fail --show-error --silent --location \
123+
"https://github.com/aquasecurity/trivy/releases/download/v${trivy_version}/trivy_${trivy_version}_Linux-64bit.tar.gz" \
124+
--output "$trivy_asset"
125+
printf '%s %s\n' "$trivy_sha256" "$trivy_asset" | sha256sum --check
126+
trivy_attestation_status=verified
127+
attestation_error="${trivy_root}/attestation-error.txt"
128+
if ! gh attestation verify "$trivy_asset" \
129+
--repo aquasecurity/trivy \
130+
--signer-workflow aquasecurity/trivy/.github/workflows/reusable-release.yaml \
131+
--source-ref "refs/tags/v${trivy_version}" \
132+
--source-digest "$trivy_source_sha" \
133+
--signer-digest "$trivy_source_sha" \
134+
--deny-self-hosted-runners \
135+
2>"$attestation_error"; then
136+
if grep -Fq 'organization has an IP allow list enabled' \
137+
"$attestation_error"; then
138+
trivy_attestation_status=unavailable-source-ip-allow-list
139+
printf '::warning::Trivy provenance API is unavailable because the source organization rejects this hosted-runner IP. Exact asset SHA-256 verification remains mandatory.\n'
140+
else
141+
cat "$attestation_error" >&2
142+
exit 1
143+
fi
144+
fi
145+
tar -xzf "$trivy_asset" -C "$trivy_root"
146+
test "$("${trivy_root}/trivy" --version | awk '/^Version:/ {print $2}')" = \
147+
"$trivy_version"
148+
149+
"${trivy_root}/trivy" image \
150+
--cache-dir "${RUNNER_TEMP}/trivy-cache" \
151+
--scanners vuln,secret \
152+
--format json \
153+
--output "${RUNNER_TEMP}/server-security-scan.json" \
154+
"$TARGET_IMAGE"
155+
jq -e '.SchemaVersion == 2 and (.Results | type == "array")' \
156+
"${RUNNER_TEMP}/server-security-scan.json" >/dev/null
157+
jq -r '
158+
.Results[]?
159+
| .Target as $target
160+
| .Vulnerabilities[]?
161+
| select(.Severity == "CRITICAL" or .Severity == "HIGH")
162+
| [.Severity, .VulnerabilityID, .PkgName, .InstalledVersion,
163+
(.FixedVersion // ""), ($target // "")]
164+
| @tsv
165+
' "${RUNNER_TEMP}/server-security-scan.json" |
166+
LC_ALL=C sort -u >"${RUNNER_TEMP}/server-critical-high.tsv"
167+
jq -r '
168+
.Results[]?
169+
| .Target as $target
170+
| .Secrets[]?
171+
| [.RuleID, .Category, .Severity, (.Title // ""), ($target // "")]
172+
| @tsv
173+
' "${RUNNER_TEMP}/server-security-scan.json" |
174+
LC_ALL=C sort -u >"${RUNNER_TEMP}/server-secrets.tsv"
175+
test ! -s "${RUNNER_TEMP}/server-critical-high.tsv"
176+
test ! -s "${RUNNER_TEMP}/server-secrets.tsv"
177+
178+
"${trivy_root}/trivy" image \
179+
--cache-dir "${RUNNER_TEMP}/trivy-cache" \
180+
--format cyclonedx \
181+
--output "${RUNNER_TEMP}/server.cdx.json" \
182+
"$TARGET_IMAGE"
183+
jq -e '
184+
.bomFormat == "CycloneDX"
185+
and ((.specVersion | type) == "string")
186+
and ((.components | type) == "array")
187+
and ((.components | length) > 0)
188+
' "${RUNNER_TEMP}/server.cdx.json" >/dev/null
189+
printf '%s\n' "$trivy_attestation_status" \
190+
>"${RUNNER_TEMP}/trivy-attestation-verification.txt"
191+
"${trivy_root}/trivy" --version >"${RUNNER_TEMP}/trivy-version.txt"
192+
sha256sum \
193+
"${RUNNER_TEMP}/server-security-scan.json" \
194+
"${RUNNER_TEMP}/server-critical-high.tsv" \
195+
"${RUNNER_TEMP}/server-secrets.tsv" \
196+
"${RUNNER_TEMP}/server.cdx.json" \
197+
"${RUNNER_TEMP}/trivy-attestation-verification.txt" \
198+
"${RUNNER_TEMP}/trivy-version.txt" \
199+
>"${RUNNER_TEMP}/server-security-evidence.sha256"
200+
108201
- name: Publish public semantic-version image
109202
id: publish
110203
shell: bash
@@ -133,7 +226,23 @@ jobs:
133226
tee "$RUNNER_TEMP/published.txt"
134227
printf 'digest=%s\n' "$digest" >>"$GITHUB_OUTPUT"
135228
229+
- name: Attest published image provenance
230+
uses: actions/attest@508db95dd578ae2727ebd6217d5ba78e4fbda05d # v4.2.1
231+
with:
232+
subject-name: ghcr.io/pasturestack/server
233+
subject-digest: ${{ steps.publish.outputs.digest }}
234+
push-to-registry: true
235+
236+
- name: Attest published image SBOM
237+
uses: actions/attest@508db95dd578ae2727ebd6217d5ba78e4fbda05d # v4.2.1
238+
with:
239+
subject-name: ghcr.io/pasturestack/server
240+
subject-digest: ${{ steps.publish.outputs.digest }}
241+
sbom-path: ${{ runner.temp }}/server.cdx.json
242+
push-to-registry: true
243+
136244
- name: Retain publication evidence
245+
if: always()
137246
uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2
138247
with:
139248
name: server-${{ env.RELEASE_TAG }}-publication-evidence
@@ -144,6 +253,13 @@ jobs:
144253
${{ runner.temp }}/push.log
145254
${{ runner.temp }}/image-inspect.txt
146255
${{ runner.temp }}/published.txt
256+
${{ runner.temp }}/server-security-scan.json
257+
${{ runner.temp }}/server-critical-high.tsv
258+
${{ runner.temp }}/server-secrets.tsv
259+
${{ runner.temp }}/server.cdx.json
260+
${{ runner.temp }}/server-security-evidence.sha256
261+
${{ runner.temp }}/trivy-attestation-verification.txt
262+
${{ runner.temp }}/trivy-version.txt
147263
if-no-files-found: error
148264
retention-days: 30
149265
compression-level: 9

README.md

Lines changed: 11 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -11,8 +11,9 @@ PastureStack is an independent community effort to preserve, audit, and moderniz
1111
This is a compatibility-focused modernization project. Existing Ubuntu 26.04,
1212
Java 25, MariaDB, modern Docker, non-root runtime, artifact-integrity,
1313
authentication, WebSocket, backup/restore, and test work is retained. Server
14-
`v1.6.355` combines Orchestration Engine `0.183.281`, Node Agent `0.13.22`, and
15-
the reviewed Ember 6.12 LTS Web Console `1.6.66`.
14+
`v1.6.355` combines Orchestration Engine `0.183.281`, Node Agent `0.13.22`,
15+
Authentication Service `0.4.35`, and the reviewed Ember 6.12 LTS Web Console
16+
`1.6.68`.
1617

1718
Authoritative host-port and volume preflight protects create and upgrade
1819
operations without weakening project ownership checks. Managed-network checks
@@ -59,12 +60,18 @@ The Web Console formats schema-validation field names without legacy String
5960
prototype extensions, so a missing localized field label cannot leave a
6061
container or service form stuck in the saving state.
6162

62-
Web Console `1.6.66` gives the loading overlay a deterministic lifecycle and a
63+
Web Console `1.6.68` gives the loading overlay a deterministic lifecycle and a
6364
distinct rectangular PastureStack stack-panel loading state. Only the newest
6465
route transition may change its state; successful, rejected, aborted, and overlapping transitions
6566
release it safely, with a 30-second watchdog as a final recovery path. The
6667
retired grass, celestial-body, and orbit scene is rejected by the packaged
67-
image gate.
68+
image gate. Reduced-motion mode retains a low-displacement layer pulse and
69+
progress-colour cycle instead of leaving the overlay visually frozen.
70+
71+
Authentication Service `0.4.35` is installed from its checksum-verified public
72+
release without replacing the established launch wrapper. The packaged image
73+
requires the reviewed archive digest, extracted-binary digest, exact source
74+
commit, static binary, and exact version output before publication.
6875

6976
The embedded Catalog snapshot is pinned to commit
7077
`bc446236c16f1170eb9130b4901af3d57dd82db4`. It retains prior immutable

docs/releases/server-1.6.355.md

Lines changed: 37 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,9 @@
11
# PastureStack Server v1.6.355
22

3-
Server v1.6.355 packages Web Console `1.6.66`, the reviewed Catalog snapshot,
4-
and the Resource Scheduler catalog revision without changing the established
5-
Orchestration Engine or Node Agent runtime coordinates.
3+
Server v1.6.355 packages Authentication Service `0.4.35`, Web Console `1.6.68`,
4+
the reviewed Catalog snapshot, and the Resource Scheduler catalog revision
5+
without changing the established Orchestration Engine or Node Agent runtime
6+
coordinates.
67

78
## Runtime components
89

@@ -11,10 +12,17 @@ Orchestration Engine or Node Agent runtime coordinates.
1112
- Orchestration Engine artifact SHA-256:
1213
`da2a8a51562ed16e296f7e29e99482bb44042ff0834cca679bbe01d951ba1682`
1314
- Node Agent: `0.13.22`
14-
- Web Console: `1.6.66`
15-
- Web Console source: `dd5f6428ae2bebbc3b427569906be43b419c2c99`
15+
- Authentication Service: `0.4.35`
16+
- Authentication Service source:
17+
`b5f50c57407fcc1b789bff680084226fba2e3171`
18+
- Authentication Service archive SHA-256:
19+
`17c10c2d907d75cc2ead63b9b7ec7c3535b9d45e812afede94c0df799251172b`
20+
- Authentication Service binary SHA-256:
21+
`a49f60048d841b5e164a3f9d60f52f125e8d6b663f337b4aafb7a20b4e4034dd`
22+
- Web Console: `1.6.68`
23+
- Web Console source: `bcd2e28ef63878be5d3d38c06119395d09a0211f`
1624
- Web Console artifact SHA-256:
17-
`826f68413598f1fcc8c6983f487cb357a4a1a46af2b65e7059f7c5c8d335054f`
25+
`3f98339b378e2a77a86d3078ba3f1f1448030f58d5ef96b9c6bbfcb13b3f9a24`
1826
- Catalog snapshot: `bc446236c16f1170eb9130b4901af3d57dd82db4`
1927
- Resource Scheduler catalog release: `v0.8.16`
2028

@@ -28,6 +36,17 @@ and aborted transitions all release the overlay, and a 30-second watchdog
2836
prevents an unresolved transition from blocking the interface indefinitely.
2937
The image gate requires the project mark, three stack layers, and progress rail,
3038
and rejects the retired grass, celestial-body, orbit, and rotating-ring scenes.
39+
Reduced-motion mode retains a low-displacement layer pulse and progress-colour
40+
cycle, so an operating-system accessibility preference does not leave the
41+
transition visually frozen.
42+
43+
Authentication Service `0.4.35` preserves the established route, token,
44+
identity, encrypted-provider configuration, SAML callback, and launch-wrapper
45+
contracts while adding the reviewed provider-neutral OpenID Connect flow and
46+
identity-link proof. Assembly verifies both the release archive and extracted
47+
static binary by SHA-256, rejects unexpected archive members or links, and
48+
requires the exact version output before replacing only
49+
`/usr/bin/authentication-service.real`.
3150

3251
The Catalog snapshot retains every prior immutable Resource Scheduler template
3352
revision and adds `v0.8.16` as a new revision. Its public image reference is
@@ -50,14 +69,18 @@ visible.
5069

5170
## Validation
5271

53-
The exact Web Console source passed its source, dependency, workspace,
54-
focused transition, production-build, reproducible-artifact, and visible DOM
55-
gates. Server assembly verifies the public release checksum, archive root,
56-
version marker, required licenses, branded loading markers, and absence of the
57-
retired scene before producing the image. Live deployment acceptance also
58-
checks `/ping`, login, authenticated route navigation, overlay dismissal,
59-
Catalog revision discovery, Resource Scheduler continuity, container restart
60-
count, and rollback readiness.
72+
The exact Web Console source passed 340 Chrome 151 browser tests plus source,
73+
dependency, workspace, focused-transition, production-build,
74+
reproducible-artifact, and visible-DOM gates. The Authentication Service release
75+
passed its full race-enabled suite, two byte-identical builds, zero applicable
76+
Critical or High findings, CycloneDX 1.7 SBOM gate, OpenVEX review, and GitHub
77+
SLSA and SBOM attestation verification. Server assembly verifies the public
78+
release checksums, archive roots, version markers, required licenses, branded
79+
loading markers, and absence of the retired scene before producing the image.
80+
Live deployment acceptance also checks `/ping`, local login, OpenID Connect,
81+
MFA, authenticated route navigation, overlay dismissal, Catalog revision
82+
discovery, Resource Scheduler continuity, container restart count, and rollback
83+
readiness.
6184

6285
PastureStack is an independent community effort to preserve, audit, and
6386
modernize the Rancher 1.6 ecosystem. It is not affiliated with or endorsed by

0 commit comments

Comments
 (0)