From 1ca1a71ed28acac296685c8bac2ebd594f80939d Mon Sep 17 00:00:00 2001 From: rickpeters Date: Tue, 29 Sep 2026 21:57:34 +0200 Subject: [PATCH 1/4] fix(ci): the Steamify step's name (the version isn't known yet when Gitea evaluates it) --- .github/workflows/steamify-iso.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/steamify-iso.yml b/.github/workflows/steamify-iso.yml index eb78c5b..2f251db 100644 --- a/.github/workflows/steamify-iso.yml +++ b/.github/workflows/steamify-iso.yml @@ -51,7 +51,7 @@ jobs: echo "ISO_PRERELEASE=$([ -n "${m[2]}" ] && echo true || echo false)" } >> "$GITHUB_ENV" - - name: Steamify ${{ env.STEAMIFY_VERSION }} on the ISO + - name: Steamify on the ISO (the version the tag names) run: ./steamify-prepare.sh - name: Build From fc4c3ec95d20118bb95493526296f8792ef59697 Mon Sep 17 00:00:00 2001 From: rickpeters Date: Tue, 29 Sep 2026 22:09:33 +0200 Subject: [PATCH 2/4] feat(ci): ISO releases by a Steamify release or by hand (not every push), Dutch time in the name, tag and label, annotated tags (their own date: the mirror sorts releases on the same commit in order) --- .github/workflows/iso-release.yml | 21 +++++++++++++-------- .github/workflows/steamify-iso.yml | 6 +++--- CHANGELOG.md | 2 +- archiso/profiledef.sh | 6 +++--- 4 files changed, 20 insertions(+), 15 deletions(-) diff --git a/.github/workflows/iso-release.yml b/.github/workflows/iso-release.yml index a9643e3..dc174d9 100644 --- a/.github/workflows/iso-release.yml +++ b/.github/workflows/iso-release.yml @@ -3,13 +3,13 @@ # builds the ISO on that tag and attaches it to its own release for it (steamify-iso.yml). The ISO lives there: # GitHub releases take at most 2 GB per file, the ISO is bigger, and a release on the mirror only survives its # syncs when its tag comes from here. -# Name: the Steamify version the ISO gets (its newest release) plus the time: master releases -# v-- (UTC), feat/steamify a pre-release v-dev.-. +# Name: the Steamify version the ISO gets (its newest release) plus the time (Dutch time, Europe/Amsterdam): +# master releases v--, feat/steamify a pre-release v-dev.<...>. name: Steamify ISO release (tag) +# Started by a new Steamify release (its bundle.yml, secret ISO_DISPATCH_TOKEN) or by hand (Run workflow, +# on master for a release, on feat/steamify for a test build); not by every push. on: - push: - branches: [master, feat/steamify] workflow_dispatch: permissions: @@ -32,11 +32,11 @@ jobs: run: | steamify="$(gh release view -R theupriser/steamify-cachyos --json tagName -q .tagName)" steamify="${steamify#v}" - stamp="$(date -u +%Y.%m.%d-%H%M)" + stamp="$(TZ=Europe/Amsterdam date +%Y.%m.%d-%H%M)" if [ "${{ github.ref }}" = refs/heads/master ]; then - tag="v$steamify-$stamp" pre="" name="CachyOS with Steamify Live ISO $steamify ($stamp UTC)" + tag="v$steamify-$stamp" pre="" name="CachyOS with Steamify Live ISO $steamify ($stamp)" else - tag="v$steamify-dev.$stamp" pre="--prerelease" name="CachyOS with Steamify Live ISO $steamify (test build $stamp UTC)" + tag="v$steamify-dev.$stamp" pre="--prerelease" name="CachyOS with Steamify Live ISO $steamify (test build $stamp)" fi # The Steamify section of CHANGELOG.md ("## CachyOS with Steamify Live ISO"), without its heading. section="$(awk '/^## CachyOS with Steamify Live ISO/ {found = 1; next} found && /^#/ {exit} found' CHANGELOG.md)" @@ -47,7 +47,12 @@ jobs: Sources: [Steamify](https://github.com/theupriser/steamify-cachyos/tree/v$steamify), this repository at this tag, and the packages' sources at [CachyOS](https://github.com/CachyOS) and [Arch Linux](https://archlinux.org/packages/). $section" - gh release create "$tag" --target "$GITHUB_SHA" $pre --title "$name" --notes "$notes" + # An annotated tag: its own date, so the mirror sorts releases on the same commit in order (a + # lightweight tag only has its commit's date). + git config user.name "github-actions[bot]" + git config user.email "41898282+github-actions[bot]@users.noreply.github.com" + git tag -a "$tag" -m "$name" "$GITHUB_SHA" && git push origin "refs/tags/$tag" + gh release create "$tag" --verify-tag $pre --title "$name" --notes "$notes" echo "Released $tag" # Optional: sync the mirror at once instead of at its interval (a Gitea token with repository write diff --git a/.github/workflows/steamify-iso.yml b/.github/workflows/steamify-iso.yml index 2f251db..f8574ce 100644 --- a/.github/workflows/steamify-iso.yml +++ b/.github/workflows/steamify-iso.yml @@ -46,7 +46,7 @@ jobs: m=("${BASH_REMATCH[@]}") { echo "STEAMIFY_VERSION=${m[1]}" - # One moment for the ISO's label (profiledef.sh) and the release's name: the tag's. + # One moment for the ISO's label (profiledef.sh) and the release's name: the tag's (Dutch time). echo "STEAMIFY_BUILD_STAMP=${m[3]}${m[4]}${m[5]}_${m[6]}" echo "ISO_PRERELEASE=$([ -n "${m[2]}" ] && echo true || echo false)" } >> "$GITHUB_ENV" @@ -70,9 +70,9 @@ jobs: tag="${{ github.ref_name }}" b="$STEAMIFY_BUILD_STAMP" stamp="${b:0:4}.${b:4:2}.${b:6:2}-${b:9:4}" if [ "$ISO_PRERELEASE" = true ]; then - name="CachyOS with Steamify Live ISO $STEAMIFY_VERSION (test build $stamp UTC)" + name="CachyOS with Steamify Live ISO $STEAMIFY_VERSION (test build $stamp)" else - name="CachyOS with Steamify Live ISO $STEAMIFY_VERSION ($stamp UTC)" + name="CachyOS with Steamify Live ISO $STEAMIFY_VERSION ($stamp)" fi # Never overwritten: a release for this tag that already has the ISO is left alone. api="${{ github.server_url }}/api/v1/repos/${{ github.repository }}" diff --git a/CHANGELOG.md b/CHANGELOG.md index af85315..6a48c9a 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -28,7 +28,7 @@ ## CachyOS with Steamify Live ISO CachyOS 26.08 with Steamify built in: install CachyOS and turn the PC into a Steam Machine in one go. -Its version is the Steamify version on it plus the build date and time (a release on `master` is `v--`, e.g. `v2.9.1-2026.09.29-1432`). +Its version is the Steamify version on it plus the build date and time (Dutch time; a release on `master` is `v--`, e.g. `v2.9.3-2026.09.29-2205`). A new Steamify release starts one (a test build for now); by hand: Run workflow on "Steamify ISO release (tag)". Releases: GitHub creates the tag and a release with the notes; the ISO itself (over GitHub's 2 GB limit) is built on the Gitea mirror and attached to its release for that tag (git.upriser.nl). **Features:** diff --git a/archiso/profiledef.sh b/archiso/profiledef.sh index 2b72809..c1b322e 100644 --- a/archiso/profiledef.sh +++ b/archiso/profiledef.sh @@ -4,10 +4,10 @@ iso_name="steamify-cachyos" # The label follows the release name: the Steamify version on the ISO (steamify-prepare.sh put it there) # plus the build date and time, e.g. STEAMIFY_2_9_1_20260929_1432 (ISO 9660: at most 32 characters, -# A-Z 0-9 _). STEAMIFY_BUILD_STAMP (YYYYMMDD_HHMM, UTC) from the release workflow, so both name the same -# moment; built by hand, the time now. +# A-Z 0-9 _). STEAMIFY_BUILD_STAMP (YYYYMMDD_HHMM, Dutch time) from the release workflow, so both name the +# same moment; built by hand, the time now (Europe/Amsterdam). _steamify="$(sed -n 's/^VERSION=//p' "${BASH_SOURCE[0]%/*}/airootfs/usr/local/share/steamify/steamify.sh" 2>/dev/null | head -n 1)" -_stamp="${STEAMIFY_BUILD_STAMP:-$(date -u --date="@${SOURCE_DATE_EPOCH:-$(date +%s)}" +%Y%m%d_%H%M)}" +_stamp="${STEAMIFY_BUILD_STAMP:-$(TZ=Europe/Amsterdam date --date="@${SOURCE_DATE_EPOCH:-$(date +%s)}" +%Y%m%d_%H%M)}" iso_label="STEAMIFY_${_steamify:+${_steamify//./_}_}${_stamp}" iso_label="${iso_label:0:32}" iso_publisher="CachyOS " From f19dd0867a287b73d9cb8063a52e9118a84f5355 Mon Sep 17 00:00:00 2001 From: rickpeters Date: Tue, 29 Sep 2026 22:11:32 +0200 Subject: [PATCH 3/4] feat: the ISO's file is named after its release tag (steamify-cachyos-2.9.3-dev.2026.09.29-2230-x86_64.iso), so the GitHub release links straight to the ISO and its SHA-256 on the mirror --- .github/workflows/iso-release.yml | 7 +++++-- .github/workflows/steamify-iso.yml | 2 ++ CHANGELOG.md | 2 +- archiso/profiledef.sh | 5 ++++- 4 files changed, 12 insertions(+), 4 deletions(-) diff --git a/.github/workflows/iso-release.yml b/.github/workflows/iso-release.yml index dc174d9..6444144 100644 --- a/.github/workflows/iso-release.yml +++ b/.github/workflows/iso-release.yml @@ -38,11 +38,14 @@ jobs: else tag="v$steamify-dev.$stamp" pre="--prerelease" name="CachyOS with Steamify Live ISO $steamify (test build $stamp)" fi + # The ISO's file on the mirror is named after the tag (steamify-iso.yml, profiledef.sh), so its + # download link is known now. + file="steamify-cachyos-${tag#v}-x86_64.iso" dl="$GITEA_URL/$GITEA_REPO/releases/download/$tag" # The Steamify section of CHANGELOG.md ("## CachyOS with Steamify Live ISO"), without its heading. section="$(awk '/^## CachyOS with Steamify Live ISO/ {found = 1; next} found && /^#/ {exit} found' CHANGELOG.md)" - notes="The ISO is built from \`$(git rev-parse --short HEAD)\` (${{ github.ref_name }}) with Steamify $steamify and published on the mirror (GitHub releases take at most 2 GB per file); it appears there within minutes of the mirror's sync: + notes="The ISO is built from \`$(git rev-parse --short HEAD)\` (${{ github.ref_name }}) with Steamify $steamify and published on the mirror (GitHub releases take at most 2 GB per file), about half an hour after this release (the mirror's sync, then the build): - **Download: $GITEA_URL/$GITEA_REPO/releases/tag/$tag** + **Download: [$file]($dl/$file)** ([SHA-256]($dl/$file.sha256), [release page]($GITEA_URL/$GITEA_REPO/releases/tag/$tag)) Sources: [Steamify](https://github.com/theupriser/steamify-cachyos/tree/v$steamify), this repository at this tag, and the packages' sources at [CachyOS](https://github.com/CachyOS) and [Arch Linux](https://archlinux.org/packages/). diff --git a/.github/workflows/steamify-iso.yml b/.github/workflows/steamify-iso.yml index f8574ce..ecd7f38 100644 --- a/.github/workflows/steamify-iso.yml +++ b/.github/workflows/steamify-iso.yml @@ -49,6 +49,8 @@ jobs: # One moment for the ISO's label (profiledef.sh) and the release's name: the tag's (Dutch time). echo "STEAMIFY_BUILD_STAMP=${m[3]}${m[4]}${m[5]}_${m[6]}" echo "ISO_PRERELEASE=$([ -n "${m[2]}" ] && echo true || echo false)" + # The ISO's file name: the tag without its v (profiledef.sh). + echo "STEAMIFY_ISO_VERSION=${tag#v}" } >> "$GITHUB_ENV" - name: Steamify on the ISO (the version the tag names) diff --git a/CHANGELOG.md b/CHANGELOG.md index 6a48c9a..f53269d 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -33,7 +33,7 @@ Releases: GitHub creates the tag and a release with the notes; the ISO itself (o **Features:** -* **ISO:** called `steamify-cachyos--x86_64.iso`, labelled after the Steamify version on it and the build time (`STEAMIFY_2_9_1_20260929_1432`, was CachyOS's `COS_`); CachyOS Hello installs it like CachyOS's own +* **ISO:** named after its release tag (`steamify-cachyos-2.9.3-2026.09.29-2230-x86_64.iso`; built by hand, the date), labelled after the Steamify version on it and the build time (`STEAMIFY_2_9_1_20260929_1432`, was CachyOS's `COS_`); CachyOS Hello installs it like CachyOS's own release (the build date is kept in `/etc/steammachine-iso-build`) * **Installer (CachyOS - Steamify Installer):** * A Steamify page after the packages page: which Steam Machine parts to set up (rows from diff --git a/archiso/profiledef.sh b/archiso/profiledef.sh index c1b322e..63029c6 100644 --- a/archiso/profiledef.sh +++ b/archiso/profiledef.sh @@ -12,7 +12,10 @@ iso_label="STEAMIFY_${_steamify:+${_steamify//./_}_}${_stamp}" iso_label="${iso_label:0:32}" iso_publisher="CachyOS " iso_application="Steamify CachyOS Live (based on CachyOS)" -iso_version="$(date --date="@${SOURCE_DATE_EPOCH:-$(date +%s)}" +%Y.%m.%d)" +# The file name (--x86_64.iso) follows the release tag without its v +# (STEAMIFY_ISO_VERSION from the release workflow: steamify-cachyos-2.9.3-dev.2026.09.29-2230-x86_64.iso); +# built by hand, the date. +iso_version="${STEAMIFY_ISO_VERSION:-$(date --date="@${SOURCE_DATE_EPOCH:-$(date +%s)}" +%Y.%m.%d)}" install_dir="arch" buildmodes=('iso') ## GRUB From d3956eef171e53e35a9ab55e57a6706ea423ea3c Mon Sep 17 00:00:00 2001 From: rickpeters Date: Tue, 29 Sep 2026 22:12:12 +0200 Subject: [PATCH 4/4] feat: the ISO's boot menu and /etc/steammachine-iso-build name its release tag too (were the build date): the tag decides everything --- CHANGELOG.md | 2 +- util-iso.sh | 4 +++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index f53269d..da103b5 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -34,7 +34,7 @@ Releases: GitHub creates the tag and a release with the notes; the ISO itself (o **Features:** * **ISO:** named after its release tag (`steamify-cachyos-2.9.3-2026.09.29-2230-x86_64.iso`; built by hand, the date), labelled after the Steamify version on it and the build time (`STEAMIFY_2_9_1_20260929_1432`, was CachyOS's `COS_`); CachyOS Hello installs it like CachyOS's own - release (the build date is kept in `/etc/steammachine-iso-build`) + release (the ISO's own release, its tag without the v, is in `/etc/steammachine-iso-build` and the boot menu) * **Installer (CachyOS - Steamify Installer):** * A Steamify page after the packages page: which Steam Machine parts to set up (rows from `steamify.sh --defaults --list`, the newest Steamify fetched before Calamares starts) and where diff --git a/util-iso.sh b/util-iso.sh index 84aee4e..3b32b74 100755 --- a/util-iso.sh +++ b/util-iso.sh @@ -140,7 +140,9 @@ prepare_profile(){ info "Profile: [%s]" "${profile}" - local _iso_version="$(date +%y%m%d)" + # The release tag without its v when the release workflow builds (STEAMIFY_ISO_VERSION): the boot menu + # and /etc/steammachine-iso-build name the same release as the file, label and tag. By hand: the date. + local _iso_version="${STEAMIFY_ISO_VERSION:-$(date +%y%m%d)}" change_grub_version "${_iso_version}" # Fetch up-to-date version of CachyOS repo mirrorlist