44 Commits
Author SHA1 Message Date
theupriser ec174cc7b7 Merge pull request #21 from theupriser/feature/iso-release-notes
Sync git.upriser.nl mirror / sync (push) Skipped
Feature/iso release notes
2026-09-30 13:33:50 +02:00
theupriser 66d4b6c91d feat(ci): release title CachyOS <base> with Steamify <version> on GitHub and on the mirror
Sync git.upriser.nl mirror / sync (push) Skipped
2026-09-30 13:33:03 +02:00
theupriser 63b2bb96a0 fix(ci): the badge links to the public Gitea address (the runner's own server URL is http://server:3000)
Sync git.upriser.nl mirror / sync (push) Skipped
2026-09-30 13:30:36 +02:00
theupriser e430e0bb01 Merge pull request #20 from theupriser/feature/iso-release-notes
Sync git.upriser.nl mirror / sync (push) Skipped
feat(ci): generated release notes (Steamify changelog and commits since the last release)
2026-09-30 13:30:21 +02:00
theupriser dac15ff9e4 feat(ci): release notes: wording when there is no earlier release to compare with
Sync git.upriser.nl mirror / sync (push) Skipped
2026-09-30 13:23:02 +02:00
theupriser 71d429915e feat(ci): release notes: clearer wording, workflow (ci) and docs commits left out of the ISO's change list, checksum section
Sync git.upriser.nl mirror / sync (push) Skipped
2026-09-30 13:22:47 +02:00
theupriser acde716b86 feat(ci): release notes are generated: the base version, Steamify's changelog section and the commits since the previous release; the mirror's release uses the same text 2026-09-30 13:20:22 +02:00
theupriser d077348ca2 Merge pull request #19 from theupriser/feature/iso-build-badge
Sync git.upriser.nl mirror / sync (push) Skipped
feat(ci): build badge in the GitHub release (running, succeeded, failed)
2026-09-30 13:07:49 +02:00
theupriser 2686b20fd6 feat(ci): a build badge in the GitHub release: running, then succeeded / failed / cancelled from the mirror's build
Sync git.upriser.nl mirror / sync (push) Skipped
2026-09-30 13:07:30 +02:00
theupriser f1689f5c6c Merge pull request #18 from theupriser/feature/iso-steamify-ref
Sync git.upriser.nl mirror / sync (push) Skipped
feat(ci): build the ISO with a Steamify branch (steamify_ref)
2026-09-30 13:06:52 +02:00
theupriser 2494c1ad2e feat(ci): build the ISO with a Steamify branch (input steamify_ref): a release branch tests its own version before it is released 2026-09-30 12:44:49 +02:00
theupriser 46ecbac514 Merge pull request #17 from theupriser/bugfix/iso-dispatch-build
Sync git.upriser.nl mirror / sync (push) Skipped
fix(ci): start the mirror's build by dispatch (a replaced tag starts no run)
2026-09-30 12:42:25 +02:00
theupriser bc75c692c6 fix(ci): dispatch the mirror's build with the full ref (refs/tags/<tag>) and show the server's error
Sync git.upriser.nl mirror / sync (push) Skipped
2026-09-30 12:40:28 +02:00
theupriser a0fcce57e8 fix(ci): the mirror's build is started by dispatch after the mirror has the tag (a replaced tag starts no run by itself)
Sync git.upriser.nl mirror / sync (push) Skipped
2026-09-30 12:38:22 +02:00
theupriser d6b63937ae Merge pull request #16 from theupriser/bugfix/iso-mirror-wait
Sync git.upriser.nl mirror / sync (push) Skipped
fix(ci): wait for the mirror to drop the replaced tag
2026-09-30 12:37:06 +02:00
theupriser 6222bf7c5c fix(ci): wait for the mirror to drop the old tag by the tag list (the single-tag URL always answers 404 there) 2026-09-30 12:35:46 +02:00
theupriser 38bc1c1aa9 Merge pull request #15 from theupriser/feature/iso-kind-input
Sync git.upriser.nl mirror / sync (push) Skipped
feat(ci): the kind of ISO build as an input, daily names, 10 releases per kind
2026-09-30 11:39:30 +02:00
theupriser 588627a14d feat(ci): ISOs are named by the day like CachyOS (steamify-cachyos-<ver>-<YYMMDD>), one per day and kind, at most 10 dev and 10 real releases kept
Sync git.upriser.nl mirror / sync (push) Skipped
2026-09-30 11:35:22 +02:00
theupriser 38ac8f1cba feat(ci): iso-1-github-tag.yml takes the kind of build (release, dev, auto) so it always runs from master 2026-09-30 11:32:25 +02:00
theupriser ceadf20a1b Merge pull request #14 from theupriser/feat/steamify
Sync git.upriser.nl mirror / sync (push) Skipped
Feat/steamify
2026-09-30 10:43:25 +02:00
theupriser 11e2ba62e9 ci: the Gitea flow only builds and releases; the VM tests run on GitHub
Sync git.upriser.nl mirror / sync (push) Skipped
2026-09-30 10:27:07 +02:00
theupriser 504f066a3f ci: the ISO's install test runs on Steam Machine hardware and on a plain PC (3 VMs at a time each, the plain PC after)
Sync git.upriser.nl mirror / sync (push) Skipped
2026-09-30 10:12:52 +02:00
theupriser a7f84cd5a0 ci: the test jobs use no actions (the runner's shared action clone broke parallel jobs); logs go into the job log
Sync git.upriser.nl mirror / sync (push) Skipped
2026-09-30 10:03:17 +02:00
theupriser 21e52ec81c ci: keep the install and serial logs of the boot loader VMs
Sync git.upriser.nl mirror / sync (push) Skipped
2026-09-30 09:43:12 +02:00
theupriser f37dcf6aa6 ci: the ISO's install test is a plain matrix again (one job per loader, 5 GB to install)
Sync git.upriser.nl mirror / sync (push) Skipped
2026-09-30 09:40:59 +02:00
theupriser 5dea6ac7d9 ci: the ISO flow only tests that the ISO installs correctly (vmbootloadertest.sh --quick)
Sync git.upriser.nl mirror / sync (push) Skipped
2026-09-30 09:38:42 +02:00
theupriser ea7cbfd179 ci: drop the suites stage from the ISO flow (steamify-cachyos tests steamify.sh in its own vmtest.yml)
Sync git.upriser.nl mirror / sync (push) Skipped
2026-09-30 09:33:09 +02:00
theupriser 02c207c9e5 ci: two fixed boot loader lanes (the runner ignores max-parallel)
Sync git.upriser.nl mirror / sync (push) Skipped
2026-09-30 09:02:23 +02:00
theupriser 13e4bbd0d6 ci: sync the git.upriser.nl mirror on every branch and tag
Sync git.upriser.nl mirror / sync (push) Skipped
2026-09-30 08:54:43 +02:00
theupriser 55a1c6ab61 ci: sync the git.upriser.nl mirror on pushes to master, feat/steamify and release branches (the mirror has no interval of its own)
Sync git.upriser.nl mirror / sync (push) Skipped
2026-09-30 08:54:06 +02:00
theupriser 85205dd614 ci: the suites' base VM is installed from the ISO this run built (Steamify step skipped); no CachyOS ISO download or cache 2026-09-30 08:46:11 +02:00
theupriser 34e3d2ae4a ci: the CachyOS ISO cache per CachyOS release again (the Steamify ISO of the run goes to the jobs as an artifact) 2026-09-30 08:43:23 +02:00
theupriser 448e2a5d79 ci: the CachyOS ISO cache gets an entry per workflow run 2026-09-30 08:43:07 +02:00
theupriser 2b72d90d30 ci: cache keys per ISO week instead of per run (no new multi-GB entry on every run) 2026-09-30 08:38:04 +02:00
theupriser af30018bd9 ci: cache pacman packages (build, test, suites), the VMs' packages and the CachyOS ISO 2026-09-30 08:29:41 +02:00
theupriser a74500b692 ci: a new run of the ISO workflow cancels the running one (one concurrency group, not per tag) 2026-09-30 08:28:27 +02:00
theupriser 779ee972cf ci: a suites stage after the boot loader tests (vmtest.sh: cli, menu, hw, installer, toggles on a plain CachyOS VM) 2026-09-30 08:27:34 +02:00
theupriser cfacfb2493 ci: 6 GB to install, 4 GB to test, 2 vCPUs: lean with headroom 2026-09-30 08:25:53 +02:00
theupriser d002c7d332 ci: lean test VMs: 2 vCPUs and 4 GB each, also to install 2026-09-30 08:25:28 +02:00
theupriser 028416b760 ci: 6 GB for the installer VM (VM_INSTALL_MEM) 2026-09-30 08:25:14 +02:00
theupriser 29ec7d2cde ci: boot loader test VMs keep their own RAM defaults (8 GB to install, 4 GB to test) 2026-09-30 08:24:27 +02:00
theupriser 8a98315bd5 ci: boot loader test VMs with 3 vCPUs each (the runner has 8 threads) 2026-09-30 08:24:06 +02:00
theupriser edb58b5ba9 ci: boot loader tests two at a time (8 GB VMs, ~20 GB of RAM) 2026-09-30 08:21:08 +02:00
theupriser e165202075 feat(ci): Gitea flow is build -> test (boot loader test per loader, parallel) -> release; drop upstream build.yml
iso-2-gitea-build.yml now has three jobs. The ISO goes between them as an artifact; the test job runs steamify-cachyos-dev's vmbootloadertest.sh --install for limine, systemd-boot and grub (needs /dev/kvm on the runner, fails at once with a reason without it); the release is only made when every test passed.
2026-09-30 08:20:51 +02:00
6 changed files with 317 additions and 199 deletions

No files matched your search

-141
View File
@@ -1,141 +0,0 @@
name: Desktop ISO
on:
push:
branches:
- master
pull_request:
concurrency:
group: ${{ github.ref }}
cancel-in-progress: true
jobs:
build:
# CachyOS's plain ISO and its quicktest matrix: only in CachyOS's own repo, not in this fork
# (the Steamify ISO is iso-2-gitea-build.yml).
if: github.repository == 'CachyOS/CachyOS-Live-ISO'
runs-on: ubuntu-latest
container:
image: archlinux:base-devel
options: --privileged
name: Build
outputs:
builddate: ${{ steps.date.outputs.builddate }}
steps:
- name: Get build date
id: date
run: |
echo "builddate=$(date +'%y%m%d')" >> $GITHUB_OUTPUT
- name: Clone CachyOS-Live-ISO
id: clone
uses: actions/checkout@v4
with:
fetch-depth: 0
- name: Add CachyOS keyring
id: keyring
run: |
pacman-key --init
pacman-key --recv-keys F3B607488DB35A47 --keyserver keyserver.ubuntu.com
pacman-key --lsign-key F3B607488DB35A47
sed -i '/^\[core\]$/i[cachyos]\nServer = https://mirror.cachyos.org/repo/$arch/$repo\n' /etc/pacman.conf
- name: Install dependencies
id: dependencies
run: |
sudo pacman -Syu --noconfirm archiso cachyos-keyring mkinitcpio-archiso squashfs-tools grub
- name: Create build user
id: user-archiso
run: |
useradd builder -m
echo "builder ALL=(ALL) NOPASSWD: ALL" >> /etc/sudoers
chmod -R a+rw .
- name: Build ISO (${{ steps.date.outputs.builddate }})
id: build
run: |
sudo -H -E -u builder ./buildiso.sh
- name: Upload ISO to artifacts
id: upload
uses: actions/upload-artifact@v4
with:
name: cachyos-desktop-linux-${{ steps.date.outputs.builddate }}
path: out/desktop/*
quicktest:
name: Testing (${{ matrix.bootloader }} / ${{ matrix.filesystem }})
runs-on: ubuntu-latest
needs: build
container:
image: archlinux:base-devel
options: --privileged
strategy:
fail-fast: false
max-parallel: 4
matrix:
bootloader: [grub, systemd-boot, refind, limine]
filesystem: [btrfs, xfs, ext4, f2fs, zfs]
steps:
- name: Clone CachyOS-Live-ISO
id: clone
uses: actions/checkout@v6
- name: Install dependencies
id: dependencies
run: |
pacman -Syu --noconfirm git ffmpeg imagemagick tesseract-data-eng qemu-desktop
- name: Create build user
id: user
run: |
useradd builder -m
echo "builder ALL=(ALL) NOPASSWD: ALL" >> /etc/sudoers
chmod -R a+rw .
- name: Build quickemu
id: quickemu
run: |
sudo -u builder git clone https://aur.archlinux.org/quickemu.git
cd quickemu
sudo -H -E -u builder makepkg --syncdeps --noconfirm
pacman -U --noconfirm quickemu*.pkg.tar.zst
cd ..
- name: Clone quicktest
id: clone-quicktest
uses: actions/checkout@v6
with:
repository: 'quickemu-project/quicktest'
path: 'quicktest'
- name: Download ISO
id: download
uses: actions/download-artifact@v4
with:
path: machines/cachyos-dailylive
merge-multiple: true
- name: Run quicktest
id: quicktest
run: |
./quicktest/quicktest test_install_calamares cachyos dailylive
env:
QT_NOTIFY: "false"
QT_OPEN_RESULTS: "false"
QT_QUICKGET_SKIP: "true"
QT_TESTCASES_DIR: "./testcases"
QUICKEMU_DISPLAY: "none"
QUICKEMU_VM_DIR: "./machines"
TEST_BOOTLOADER: "${{ matrix.bootloader }}"
TEST_FILESYSTEM: "${{ matrix.filesystem }}"
- name: Upload results to artifacts
id: upload-results
if: always()
uses: actions/upload-artifact@v4
with:
name: cachyos-desktop-linux-results-${{needs.build.outputs.builddate}}-${{ matrix.bootloader }}-${{ matrix.filesystem }}
path: results/*
+26
View File
@@ -0,0 +1,26 @@
name: Sync git.upriser.nl mirror
# Trigger the Gitea pull-mirror immediately instead of waiting for its interval,
# so Gitea builds/tests right after any branch or tag lands on GitHub (the mirror has no sync interval of its own).
on:
push:
branches: ['**']
tags: ['*']
workflow_dispatch:
jobs:
sync:
# Gitea also reads .github/workflows on the mirror; only run on GitHub
if: github.server_url == 'https://github.com'
runs-on: ubuntu-latest
steps:
- name: Trigger mirror-sync
env:
GITEA_URL: ${{ secrets.GIT_UPRISER_URL }}
GIT_UPRISER_TOKEN: ${{ secrets.GIT_UPRISER_TOKEN }}
# Gitea "owner/repo"; defaults to the same path as on GitHub
GITEA_REPO: ${{ vars.GITEA_REPO || github.repository }}
run: |
curl --fail-with-body -sS --retry 5 --retry-delay 10 --retry-all-errors -X POST \
-H "Authorization: token ${GIT_UPRISER_TOKEN}" \
"${GITEA_URL%/}/api/v1/repos/${GITEA_REPO}/mirror-sync"
+99 -17
View File
@@ -4,13 +4,26 @@
# GitHub releases take at most 2 GB per file, the ISO is bigger, and a release on the mirror only survives its # 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. # syncs when its tag comes from here.
# Name: the Steamify version the ISO gets (its newest release) plus the time (UTC, GitHub's clock when the release starts): # Name: the Steamify version the ISO gets (its newest release) plus the time (UTC, GitHub's clock when the release starts):
# master releases v<steamify>-<YYYY.MM.DD>-<HHMM>, feat/steamify a pre-release v<steamify>-dev.<...>. # kind release: v<steamify>-<YYMMDD>, a real release; kind dev: a pre-release v<steamify>-dev-<YYMMDD> (like CachyOS: the
# day, no time). One ISO per day and kind: the newest build of a day replaces the earlier one. At most 10 dev and 10 real
# releases are kept (the oldest go, here and, with the mirror's next sync, there).
name: ISO 1/2 · Tag and release (GitHub) name: ISO 1/2 · Tag and release (GitHub)
# Started by a new Steamify release (its bundle.yml, secret ISO_DISPATCH_TOKEN) or by hand (Run workflow, # Always run from master. Started by steamify-cachyos (its bundle.yml, secret ISO_DISPATCH_TOKEN), which says what to
# on master for a release, on feat/steamify for a test build); not by every push. # build: a version published from main -> kind release, a version on a release branch -> kind dev. Or by hand (Run
# workflow); `auto` is a release on master and a dev build on any other branch. Not started by pushes.
on: on:
workflow_dispatch: workflow_dispatch:
inputs:
kind:
description: "release (a real ISO), dev (a pre-release test build) or auto (release on master, dev elsewhere)"
type: choice
options: [auto, release, dev]
default: auto
steamify_ref:
description: "Steamify branch or tag to build the ISO with (empty: the newest published release). A release branch tests its own version."
type: string
default: ""
permissions: permissions:
contents: write contents: write
@@ -25,31 +38,76 @@ jobs:
runs-on: ubuntu-latest runs-on: ubuntu-latest
steps: steps:
- uses: actions/checkout@v4 - uses: actions/checkout@v4
with:
fetch-depth: 0
- name: Tag and release - name: Tag and release
env: env:
GH_TOKEN: ${{ github.token }} GH_TOKEN: ${{ github.token }}
GIT_UPRISER_TOKEN: ${{ secrets.GIT_UPRISER_TOKEN }}
run: | run: |
steamify="$(gh release view -R theupriser/steamify-cachyos --json tagName -q .tagName)" steamify="$(gh release view -R theupriser/steamify-cachyos --json tagName -q .tagName)"
steamify="${steamify#v}" steamify="${steamify#v}"
stamp="$(date -u +%Y.%m.%d-%H%M)" # A branch or tag of Steamify to build with (a release branch before its release), else the newest release.
if [ "${{ github.ref }}" = refs/heads/master ]; then sref="${{ inputs.steamify_ref }}"
tag="v$steamify-$stamp" pre="" name="CachyOS with Steamify Live ISO $steamify ($stamp UTC)" if [ -n "$sref" ]; then
steamify="$(gh api "repos/theupriser/steamify-cachyos/contents/steamify.sh?ref=$sref" -q .content | base64 -d | sed -n 's/^VERSION=//p' | head -n 1)"
[ -n "$steamify" ] || { echo "::error::no VERSION in steamify.sh at $sref"; exit 1; }
fi
stamp="$(date -u +%y%m%d)" day="$(date -u +%Y.%m.%d)"
base="$(head -n 1 CHANGELOG.md | sed 's/^# *//')" # the CachyOS version (first line of the changelog)
kind="${{ inputs.kind }}"
if [ -z "$kind" ] || [ "$kind" = auto ]; then
if [ "${{ github.ref }}" = refs/heads/master ]; then kind=release; else kind=dev; fi
fi
if [ "$kind" = release ]; then
tag="v$steamify-$stamp" pre="" name="CachyOS $base with Steamify $steamify ($day UTC)"
else 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 $base with Steamify $steamify (test build $day UTC)"
fi fi
# The ISO's file on the mirror is named after the tag (iso-2-gitea-build.yml, profiledef.sh), so its # The ISO's file on the mirror is named after the tag (iso-2-gitea-build.yml, profiledef.sh), so its
# download link is known now. # download link is known now.
file="steamify-cachyos-${tag#v}-x86_64.iso" dl="$GITEA_URL/$GITEA_REPO/releases/download/$tag" 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. # The notes are generated, nothing is written by hand:
section="$(awk '/^## CachyOS with Steamify Live ISO/ {found = 1; next} found && /^#/ {exit} found' CHANGELOG.md)" # - the CachyOS base version (first line of CHANGELOG.md, the fork's upstream changelog),
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): # - the Steamify version's own changelog section (steamify-cachyos CHANGELOG.md at the ref or tag it is built from),
# - this repository's commits since the previous release of the same kind.
steamify_notes="$(gh api "repos/theupriser/steamify-cachyos/contents/CHANGELOG.md?ref=${sref:-v$steamify}" -q .content 2> /dev/null | base64 -d 2> /dev/null |
awk -v v="$steamify" 'index($0, "## " v " ") == 1 {f = 1; next} f && /^## / {exit} f')"
[ "$kind" = release ] && want_pre=false || want_pre=true
[ "$kind" = release ] && kind_name="real release" || kind_name="dev build"
prev="$(gh release list -L 50 --json tagName,isPrerelease,createdAt -q "[.[] | select(.isPrerelease == $want_pre and .tagName != \"$tag\")] | sort_by(.createdAt) | reverse | .[0].tagName // empty")"
# Commits that change the ISO itself: not the workflow ones (type or scope ci, e.g. ci: / fix(ci):) and not docs:.
if [ -n "$prev" ] && git rev-parse -q --verify "refs/tags/$prev" > /dev/null; then
range="$prev..HEAD"; limit=40; since="Since \`$prev\`:"
else
range="HEAD"; limit=12; since="The latest commits (there is no earlier $kind_name to compare with):"
fi
changes="$(git log --no-merges --format='%s' "$range" | grep -Ev '^(ci|docs)(\(.*\))?:|^[a-z]+\(ci\):' | sed 's/^/- /' | head -n "$limit" || true)"
[ -n "$changes" ] || changes="- No changes to the ISO itself."
notes="![ISO build](https://img.shields.io/badge/ISO_build-running-yellow)
**CachyOS $base with Steamify $steamify${sref:+ (branch $sref)} built in.** Install CachyOS and turn the PC into a Steam Machine in one go.
The ISO is built from \`$(git rev-parse --short HEAD)\` (${{ github.ref_name }}). It is about 3 GB, more than a GitHub release can hold (2 GB per file), so it is published on the mirror about 20 minutes after this release is created:
**Download: [$file]($dl/$file)** ([SHA-256]($dl/$file.sha256), [release page]($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/). ### Steamify $steamify
${steamify_notes:-There is no changelog section for this version.}
$section" ### Changes in this ISO
$since
$changes
### Sources
[Steamify](https://github.com/theupriser/steamify-cachyos/tree/${sref:-v$steamify}), this repository at this tag, and the packages' sources at [CachyOS](https://github.com/CachyOS) and [Arch Linux](https://archlinux.org/packages/)."
# One ISO per day and kind: the newest build of a day replaces the earlier one (space), here and on the mirror.
if git ls-remote --exit-code --tags origin "refs/tags/$tag" > /dev/null 2>&1 || gh release view "$tag" > /dev/null 2>&1; then
echo "$tag exists: replacing it"
gh release delete "$tag" --cleanup-tag -y 2> /dev/null || true
git push origin ":refs/tags/$tag" 2> /dev/null || true
fi
# An annotated tag: its own date, so the mirror sorts releases on the same commit in order (a # 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). # lightweight tag only has its commit's date).
git config user.name "github-actions[bot]" git config user.name "github-actions[bot]"
@@ -57,13 +115,37 @@ jobs:
git tag -a "$tag" -m "$name" "$GITHUB_SHA" && git push origin "refs/tags/$tag" 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" gh release create "$tag" --verify-tag $pre --title "$name" --notes "$notes"
echo "Released $tag" echo "Released $tag"
echo "ISO_TAG=$tag" >> "$GITHUB_ENV"
echo "STEAMIFY_REF=$sref" >> "$GITHUB_ENV"
# Optional: sync the mirror at once instead of at its interval (a Gitea token with repository write # Retention (space): at most 10 dev and 10 real releases; the oldest go, release and tag. The mirror drops the
# access as the secret GIT_UPRISER_TOKEN). # tag with its release and ISO at its next sync (the step below).
- name: Sync the Gitea mirror keep=10
for pre_flag in true false; do
gh release list -L 200 --json tagName,isPrerelease,createdAt \
-q "[.[] | select(.isPrerelease == $pre_flag)] | sort_by(.createdAt) | reverse | .[$keep:][] | .tagName" |
while read -r old; do echo "Retention: removing $old"; gh release delete "$old" --cleanup-tag -y; done
done
# The mirror takes the tag (sync), then the build on the mirror is started explicitly (its dispatch API): a tag that
# is replaced (same name, a new tag object) starts no run there by itself. Needs a Gitea token with repository write
# access as the secret GIT_UPRISER_TOKEN; without it the mirror picks the tag up later and nothing is built.
- name: Sync the Gitea mirror and start its build
env: env:
GIT_UPRISER_TOKEN: ${{ secrets.GIT_UPRISER_TOKEN }} GIT_UPRISER_TOKEN: ${{ secrets.GIT_UPRISER_TOKEN }}
run: | run: |
if [ -z "$GIT_UPRISER_TOKEN" ]; then echo "No GIT_UPRISER_TOKEN: the mirror picks the tag up at its next sync."; exit 0; fi if [ -z "$GIT_UPRISER_TOKEN" ]; then echo "No GIT_UPRISER_TOKEN: the mirror is not synced and no build is started."; exit 0; fi
curl -fsS --retry 5 --retry-delay 10 --retry-all-errors -X POST -H "Authorization: token $GIT_UPRISER_TOKEN" "$GITEA_URL/api/v1/repos/$GITEA_REPO/mirror-sync" && api="$GITEA_URL/api/v1/repos/$GITEA_REPO"
curl -fsS --retry 5 --retry-delay 10 --retry-all-errors -X POST -H "Authorization: token $GIT_UPRISER_TOKEN" "$api/mirror-sync"
echo "Mirror sync started" echo "Mirror sync started"
want="$(git rev-parse "refs/tags/$ISO_TAG")"
for _ in $(seq 60); do
got="$(curl -s "$api/tags/$ISO_TAG" | python3 -c 'import json,sys; print(json.load(sys.stdin).get("id",""))' 2> /dev/null)"
[ "$got" = "$want" ] && break
sleep 5
done
[ "$got" = "$want" ] || { echo "::error::the mirror does not have $ISO_TAG ($want) after 5 minutes"; exit 1; }
# ref: the full name (refs/tags/...), as in Gitea's API documentation; --fail-with-body shows the server's reason.
curl -sS --fail-with-body --retry 3 -X POST -H "Authorization: token $GIT_UPRISER_TOKEN" -H "Content-Type: application/json" \
-d "{\"ref\":\"refs/tags/$ISO_TAG\",\"inputs\":{\"steamify_ref\":\"$STEAMIFY_REF\"}}" "$api/actions/workflows/iso-2-gitea-build.yml/dispatches"
echo "Started the mirror's build for $ISO_TAG"
+166 -31
View File
@@ -4,21 +4,30 @@
# checksums and package list to the mirror's release for that tag. The tag names the Steamify version and # checksums and package list to the mirror's release for that tag. The tag names the Steamify version and
# the time: v<steamify>-<YYYY.MM.DD>-<HHMM> (master) or v<steamify>-dev.<...> (feat/steamify, a pre-release); # the time: v<steamify>-<YYYY.MM.DD>-<HHMM> (master) or v<steamify>-dev.<...> (feat/steamify, a pre-release);
# the ISO gets exactly that Steamify release, and its label the same moment. GitHub skips it. # the ISO gets exactly that Steamify release, and its label the same moment. GitHub skips it.
# Two jobs: build the ISO -> release it. The VM tests run on GitHub (steamify-cachyos vmtest.yml, the newest ISO release of
# this mirror), where the runners are bigger.
# The runner needs privileged containers (archiso mounts loop devices) and ~20 GB of disk; Gitea's # The runner needs privileged containers (archiso mounts loop devices) and ~20 GB of disk; Gitea's
# [repository.release] FILE_MAX_SIZE must allow the ISO (default 2 GB). # [repository.release] FILE_MAX_SIZE must allow the ISO (default 2 GB).
name: ISO 2/2 · Build and publish (Gitea) name: ISO 2/2 · Build and publish (Gitea)
# Started by iso-1-github-tag.yml through the mirror's dispatch API, with the tag as the ref (a replaced tag starts no
# run by itself, so nothing is triggered by tag pushes).
on: on:
push:
tags: ['v*']
workflow_dispatch: workflow_dispatch:
inputs:
steamify_ref:
description: "Steamify branch or tag to build with (set by iso-1; empty: the release the tag names)"
type: string
default: ""
# One run at a time for the whole workflow (not per tag): a new run stops the running one and takes over.
concurrency: concurrency:
group: steamify-iso-${{ github.ref }} group: steamify-iso
cancel-in-progress: true cancel-in-progress: true
jobs: jobs:
iso: build:
name: Build the ISO
if: github.server_url != 'https://github.com' if: github.server_url != 'https://github.com'
runs-on: ubuntu-latest runs-on: ubuntu-latest
container: container:
@@ -27,12 +36,94 @@ jobs:
defaults: defaults:
run: run:
shell: bash shell: bash
outputs:
steamify: ${{ steps.tag.outputs.steamify }}
steps:
# First only what the cache action needs (node, git), then the caches, then the rest from the restored cache.
- name: Node and git
id: node
run: |
pacman-key --init && pacman-key --populate
pacman -Syu --noconfirm --needed nodejs git
# The caches' keys: one entry per ISO week (an exact hit saves nothing, a new week restores the old one and saves once).
echo "week=$(date -u +%G-%V)" >> "$GITHUB_OUTPUT"
- name: Cache - pacman packages
uses: actions/cache@v4
with:
path: /var/cache/pacman/pkg
key: pacman-build-${{ steps.node.outputs.week }}
restore-keys: pacman-build-
- name: Tools
run: pacman -S --noconfirm --needed archiso mkinitcpio-archiso squashfs-tools grub sudo curl jq
- uses: actions/checkout@v4
with:
fetch-depth: 0
- name: Version and time from the tag
id: tag
run: |
tag="${{ github.ref_name }}"
[[ "$tag" =~ ^v([0-9]+\.[0-9]+\.[0-9]+)-(dev-)?([0-9]{6})$ ]] ||
{ echo "::error::$tag is not a Steamify ISO release tag (v<steamify>-[dev-]<YYMMDD>)"; exit 1; }
m=("${BASH_REMATCH[@]}")
{
echo "STEAMIFY_VERSION=${m[1]}"
# The day (YYMMDD, UTC) for the ISO's label (profiledef.sh) and the release's name: the tag's.
echo "STEAMIFY_BUILD_STAMP=${m[3]}"
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"
echo "steamify=${m[1]}" >> "$GITHUB_OUTPUT"
- name: Steamify on the ISO (the version the tag names)
run: |
ref="${{ inputs.steamify_ref }}"
if [ -n "$ref" ]; then
# A branch (a release branch before its release): its checkout goes on the ISO.
git clone -q --depth 1 --branch "$ref" https://github.com/theupriser/steamify-cachyos.git /tmp/steamify-src
./steamify-prepare.sh /tmp/steamify-src
else
./steamify-prepare.sh
fi
- name: Build
run: |
./build-live-modules.sh
./build-calamares-modules.sh
./buildiso.sh -p desktop -w || ./buildiso.sh -p desktop -c -w
- name: Keep the ISO for the tests and the release
uses: christopherhx/gitea-upload-artifact@v4
with:
name: iso
path: |
out/desktop/*.iso
out/desktop/*.iso.sha256
out/desktop/*.iso.sha1
out/desktop/*.pkgs.txt
retention-days: 3
release:
name: Release
needs: build
runs-on: ubuntu-latest
container:
image: docker.io/cachyos/cachyos:latest
defaults:
run:
shell: bash
steps: steps:
- name: Tools - name: Tools
run: | run: |
pacman-key --init && pacman-key --populate pacman-key --init && pacman-key --populate
# nodejs: the actions below run in this container # nodejs: the actions below run in this container
pacman -Syu --noconfirm --needed archiso mkinitcpio-archiso git squashfs-tools grub sudo nodejs curl jq pacman -Syu --noconfirm --needed git nodejs curl jq
- uses: actions/checkout@v4 - uses: actions/checkout@v4
with: with:
@@ -41,26 +132,23 @@ jobs:
- name: Version and time from the tag - name: Version and time from the tag
run: | run: |
tag="${{ github.ref_name }}" tag="${{ github.ref_name }}"
[[ "$tag" =~ ^v([0-9]+\.[0-9]+\.[0-9]+)-(dev\.)?([0-9]{4})\.([0-9]{2})\.([0-9]{2})-([0-9]{4})$ ]] || [[ "$tag" =~ ^v([0-9]+\.[0-9]+\.[0-9]+)-(dev-)?([0-9]{6})$ ]] ||
{ echo "::error::$tag is not a Steamify ISO release tag (v<steamify>-[dev.]<YYYY.MM.DD>-<HHMM>)"; exit 1; } { echo "::error::$tag is not a Steamify ISO release tag (v<steamify>-[dev-]<YYMMDD>)"; exit 1; }
m=("${BASH_REMATCH[@]}") m=("${BASH_REMATCH[@]}")
{ {
echo "STEAMIFY_VERSION=${m[1]}" echo "STEAMIFY_VERSION=${m[1]}"
# One moment for the ISO's label (profiledef.sh) and the release's name: the tag's (UTC). # The day (YYMMDD, UTC) for the ISO's label (profiledef.sh) and the release's name: the tag's.
echo "STEAMIFY_BUILD_STAMP=${m[3]}${m[4]}${m[5]}_${m[6]}" echo "STEAMIFY_BUILD_STAMP=${m[3]}"
echo "ISO_PRERELEASE=$([ -n "${m[2]}" ] && echo true || echo false)" echo "ISO_PRERELEASE=$([ -n "${m[2]}" ] && echo true || echo false)"
# The ISO's file name: the tag without its v (profiledef.sh). # The ISO's file name: the tag without its v (profiledef.sh).
echo "STEAMIFY_ISO_VERSION=${tag#v}" echo "STEAMIFY_ISO_VERSION=${tag#v}"
} >> "$GITHUB_ENV" } >> "$GITHUB_ENV"
- name: Steamify on the ISO (the version the tag names)
run: ./steamify-prepare.sh
- name: Build - uses: christopherhx/gitea-download-artifact@v4
run: | with:
./build-live-modules.sh name: iso
./build-calamares-modules.sh path: out/desktop
./buildiso.sh -p desktop -w || ./buildiso.sh -p desktop -c -w
- name: Release name and notes - name: Release name and notes
id: rel id: rel
@@ -70,30 +158,34 @@ jobs:
iso="$(ls out/desktop/*.iso | head -n 1)" iso="$(ls out/desktop/*.iso | head -n 1)"
[ -f "$iso" ] || { echo "::error::no ISO in out/desktop"; exit 1; } [ -f "$iso" ] || { echo "::error::no ISO in out/desktop"; exit 1; }
tag="${{ github.ref_name }}" b="$STEAMIFY_BUILD_STAMP" tag="${{ github.ref_name }}" b="$STEAMIFY_BUILD_STAMP"
stamp="${b:0:4}.${b:4:2}.${b:6:2}-${b:9:4}" stamp="20${b:0:2}.${b:2:2}.${b:4:2}"
base="$(head -n 1 CHANGELOG.md | sed 's/^# *//')" # the CachyOS version, as in the GitHub release's title
if [ "$ISO_PRERELEASE" = true ]; then if [ "$ISO_PRERELEASE" = true ]; then
name="CachyOS with Steamify Live ISO $STEAMIFY_VERSION (test build $stamp UTC)" name="CachyOS $base with Steamify $STEAMIFY_VERSION (test build $stamp UTC)"
else else
name="CachyOS with Steamify Live ISO $STEAMIFY_VERSION ($stamp UTC)" name="CachyOS $base with Steamify $STEAMIFY_VERSION ($stamp UTC)"
fi fi
# Never overwritten: a release for this tag that already has the ISO is left alone. # One ISO per day and kind: a release of this tag from an earlier build of the day is replaced.
api="${{ github.server_url }}/api/v1/repos/${{ github.repository }}" api="${{ github.server_url }}/api/v1/repos/${{ github.repository }}"
if curl -fsS -H "Authorization: token $TOKEN" "$api/releases/tags/$tag" -o /tmp/rel.json && if curl -fsS -H "Authorization: token $TOKEN" "$api/releases/tags/$tag" -o /tmp/rel.json; then
[ "$(jq '[.assets[] | select(.name | endswith(".iso"))] | length' /tmp/rel.json)" -gt 0 ]; then echo "Replacing the earlier release of $tag"
echo "::warning::$tag already has its ISO and won't be overwritten." curl -fsS -X DELETE -H "Authorization: token $TOKEN" "$api/releases/$(jq -r .id /tmp/rel.json)" || true
echo "publish=false" >> "$GITHUB_OUTPUT"; exit 0
fi fi
{ echo "publish=true"; echo "name=$name"; } >> "$GITHUB_OUTPUT" { echo "publish=true"; echo "name=$name"; } >> "$GITHUB_OUTPUT"
section="$(awk '/^## CachyOS with Steamify Live ISO/ {found = 1; next} found && /^#/ {exit} found' CHANGELOG.md)" section="$(awk '/^## CachyOS with Steamify Live ISO/ {found = 1; next} found && /^#/ {exit} found' CHANGELOG.md)"
src="${{ inputs.steamify_ref }}"; src="${src:-v$STEAMIFY_VERSION}"
# The same notes as the GitHub release (one source: iso-1 generated them), without its badge line; the
# checksum line is added here. Fallback: a short text.
if curl -fsS "https://api.github.com/repos/theupriser/steamify-cachyos-live-iso/releases/tags/$tag" -o /tmp/ghrel.json; then
jq -r '.body // ""' /tmp/ghrel.json | sed '/ISO build\]/d' > release-notes.md
else
echo "Built from \`$(git rev-parse --short HEAD)\` ($tag) with Steamify $STEAMIFY_VERSION." > release-notes.md # fallback when GitHub cannot be reached
fi
{ {
echo "Built from \`$(git rev-parse --short HEAD)\` ($tag) with Steamify $STEAMIFY_VERSION."
echo echo
echo "SHA-256: \`$(cut -d' ' -f1 "$iso.sha256")\`, label \`STEAMIFY_${STEAMIFY_VERSION//./_}_$b\`" echo "### Checksum"
echo echo "SHA-256 of the ISO: \`$(cut -d' ' -f1 "$iso.sha256")\` (label \`STEAMIFY_${STEAMIFY_VERSION//./_}_$b\`)."
echo "Sources: [Steamify](https://github.com/theupriser/steamify-cachyos/tree/v$STEAMIFY_VERSION), this repository at this tag, and the packages' sources at [CachyOS](https://github.com/CachyOS) and [Arch Linux](https://archlinux.org/packages/)." } >> release-notes.md
echo
echo "$section"
} > release-notes.md
cat release-notes.md cat release-notes.md
- name: Publish ${{ github.ref_name }} - name: Publish ${{ github.ref_name }}
@@ -110,3 +202,46 @@ jobs:
out/desktop/*.iso.sha256 out/desktop/*.iso.sha256
out/desktop/*.iso.sha1 out/desktop/*.iso.sha1
out/desktop/*.pkgs.txt out/desktop/*.pkgs.txt
# The result goes back to GitHub: the badge at the top of the GitHub release (started as "running" by iso-1) becomes
# succeeded / failed / cancelled and links to this run. Needs a GitHub token as the secret GH_RELEASE_TOKEN here on the
# mirror (fine-grained, this repository only, Contents: read and write); without it the badge stays "running".
report:
name: Report the result to GitHub
needs: [build, release]
if: ${{ always() && github.server_url != 'https://github.com' }}
runs-on: ubuntu-latest
container:
image: docker.io/cachyos/cachyos:latest
steps:
- name: Badge in the GitHub release
env:
GH_TOKEN: ${{ secrets.GH_RELEASE_TOKEN }}
BUILD: ${{ needs.build.result }}
RELEASE: ${{ needs.release.result }}
run: |
[ -n "$GH_TOKEN" ] || { echo "No GH_RELEASE_TOKEN: GitHub's release keeps its 'running' badge."; exit 0; }
pacman -Sy --noconfirm --needed curl python > /dev/null
tag="${{ github.ref_name }}"
if [ "$BUILD" = success ] && [ "$RELEASE" = success ]; then st=succeeded col=brightgreen
elif [ "$BUILD" = cancelled ] || [ "$RELEASE" = cancelled ]; then st=cancelled col=lightgrey
else st=failed col=red; fi
run="${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }}"
api="https://api.github.com/repos/theupriser/steamify-cachyos-live-iso/releases"
curl -fsS -H "Authorization: Bearer $GH_TOKEN" "$api/tags/$tag" -o /tmp/rel.json || { echo "::warning::no GitHub release for $tag"; exit 0; }
ST="$st" COL="$col" RUN="$run" RUN_ID="${{ github.run_id }}" python3 - << 'PY'
import json, os, re
d = json.load(open("/tmp/rel.json"))
body = d.get("body") or ""
# This runner reports its internal address (http://server:3000) as the server URL: the public one is in the
# release page link that iso-1 wrote into the notes.
m = re.search(r"\]\((https?://[^)\s]+)/releases/tag/", body)
run = f"{m.group(1)}/actions/runs/{os.environ['RUN_ID']}" if m else os.environ["RUN"]
badge = f"[![ISO build](https://img.shields.io/badge/ISO_build-{os.environ['ST']}-{os.environ['COL']})]({run})"
pat = re.compile(r"\[?!\[ISO build\]\([^)]*\)(\]\([^)]*\))?")
body = pat.sub(lambda m: badge, body, count=1) if pat.search(body) else badge + "\n\n" + body
json.dump({"body": body}, open("/tmp/patch.json", "w"))
open("/tmp/rel.id", "w").write(str(d["id"]))
PY
curl -fsS -X PATCH -H "Authorization: Bearer $GH_TOKEN" -H "Content-Type: application/json" -d @/tmp/patch.json "$api/$(cat /tmp/rel.id)" > /dev/null
echo "GitHub release $tag: ISO build $st"
+23 -7
View File
@@ -115,13 +115,16 @@ failure, and retry the copy (it's idempotent) rather than the whole build.
Full write-up, with every trap: `steamify-iso-release` in steamify-cachyos-dev. What matters here: Full write-up, with every trap: `steamify-iso-release` in steamify-cachyos-dev. What matters here:
- `.github/workflows/iso-1-github-tag.yml` (GitHub, `workflow_dispatch` only: by hand, or started by a new Steamify - `.github/workflows/iso-1-github-tag.yml` (GitHub, `workflow_dispatch` only: by hand, or started by a new Steamify
release, whose `bundle.yml` needs the secret `ISO_DISPATCH_TOKEN`) names the release: the Steamify version plus release, whose `bundle.yml` needs the secret `ISO_DISPATCH_TOKEN`) names the release like CachyOS does, by the day (GitHub's UTC
GitHub's UTC time, `vX.Y.Z-[dev.]YYYY.MM.DD-HHMM`, an **annotated** tag and a release with notes and the direct date, no time): `vX.Y.Z-YYMMDD` (real) or `vX.Y.Z-dev-YYMMDD` (dev), file `steamify-cachyos-X.Y.Z-[dev-]YYMMDD-x86_64.iso`, an **annotated** tag and a
download link. `feat/steamify` makes a `dev.` pre-release, `master` a real one. release with notes and the direct download link. One ISO per day and kind: a second build the same day deletes
- `.github/workflows/iso-2-gitea-build.yml` (Gitea, `on: push: tags: v*`, skipped on GitHub) builds the ISO for that the earlier release and tag (GitHub) and tags again; the mirror takes the new tag object, iso-2 replaces the old mirror release. Retention: at most 10 dev and 10 real
tag and attaches it to the mirror's release. The tag decides everything: Steamify version (`steamify-prepare.sh` releases are kept (space); the oldest are deleted with `gh release delete --cleanup-tag`, and the mirror drops their tags, releases and ISOs at its next sync. The workflow always runs from `master`; its input `steamify_ref` (a Steamify branch or tag, empty = the newest published release) builds the ISO with that checkout and names it after that branch's `VERSION` (a release branch tests its own version before it is released); its input `kind` (`release`, `dev`, or `auto`: release on master, dev on other branches) decides: `release` is a real release, `dev` a `dev-` pre-release. steamify-cachyos' bundle.yml passes it: a version published from main -> `release`, a version on a release branch -> `dev`.
- `.github/workflows/iso-2-gitea-build.yml` (Gitea, `workflow_dispatch` with the tag as the ref, started by iso-1's last step through the mirror's dispatch API after the mirror has the new tag object; a tag push starts nothing, because a replaced tag of the same name starts no run; skipped on GitHub) runs two jobs for that
tag: build the ISO, then attach it to the mirror's release. It is not tested there (the runner is small): the VM tests
run on GitHub, in steamify-cachyos `vmtest.yml`, on the newest ISO release of the mirror. The tag decides everything: Steamify version (`steamify-prepare.sh`
takes `STEAMIFY_VERSION`), file name (`STEAMIFY_ISO_VERSION` -> `iso_version` in `profiledef.sh`), label takes `STEAMIFY_VERSION`), file name (`STEAMIFY_ISO_VERSION` -> `iso_version` in `profiledef.sh`), label
(`STEAMIFY_BUILD_STAMP`), boot menu and `/etc/steammachine-iso-build`. The build reads no clock; without a (`STEAMIFY_BUILD_STAMP`, YYMMDD), boot menu and `/etc/steammachine-iso-build`. The build reads no clock; without a
tag everything says `local`. tag everything says `local`.
- `util-iso.sh` runs `sudo mkarchiso`: sudo drops the environment, so `--preserve-env=STEAMIFY_ISO_VERSION, - `util-iso.sh` runs `sudo mkarchiso`: sudo drops the environment, so `--preserve-env=STEAMIFY_ISO_VERSION,
STEAMIFY_BUILD_STAMP` is required (without it the ISO comes out `-local-`). STEAMIFY_BUILD_STAMP` is required (without it the ISO comes out `-local-`).
@@ -129,4 +132,17 @@ Full write-up, with every trap: `steamify-iso-release` in steamify-cachyos-dev.
GitHub doesn't have, and the release with them. GitHub releases can't hold the ISO (2 GB per file). GitHub doesn't have, and the release with them. GitHub releases can't hold the ISO (2 GB per file).
- Gitea needs `[repository.release] FILE_MAX_SIZE` above the ISO (413 otherwise) and the runner - Gitea needs `[repository.release] FILE_MAX_SIZE` above the ISO (413 otherwise) and the runner
`container: privileged: true` (archiso mounts `/proc`); the workflow's `--privileged` option is ignored. `container: privileged: true` (archiso mounts `/proc`); the workflow's `--privileged` option is ignored.
- CachyOS's own `Desktop ISO` workflow (`build.yml`) only runs in `CachyOS/CachyOS-Live-ISO`. - Caches (`actions/cache`, the runner's cache server): pacman's package cache per job kind (build, test) and the VMs' packages (`VM_CACHE`, `~/vms/pkg-cache`), keys per ISO week. Each job first installs only node and git, restores the caches, then installs the rest.
- CachyOS's own `Desktop ISO` workflow (`build.yml`) is removed here; the VM tests live in steamify-cachyos (GitHub).
- **Build badge in the GitHub release:** iso-1 puts `![ISO build](...running-yellow)` at the top of the release notes;
iso-2's last job `report` (`if: always()`) replaces it with succeeded / failed / cancelled, linked to the Gitea run,
through the GitHub API with the Gitea secret `GH_RELEASE_TOKEN` (fine-grained, this repo, Contents read and write).
Without the secret the badge stays "running". Gitea's own badge can't show these runs (they run on a tag ref).
- **Release notes are generated, not written by hand** (iso-1): the CachyOS base version (first line of CHANGELOG.md), the
Steamify version's own changelog section (steamify-cachyos CHANGELOG.md at the ref or tag it is built from) and this
repository's commits since the previous release of the same kind (newest 40). iso-2 takes the same text from the GitHub
release for the mirror's release (one source), without the badge line, and adds the checksum line. The old hand-written
"## CachyOS with Steamify Live ISO" section in CHANGELOG.md is no longer used.
- **Release title:** `CachyOS <base> with Steamify <version> (<YYYY.MM.DD> UTC)` (dev: `(test build <date> UTC)`), the same on GitHub
and on the mirror; `<base>` is the first line of CHANGELOG.md (e.g. 26.08).
+3 -3
View File
@@ -3,8 +3,8 @@
iso_name="steamify-cachyos" iso_name="steamify-cachyos"
# The label follows the release tag, which GitHub names (iso-1-github-tag.yml): the Steamify version on the ISO # The label follows the release tag, which GitHub names (iso-1-github-tag.yml): the Steamify version on the ISO
# (steamify-prepare.sh put it there) plus the tag's date and time, e.g. STEAMIFY_2_9_3_20260929_2030 (ISO 9660: # (steamify-prepare.sh put it there) plus the tag's day, e.g. STEAMIFY_2_9_3_260929 (ISO 9660:
# at most 32 characters, A-Z 0-9 _). STEAMIFY_BUILD_STAMP (YYYYMMDD_HHMM, UTC) comes from the tag; the build # at most 32 characters, A-Z 0-9 _). STEAMIFY_BUILD_STAMP (YYMMDD, UTC) comes from the tag; the build
# reads no clock of its own. Built by hand, without a tag: LOCAL. # reads no clock of its own. Built by hand, without a tag: LOCAL.
_steamify="$(sed -n 's/^VERSION=//p' "${BASH_SOURCE[0]%/*}/airootfs/usr/local/share/steamify/steamify.sh" 2>/dev/null | head -n 1)" _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:-LOCAL}" _stamp="${STEAMIFY_BUILD_STAMP:-LOCAL}"
@@ -13,7 +13,7 @@ iso_label="${iso_label:0:32}"
iso_publisher="CachyOS <https://cachyos.org>" iso_publisher="CachyOS <https://cachyos.org>"
iso_application="Steamify CachyOS Live (based on CachyOS)" iso_application="Steamify CachyOS Live (based on CachyOS)"
# The file name (<iso_name>-<iso_version>-x86_64.iso) is the release tag without its v (STEAMIFY_ISO_VERSION # The file name (<iso_name>-<iso_version>-x86_64.iso) is the release tag without its v (STEAMIFY_ISO_VERSION
# from the tag: steamify-cachyos-2.9.3-dev.2026.09.29-2030-x86_64.iso). Built by hand, without a tag: local. # from the tag: steamify-cachyos-2.9.6-dev-260930-x86_64.iso). Built by hand, without a tag: local.
iso_version="${STEAMIFY_ISO_VERSION:-local}" iso_version="${STEAMIFY_ISO_VERSION:-local}"
install_dir="arch" install_dir="arch"
buildmodes=('iso') buildmodes=('iso')