cat / goq
clone

turns a linux box into a private steam streaming appliance: plug in, tap your key, play from another computer

refactor(release): name Sigil assets by target contract

Dami committed 795ac58
commit
795ac58605237bdde31ccea954bea75d6ee93d07
parent
f53de5e47c6a2cadc2e3f951d89281f1ef61adef
author
Dami <dami.etoile@gmail.com>
22 files changed, +206 -44
M.github/workflows/portal-release.yml8+++-
M.github/workflows/sigil-release.yml10+++-
MAGENTS.md5++
MREADME.md2+-
Mdocs/fresh-bazzite-host.md14+++---
Mdocs/public-alpha-uat.md4+-
Mdocs/public-release-delivery.md25++++++++---
Arelease/sigil-target-contract.txt1+
Mscripts/install-bazzite-package.sh6++-
Mscripts/package-bazzite-release.sh15+++++-
Mscripts/public-alpha-uat.sh6++-
Mscripts/sign-bazzite-release.sh2+-
Mscripts/tests/bazzite-package-install-e2e.sh2+-
Mscripts/tests/package-bazzite-product-contract.sh5+-
Mscripts/tests/package-bazzite-provenance.sh16++++++-
Mscripts/tests/public-alpha-uat.sh6+-
Ascripts/tests/sigil-release-target-contract.sh72++++++++++++++++++++++++++++++
Mscripts/tests/sigil-release-verifier.sh16+++++--
Mscripts/tests/test_sigil_bootstrap.py7+++-
Mscripts/verify-sigil-bootstrap.py6+++
Mscripts/verify-sigil-release.sh19+++++++-
Mwebsite/install-sigil3+-
M .github/workflows/portal-release.yml +6 -2
M .github/workflows/sigil-release.yml +7 -3
@@ -94,7 +94,9 @@ jobs:
9494 id: candidate9595 run: |9696 source_commit="$(git rev-parse HEAD)"97- asset_name="sigil-$RELEASE_TAG-bazzite-x86_64.tar.gz"97+ target_contract="$(<release/sigil-target-contract.txt)"98+ test "$target_contract" = linux-glibc2.17-x86_6499+ asset_name="sigil-$RELEASE_TAG-$target_contract.tar.gz"98100 output_dir="$RUNNER_TEMP/sigil-release"99101 install -d -m 0700 "$output_dir"100102 archive="$output_dir/$asset_name"
@@ -174,7 +176,9 @@ jobs:
174176 release_json="$(gh release view "$RELEASE_TAG" --json isDraft,tagName,assets)"175177 test "$(jq -r '.isDraft' <<<"$release_json")" = true176178 test "$(jq -r '.tagName' <<<"$release_json")" = "$RELEASE_TAG"177- asset_name="sigil-$RELEASE_TAG-bazzite-x86_64.tar.gz"179+ target_contract="$(<release/sigil-target-contract.txt)"180+ test "$target_contract" = linux-glibc2.17-x86_64181+ asset_name="sigil-$RELEASE_TAG-$target_contract.tar.gz"178182 version="${RELEASE_TAG#v}"179183 expected="$(printf '%s\n' \180184 "$asset_name" \
@@ -233,6 +237,6 @@ jobs:
233237 gh release edit "$RELEASE_TAG" \234238 --draft=false \235239 --prerelease \236- --notes "Verified public alpha for $RELEASE_TAG: signed Bazzite Sigil host package plus Developer ID signed, notarized, stapled macOS arm64 Portal. Hardware UAT remains tracked separately."240+ --notes "Verified public alpha for $RELEASE_TAG: signed Linux glibc 2.17 x86_64 Sigil host package, validated on the supported Bazzite appliance, plus Developer ID signed, notarized, stapled macOS arm64 Portal. Hardware UAT remains tracked separately."237241 test "$(gh release view "$RELEASE_TAG" --json isDraft --jq '.isDraft')" = false238242 test "$(gh release view "$RELEASE_TAG" --json isPrerelease --jq '.isPrerelease')" = true
M AGENTS.md +5 -0
M README.md +1 -1
M docs/fresh-bazzite-host.md +7 -7
@@ -611,12 +611,12 @@ cd /Users/dami/Developer/sigil-spark
611611 source ~/.cargo/env612612 scripts/package-bazzite-release.sh \613613 --release-tag v0.1.0 \614- --output /tmp/sigil-v0.1.0-bazzite-x86_64.tar.gz614+ --output /tmp/sigil-v0.1.0-linux-glibc2.17-x86_64.tar.gz615615 616616 # Verify the candidate before it crosses the offline signing boundary.617617 scripts/verify-sigil-release.sh \618618 --tag v0.1.0 \619- --archive /tmp/sigil-v0.1.0-bazzite-x86_64.tar.gz \619+ --archive /tmp/sigil-v0.1.0-linux-glibc2.17-x86_64.tar.gz \620620 --source-commit "$(git rev-parse HEAD)" \621621 --candidate622622
@@ -624,19 +624,19 @@ scripts/verify-sigil-release.sh \
624624 # reviewed public key before extraction. See docs/public-release-delivery.md.625625 scripts/verify-sigil-release.sh \626626 --tag v0.1.0 \627- --archive /tmp/sigil-v0.1.0-bazzite-x86_64.tar.gz \627+ --archive /tmp/sigil-v0.1.0-linux-glibc2.17-x86_64.tar.gz \628628 --source-commit "$(git rev-parse HEAD)" \629629 --public-key-file /absolute/path/to/sigil-minisign.pub630-shasum -a 256 -c /tmp/sigil-v0.1.0-bazzite-x86_64.tar.gz.sha256631-scp /tmp/sigil-v0.1.0-bazzite-x86_64.tar.gz tank@umpc:/tmp/630+shasum -a 256 -c /tmp/sigil-v0.1.0-linux-glibc2.17-x86_64.tar.gz.sha256631+scp /tmp/sigil-v0.1.0-linux-glibc2.17-x86_64.tar.gz tank@umpc:/tmp/632632 633633 ssh tank@umpc '634634 set -eu635635 incoming="$HOME/.local/share/sigil-spark/incoming"636636 install -d -m 0700 "$incoming"637637 run_dir="$(mktemp -d "$incoming/package.XXXXXX")"638- tar -tzf /tmp/sigil-v0.1.0-bazzite-x86_64.tar.gz639- tar -xzf /tmp/sigil-v0.1.0-bazzite-x86_64.tar.gz -C "$run_dir"638+ tar -tzf /tmp/sigil-v0.1.0-linux-glibc2.17-x86_64.tar.gz639+ tar -xzf /tmp/sigil-v0.1.0-linux-glibc2.17-x86_64.tar.gz -C "$run_dir"640640 cd "$run_dir/payload"641641 sha256sum -c PACKAGE-SHA256SUMS642642 bash -n stage-this-release.sh
M docs/public-alpha-uat.md +2 -2
M docs/public-release-delivery.md +18 -7
@@ -9,12 +9,18 @@ Neither path may fall back to an unsigned development build.
99 The first public release is a draft or prerelease until capability-ticket1010 onboarding and the release-candidate hardware pass are complete.1111 12-Sigil publishes exactly these x86_64 Bazzite assets for a tag such as12+Sigil publishes exactly these Linux glibc 2.17 x86_64 assets for a tag such as1313 `v0.3.0-alpha.1`:1414 15-- `sigil-v0.3.0-alpha.1-bazzite-x86_64.tar.gz`16-- `sigil-v0.3.0-alpha.1-bazzite-x86_64.tar.gz.sha256`17-- `sigil-v0.3.0-alpha.1-bazzite-x86_64.tar.gz.minisig`15+- `sigil-v0.3.0-alpha.1-linux-glibc2.17-x86_64.tar.gz`16+- `sigil-v0.3.0-alpha.1-linux-glibc2.17-x86_64.tar.gz.sha256`17+- `sigil-v0.3.0-alpha.1-linux-glibc2.17-x86_64.tar.gz.minisig`18+19+The Sigil asset suffix names the binary target contract, not a support claim.20+The public bootstrap and package-owned activation path remain restricted to the21+Bazzite appliance until SteamOS or another host environment passes its own22+packaging, capability, cold-boot, and hardware acceptance gates. The canonical23+suffix is pinned in `release/sigil-target-contract.txt`.1824 1925 Portal preserves the package builder's versioned macOS contract:2026
@@ -77,8 +83,8 @@ environment builds clean tagged source, runs the complete repository gate,
7783 creates exactly these unsigned draft assets, and retains the same bytes as a7884 short-lived Actions artifact:7985 80-- `sigil-$tag-bazzite-x86_64.tar.gz`81-- `sigil-$tag-bazzite-x86_64.tar.gz.sha256`86+- `sigil-$tag-linux-glibc2.17-x86_64.tar.gz`87+- `sigil-$tag-linux-glibc2.17-x86_64.tar.gz.sha256`8288 8389 Move those bytes to the offline publisher machine. After independently8490 confirming the tag commit and reviewed public key, sign without exporting the
@@ -87,7 +93,7 @@ secret key or its passphrase:
8793 ```bash8894 scripts/sign-bazzite-release.sh \8995 --tag "$tag" \90- --archive "/absolute/offline/path/sigil-$tag-bazzite-x86_64.tar.gz" \96+ --archive "/absolute/offline/path/sigil-$tag-linux-glibc2.17-x86_64.tar.gz" \9197 --source-commit "$tag_commit" \9298 --minisign-key /absolute/offline/path/sigil-release.key \9399 --public-key-file /absolute/offline/path/sigil-minisign.pub
@@ -118,6 +124,11 @@ development flags are an inseparable escape hatch and cannot claim a release
118124 tag. `scripts/verify-sigil-release.sh` is the common candidate, offline, and119125 promotion verifier.120126 127+No public goq release exists under the former distro-named suffix. Unpublished128+drafts or locally staged candidates using `bazzite-x86_64` must be discarded129+and rebuilt; release verification intentionally provides no compatibility130+alias that could make two names identify the same public bytes.131+121132 ## Public Bazzite acceptance record122133 123134 Repository tests exercise a complete package fixture through fresh install,
A release/sigil-target-contract.txt +1 -0
M scripts/install-bazzite-package.sh +4 -2
@@ -26,6 +26,7 @@ die() {
2626 2727 script_dir="$(CDPATH='' cd -- "$(dirname -- "${BASH_SOURCE[0]}")" && pwd -P)"2828 payload_dir="$script_dir"29+readonly asset_target_contract="linux-glibc2.17-x86_64"2930 3031 while [[ $# -gt 0 ]]; do3132 case "$1" in
@@ -250,13 +251,14 @@ validate_release_tree() {
250251 cd "$path"251252 sha256sum -c SHA256SUMS252253 )253- python3 - "$path/release-manifest.json" <<'PY'254+ python3 - "$path/release-manifest.json" "$asset_target_contract" <<'PY'254255 import json255256 import pathlib256257 import re257258 import sys258259 259260 path = pathlib.Path(sys.argv[1])261+asset_target_contract = sys.argv[2]260262 try:261263 manifest = json.loads(path.read_text())262264 except (OSError, UnicodeDecodeError, json.JSONDecodeError) as error:
@@ -289,7 +291,7 @@ if not isinstance(commit, str) or re.fullmatch(r"[0-9a-f]{40}", commit) is None:
289291 if not isinstance(asset_name, str) or re.fullmatch(r"[A-Za-z0-9._-]+[.]tar[.]gz", asset_name) is None:290292 raise SystemExit("package install failed: release manifest asset name is invalid")291293 if release_kind == "product-candidate":292- if release_tag != f"v{version}" or asset_name != f"sigil-{release_tag}-bazzite-x86_64.tar.gz":294+ if release_tag != f"v{version}" or asset_name != f"sigil-{release_tag}-{asset_target_contract}.tar.gz":293295 raise SystemExit("package install failed: product release identity is inconsistent")294296 if manifest.get("git_dirty") is not False:295297 raise SystemExit("package install failed: product release claims dirty source")
M scripts/package-bazzite-release.sh +13 -2
@@ -12,6 +12,8 @@ allow_unsigned=false
1212 release_tag=""1313 linux_target="x86_64-unknown-linux-gnu.2.17"1414 linux_output_target="x86_64-unknown-linux-gnu"15+asset_target_contract_file="$repo_dir/release/sigil-target-contract.txt"16+asset_target_contract=""1517 1618 usage() {1719 cat <<'EOF'
@@ -19,7 +21,9 @@ Usage: scripts/package-bazzite-release.sh --output /absolute/path/package.tar.gz
1921 2022 Create an allowlisted, deterministic Bazzite host runtime package. Product mode2123 exports the clean source HEAD and builds both generic Linux release binaries in22-an isolated Cargo target directory. The package includes atomic install,24+an isolated Cargo target directory. Its public asset name describes that25+Linux/glibc/architecture contract rather than the validated host distribution.26+The package includes atomic install,2327 upgrade/rollback support, the systemd user unit, PipeWire sink, staged udev2428 rule, complete checksums, and build provenance. It never includes the source2529 tree, host identity, hardware configuration, environment files, or evidence.
@@ -95,6 +99,13 @@ while [[ $# -gt 0 ]]; do
9599 done96100 97101 [[ -n "$output_path" ]] || die "--output is required"102+[[ -f "$asset_target_contract_file" && ! -L "$asset_target_contract_file" ]] \103+ || die "Sigil asset target contract is missing or unsafe"104+[[ "$(wc -l <"$asset_target_contract_file" | tr -d ' ')" == 1 ]] \105+ || die "Sigil asset target contract must contain exactly one line"106+asset_target_contract="$(<"$asset_target_contract_file")"107+[[ "$asset_target_contract" == linux-glibc2.17-x86_64 ]] \108+ || die "Sigil asset target contract does not match the approved Linux build target"98109 case "$output_path" in99110 /*.tar.gz) ;;100111 *) die "--output must be an absolute .tar.gz path" ;;
@@ -123,7 +134,7 @@ if $allow_dirty || $allow_unsigned || $caller_supplied_binaries; then
123134 else124135 [[ "$release_tag" =~ ^v[0-9]+\.[0-9]+\.[0-9]+([.-][0-9A-Za-z][0-9A-Za-z.-]*)?$ ]] \125136 || die "product mode requires --release-tag vVERSION"126- expected_asset="sigil-$release_tag-bazzite-x86_64.tar.gz"137+ expected_asset="sigil-$release_tag-$asset_target_contract.tar.gz"127138 [[ "$(basename -- "$output_path")" == "$expected_asset" ]] \128139 || die "product output must be named $expected_asset"129140 fi
M scripts/public-alpha-uat.sh +5 -1
@@ -8,6 +8,7 @@ MAX_SOURCE_BYTES=$((1024 * 1024))
88 DEFAULT_MAX_AGE_SECONDS=$((7 * 24 * 60 * 60))99 FUTURE_SKEW_SECONDS=3001010 GITHUB_REPOSITORY='FelineStateMachine/goq'11+SIGIL_ASSET_TARGET_CONTRACT='linux-glibc2.17-x86_64'1112 required_kinds=(cold-boot controller mouse soak network-direct network-relay reconnect second-client)1213 all_kinds=("${required_kinds[@]}" loopback-preflight)1314 script_dir="$(CDPATH='' cd -- "$(dirname -- "${BASH_SOURCE[0]}")" && pwd -P)"
@@ -647,6 +648,7 @@ reject_sensitive_source() {
647648 validate_manifest() {648649 local directory="$1"649650 local manifest="$directory/manifest.tsv"651+ local sigil_archive_name650652 local key651653 local record_kind652654 local record_field
@@ -671,7 +673,9 @@ validate_manifest() {
671673 require_equal "$(manifest_get "$manifest" format)" "$FORMAT" format672674 require_commit "$(manifest_get "$manifest" git_commit)" manifest673675 require_release_tag "$(manifest_get "$manifest" release_tag)"674- [[ "$(manifest_get "$manifest" sigil_archive_name)" =~ ^sigil-v[0-9A-Za-z.-]+-bazzite-x86_64\.tar\.gz$ ]] \676+ sigil_archive_name="$(manifest_get "$manifest" sigil_archive_name)"677+ [[ "$sigil_archive_name" =~ ^sigil-v[0-9A-Za-z.-]+-[0-9A-Za-z._-]+[.]tar[.]gz$ \678+ && "$sigil_archive_name" == sigil-v*-"$SIGIL_ASSET_TARGET_CONTRACT".tar.gz ]] \675679 || die "invalid manifest Sigil archive name"676680 [[ "$(manifest_get "$manifest" portal_dmg_name)" =~ ^Portal-[0-9A-Za-z.-]+-arm64\.dmg$ ]] \677681 || die "invalid manifest Portal DMG name"
M scripts/sign-bazzite-release.sh +1 -1
M scripts/tests/bazzite-package-install-e2e.sh +1 -1
M scripts/tests/package-bazzite-product-contract.sh +3 -2
M scripts/tests/package-bazzite-provenance.sh +15 -1
M scripts/tests/public-alpha-uat.sh +3 -3
A scripts/tests/sigil-release-target-contract.sh +72 -0
@@ -0,0 +1,72 @@
1+#!/usr/bin/env bash2+3+set -euo pipefail4+5+script_dir="$(CDPATH='' cd -- "$(dirname -- "${BASH_SOURCE[0]}")" && pwd -P)"6+repo_dir="$(CDPATH='' cd -- "$script_dir/../.." && pwd -P)"7+contract_file="$repo_dir/release/sigil-target-contract.txt"8+expected_contract="linux-glibc2.17-x86_64"9+10+[[ -f "$contract_file" && ! -L "$contract_file" ]] \11+ || {12+ printf 'Sigil target contract file is missing or unsafe\n' >&213+ exit 114+ }15+[[ "$(wc -l <"$contract_file" | tr -d ' ')" == 1 ]] \16+ || {17+ printf 'Sigil target contract file must contain exactly one line\n' >&218+ exit 119+ }20+[[ "$(<"$contract_file")" == "$expected_contract" ]] \21+ || {22+ printf 'Sigil target contract does not match the approved build ABI\n' >&223+ exit 124+ }25+26+required_consumers=(27+ .github/workflows/portal-release.yml28+ .github/workflows/sigil-release.yml29+ AGENTS.md30+ README.md31+ docs/fresh-bazzite-host.md32+ docs/public-alpha-uat.md33+ docs/public-release-delivery.md34+ scripts/install-bazzite-package.sh35+ scripts/package-bazzite-release.sh36+ scripts/public-alpha-uat.sh37+ scripts/sign-bazzite-release.sh38+ scripts/verify-sigil-bootstrap.py39+ scripts/verify-sigil-release.sh40+ website/install-sigil41+)42+for relative in "${required_consumers[@]}"; do43+ grep -Fq "$expected_contract" "$repo_dir/$relative" || {44+ printf 'Sigil release target contract is missing from %s\n' "$relative" >&245+ exit 146+ }47+done48+49+# The old distro suffix may remain only in immutable Bazzite hardware-UAT50+# evidence and in the explicit migration note. It must never return as a51+# product release asset identity.52+while IFS=: read -r relative _ line; do53+ relative="${relative#./}"54+ case "$relative:$line" in55+ .github/workflows/sigil-hardware-uat.yml:*sigil-hardware-uat-*-bazzite-x86_64.tar.gz*) ;;56+ docs/hardware-uat/*:*sigil-hardware-uat-*-bazzite-x86_64.tar.gz*) ;;57+ scripts/run-bazzite-hardware-uat.sh:*sigil-hardware-uat-*-bazzite-x86_64.tar.gz*) ;;58+ docs/public-release-delivery.md:*candidates*using*bazzite-x86_64*) ;;59+ *)60+ printf 'legacy distro identity leaked outside its allowlist: %s: %s\n' \61+ "$relative" "$line" >&262+ exit 163+ ;;64+ esac65+done < <(66+ cd "$repo_dir"67+ rg -n --hidden --glob '!.git/**' --glob '!target/**' \68+ --glob '!scripts/tests/sigil-release-target-contract.sh' \69+ --fixed-strings 'bazzite-x86_64' .70+)71+72+printf 'sigil_release_target_contract_tests=ok\n'
M scripts/tests/sigil-release-verifier.sh +12 -4
@@ -38,7 +38,7 @@ root = pathlib.Path(sys.argv[1])
3838 tag = sys.argv[2]3939 commit = sys.argv[3]4040 variant = sys.argv[4]41-asset = f"sigil-{tag}-bazzite-x86_64.tar.gz"41+asset = f"sigil-{tag}-linux-glibc2.17-x86_64.tar.gz"4242 archive_path = root / asset4343 4444 manifest = {
@@ -154,10 +154,18 @@ assert_rejected() {
154154 155155 valid_dir="$temp_root/valid"156156 make_fixture "$valid_dir"157-archive="$valid_dir/sigil-$release_tag-bazzite-x86_64.tar.gz"157+archive="$valid_dir/sigil-$release_tag-linux-glibc2.17-x86_64.tar.gz"158158 "$verifier" --tag "$release_tag" --archive "$archive" \159159 --source-commit "$source_commit" --candidate | grep -Fq 'sigil_release_verification=ok'160160 161+legacy_contract="bazzite""-x86_64"162+legacy_archive="$valid_dir/sigil-$release_tag-$legacy_contract.tar.gz"163+cp "$archive" "$legacy_archive"164+cp "$archive.sha256" "$legacy_archive.sha256"165+assert_rejected legacy-distro-name \166+ "archive must be named sigil-$release_tag-linux-glibc2.17-x86_64.tar.gz" \167+ "$verifier" --tag "$release_tag" --archive "$legacy_archive" --candidate168+161169 printf 'not a signature\n' >"$archive.minisig"162170 key_file="$temp_root/test.pub"163171 printf '%s\n%s\n' 'untrusted comment: test key' \
@@ -176,7 +184,7 @@ assert_rejected wrong-commit 'commit does not match' \
176184 177185 bad_checksum_dir="$temp_root/bad-checksum"178186 make_fixture "$bad_checksum_dir"179-bad_archive="$bad_checksum_dir/sigil-$release_tag-bazzite-x86_64.tar.gz"187+bad_archive="$bad_checksum_dir/sigil-$release_tag-linux-glibc2.17-x86_64.tar.gz"180188 printf '%064d %s\n' 0 "$(basename -- "$bad_archive")" >"$bad_archive.sha256"181189 assert_rejected bad-checksum 'checksum declaration does not exactly match' \182190 "$verifier" --tag "$release_tag" --archive "$bad_archive" --candidate
@@ -184,7 +192,7 @@ assert_rejected bad-checksum 'checksum declaration does not exactly match' \
184192 for variant in symlink duplicate unexpected default-features demo-auth-bypass; do185193 fixture_dir="$temp_root/$variant"186194 make_fixture "$fixture_dir" "$variant"187- fixture_archive="$fixture_dir/sigil-$release_tag-bazzite-x86_64.tar.gz"195+ fixture_archive="$fixture_dir/sigil-$release_tag-linux-glibc2.17-x86_64.tar.gz"188196 case "$variant" in189197 symlink) expected='unsafe type' ;;190198 duplicate) expected='duplicate members' ;;
M scripts/tests/test_sigil_bootstrap.py +6 -1
M scripts/verify-sigil-bootstrap.py +6 -0
M scripts/verify-sigil-release.sh +16 -3
@@ -5,10 +5,12 @@ set -euo pipefail
55 usage() {66 cat <<'EOF'77 Usage: scripts/verify-sigil-release.sh \8- --tag vVERSION --archive /absolute/path/sigil-vVERSION-bazzite-x86_64.tar.gz \8+ --tag vVERSION --archive /absolute/path/sigil-vVERSION-linux-glibc2.17-x86_64.tar.gz \99 [--source-commit HEX] [--candidate | --public-key-file PATH]1010 11-Verify the exact Sigil Bazzite release asset contract without extracting it.11+Verify the exact Sigil Linux/glibc/x86_64 release asset contract without12+extracting it. This target identity does not broaden the separately validated13+host-distribution support boundary.1214 Candidate mode verifies a clean, unsigned product candidate before it crosses1315 the offline signing boundary. Published mode additionally requires and verifies1416 ARCHIVE.minisig with the reviewed Minisign public key file.
@@ -20,6 +22,17 @@ die() {
2022 exit 12123 }2224 25+script_dir="$(CDPATH='' cd -- "$(dirname -- "${BASH_SOURCE[0]}")" && pwd -P)"26+repo_dir="$(CDPATH='' cd -- "$script_dir/.." && pwd -P)"27+asset_target_contract_file="$repo_dir/release/sigil-target-contract.txt"28+[[ -f "$asset_target_contract_file" && ! -L "$asset_target_contract_file" ]] \29+ || die "Sigil asset target contract is missing or unsafe"30+[[ "$(wc -l <"$asset_target_contract_file" | tr -d ' ')" == 1 ]] \31+ || die "Sigil asset target contract must contain exactly one line"32+asset_target_contract="$(<"$asset_target_contract_file")"33+[[ "$asset_target_contract" == linux-glibc2.17-x86_64 ]] \34+ || die "Sigil asset target contract does not match the approved Linux build target"35+2336 sha256_file() {2437 if command -v sha256sum >/dev/null 2>&1; then2538 sha256sum "$1" | awk '{print $1}'
@@ -75,7 +88,7 @@ done
7588 [[ "$archive_path" == /* ]] || die "--archive must be absolute"7689 [[ -f "$archive_path" && ! -L "$archive_path" ]] || die "archive is missing or unsafe"7790 78-asset_name="sigil-$release_tag-bazzite-x86_64.tar.gz"91+asset_name="sigil-$release_tag-$asset_target_contract.tar.gz"7992 [[ "$(basename -- "$archive_path")" == "$asset_name" ]] \8093 || die "archive must be named $asset_name"8194 checksum_path="$archive_path.sha256"
M website/install-sigil +2 -1