1
0
Fork 0
mirror of https://forgejo.ellis.link/continuwuation/continuwuity.git synced 2025-09-30 18:42:05 +00:00

ci: Migrate to detect-versions with namespaced cache keys

Replace local detect-runner-os action with external detect-versions@v1 to
reduce custom action maintenance. Add architecture detection for future
cross-platform support and namespace all cache keys with "continuwuity-"
prefix to prevent collisions with other projects on shared runners.

Updates cache mount IDs in Dockerfiles to match the new namespacing
convention, ensuring consistent cache isolation across CI and Docker builds.
This commit is contained in:
Tom Foster 2025-09-22 16:04:59 +01:00
parent e5e2db37d9
commit 7d91f218b1
10 changed files with 30 additions and 88 deletions

View file

@ -1,58 +0,0 @@
name: detect-runner-os
description: |
Detect the actual OS name and version of the runner.
Provides separate outputs for name, version, and a combined slug.
outputs:
name:
description: 'OS name (e.g. Ubuntu, Debian)'
value: ${{ steps.detect.outputs.name }}
version:
description: 'OS version (e.g. 22.04, 11)'
value: ${{ steps.detect.outputs.version }}
slug:
description: 'Combined OS slug (e.g. Ubuntu-22.04)'
value: ${{ steps.detect.outputs.slug }}
node_major:
description: 'Major version of Node.js if available (e.g. 22)'
value: ${{ steps.detect.outputs.node_major }}
node_version:
description: 'Full Node.js version if available (e.g. 22.19.0)'
value: ${{ steps.detect.outputs.node_version }}
runs:
using: composite
steps:
- name: Detect runner OS
id: detect
shell: bash
run: |
# Detect OS version (try lsb_release first, fall back to /etc/os-release)
OS_VERSION=$(lsb_release -rs 2>/dev/null || grep VERSION_ID /etc/os-release | cut -d'"' -f2)
# Detect OS name and capitalise (try lsb_release first, fall back to /etc/os-release)
OS_NAME=$(lsb_release -is 2>/dev/null || grep "^ID=" /etc/os-release | cut -d'=' -f2 | tr -d '"' | sed 's/\b\(.\)/\u\1/g')
# Create combined slug
OS_SLUG="${OS_NAME}-${OS_VERSION}"
# Detect Node.js version if available
if command -v node >/dev/null 2>&1; then
NODE_VERSION=$(node --version | sed 's/v//')
NODE_MAJOR=$(echo $NODE_VERSION | cut -d. -f1)
echo "node_version=${NODE_VERSION}" >> $GITHUB_OUTPUT
echo "node_major=${NODE_MAJOR}" >> $GITHUB_OUTPUT
echo "🔍 Detected Node.js: v${NODE_VERSION}"
else
echo "node_version=" >> $GITHUB_OUTPUT
echo "node_major=" >> $GITHUB_OUTPUT
echo "🔍 Node.js not found"
fi
# Set OS outputs
echo "name=${OS_NAME}" >> $GITHUB_OUTPUT
echo "version=${OS_VERSION}" >> $GITHUB_OUTPUT
echo "slug=${OS_SLUG}" >> $GITHUB_OUTPUT
# Log detection results
echo "🔍 Detected Runner OS: ${OS_NAME} ${OS_VERSION}"

View file

@ -121,7 +121,7 @@ runs:
.cargo/git/checkouts .cargo/git/checkouts
.cargo/registry .cargo/registry
.cargo/registry/src .cargo/registry/src
key: rust-registry-image-${{hashFiles('**/Cargo.lock') }} key: continuwuity-rust-registry-image-${{hashFiles('**/Cargo.lock') }}
- name: Cache cargo target - name: Cache cargo target
if: ${{ env.BUILDKIT_ENDPOINT == '' }} if: ${{ env.BUILDKIT_ENDPOINT == '' }}
@ -130,7 +130,7 @@ runs:
with: with:
path: | path: |
cargo-target${{ env.CPU_SUFFIX }}-${{ inputs.slug }}-${{ inputs.profile }} cargo-target${{ env.CPU_SUFFIX }}-${{ inputs.slug }}-${{ inputs.profile }}
key: cargo-target${{ env.CPU_SUFFIX }}-${{ inputs.slug }}-${{ inputs.profile }}-${{hashFiles('**/Cargo.lock') }}-${{steps.rust-toolchain.outputs.rustc_version}} key: continuwuity-cargo-target${{ env.CPU_SUFFIX }}-${{ inputs.slug }}-${{ inputs.profile }}-${{hashFiles('**/Cargo.lock') }}-${{steps.rust-toolchain.outputs.rustc_version}}
- name: Cache apt cache - name: Cache apt cache
if: ${{ env.BUILDKIT_ENDPOINT == '' }} if: ${{ env.BUILDKIT_ENDPOINT == '' }}
@ -139,7 +139,7 @@ runs:
with: with:
path: | path: |
var-cache-apt-${{ inputs.slug }} var-cache-apt-${{ inputs.slug }}
key: var-cache-apt-${{ inputs.slug }} key: continuwuity-var-cache-apt-${{ inputs.slug }}
- name: Cache apt lib - name: Cache apt lib
if: ${{ env.BUILDKIT_ENDPOINT == '' }} if: ${{ env.BUILDKIT_ENDPOINT == '' }}
@ -148,7 +148,7 @@ runs:
with: with:
path: | path: |
var-lib-apt-${{ inputs.slug }} var-lib-apt-${{ inputs.slug }}
key: var-lib-apt-${{ inputs.slug }} key: continuwuity-var-lib-apt-${{ inputs.slug }}
- name: inject cache into docker - name: inject cache into docker
if: ${{ env.BUILDKIT_ENDPOINT == '' }} if: ${{ env.BUILDKIT_ENDPOINT == '' }}

View file

@ -40,7 +40,7 @@ runs:
!~/.rustup/tmp !~/.rustup/tmp
!~/.rustup/downloads !~/.rustup/downloads
# Requires repo to be cloned if toolchain is not specified # Requires repo to be cloned if toolchain is not specified
key: ${{ runner.os }}-rustup-${{ inputs.toolchain || hashFiles('**/rust-toolchain.toml') }} key: continuwuity-${{ runner.os }}-rustup-${{ inputs.toolchain || hashFiles('**/rust-toolchain.toml') }}
- name: Install Rust toolchain - name: Install Rust toolchain
if: steps.rustup-version.outputs.version == '' if: steps.rustup-version.outputs.version == ''
shell: bash shell: bash

View file

@ -29,7 +29,7 @@ runs:
steps: steps:
- name: Detect runner OS - name: Detect runner OS
id: runner-os id: runner-os
uses: ./.forgejo/actions/detect-runner-os uses: https://git.tomfos.tr/actions/detect-versions@v1
- name: Configure cross-compilation architecture - name: Configure cross-compilation architecture
if: inputs.dpkg-arch != '' if: inputs.dpkg-arch != ''
@ -69,7 +69,7 @@ runs:
/usr/lib/x86_64-linux-gnu/libclang*.so* /usr/lib/x86_64-linux-gnu/libclang*.so*
/etc/apt/sources.list.d/archive_uri-* /etc/apt/sources.list.d/archive_uri-*
/etc/apt/trusted.gpg.d/apt.llvm.org.asc /etc/apt/trusted.gpg.d/apt.llvm.org.asc
key: llvm-${{ steps.runner-os.outputs.slug }}-v${{ inputs.llvm-version }}-v3-${{ hashFiles('**/Cargo.lock', 'rust-toolchain.toml') }} key: continuwuity-llvm-${{ steps.runner-os.outputs.slug }}-${{ steps.runner-os.outputs.arch }}-v${{ inputs.llvm-version }}-${{ hashFiles('**/Cargo.lock', 'rust-toolchain.toml') }}
- name: End LLVM cache group - name: End LLVM cache group
shell: bash shell: bash

View file

@ -39,7 +39,7 @@ runs:
steps: steps:
- name: Detect runner OS - name: Detect runner OS
id: runner-os id: runner-os
uses: ./.forgejo/actions/detect-runner-os uses: https://git.tomfos.tr/actions/detect-versions@v1
- name: Configure Cargo environment - name: Configure Cargo environment
shell: bash shell: bash
@ -73,9 +73,9 @@ runs:
.cargo/git/db .cargo/git/db
# Registry cache saved per workflow, restored from any workflow's cache # Registry cache saved per workflow, restored from any workflow's cache
# Each workflow maintains its own registry that accumulates its needed crates # Each workflow maintains its own registry that accumulates its needed crates
key: cargo-registry-${{ steps.runner-os.outputs.slug }}-${{ github.workflow }} key: continuwuity-cargo-registry-${{ steps.runner-os.outputs.slug }}-${{ steps.runner-os.outputs.arch }}-${{ github.workflow }}
restore-keys: | restore-keys: |
cargo-registry-${{ steps.runner-os.outputs.slug }}- continuwuity-cargo-registry-${{ steps.runner-os.outputs.slug }}-${{ steps.runner-os.outputs.arch }}-
- name: Cache toolchain binaries - name: Cache toolchain binaries
id: toolchain-cache id: toolchain-cache
@ -86,7 +86,7 @@ runs:
.rustup/toolchains .rustup/toolchains
.rustup/update-hashes .rustup/update-hashes
# Shared toolchain cache across all Rust versions # Shared toolchain cache across all Rust versions
key: toolchain-${{ steps.runner-os.outputs.slug }} key: continuwuity-toolchain-${{ steps.runner-os.outputs.slug }}-${{ steps.runner-os.outputs.arch }}
- name: Setup sccache - name: Setup sccache
@ -106,9 +106,9 @@ runs:
/timelord/ /timelord/
# Build artifacts - cache per code change, restore from deps when code changes # Build artifacts - cache per code change, restore from deps when code changes
key: >- key: >-
build-${{ steps.runner-os.outputs.slug }}-${{ inputs.rust-version }}${{ inputs.cache-key-suffix && format('-{0}', inputs.cache-key-suffix) || '' }}-${{ hashFiles('rust-toolchain.toml', '**/Cargo.lock') }}-${{ hashFiles('**/*.rs', '**/Cargo.toml') }} continuwuity-build-${{ steps.runner-os.outputs.slug }}-${{ steps.runner-os.outputs.arch }}-${{ inputs.rust-version }}${{ inputs.cache-key-suffix && format('-{0}', inputs.cache-key-suffix) || '' }}-${{ hashFiles('rust-toolchain.toml', '**/Cargo.lock') }}-${{ hashFiles('**/*.rs', '**/Cargo.toml') }}
restore-keys: | restore-keys: |
build-${{ steps.runner-os.outputs.slug }}-${{ inputs.rust-version }}${{ inputs.cache-key-suffix && format('-{0}', inputs.cache-key-suffix) || '' }}-${{ hashFiles('rust-toolchain.toml', '**/Cargo.lock') }}- continuwuity-build-${{ steps.runner-os.outputs.slug }}-${{ steps.runner-os.outputs.arch }}-${{ inputs.rust-version }}${{ inputs.cache-key-suffix && format('-{0}', inputs.cache-key-suffix) || '' }}-${{ hashFiles('rust-toolchain.toml', '**/Cargo.lock') }}-
- name: End cache restore group - name: End cache restore group
shell: bash shell: bash

View file

@ -36,7 +36,7 @@ runs:
path: | path: |
/usr/share/rust/.cargo/bin /usr/share/rust/.cargo/bin
~/.cargo/bin ~/.cargo/bin
key: timelord-binaries-v3 key: continuwuity-timelord-binaries
- name: Check if binaries need installation - name: Check if binaries need installation
shell: bash shell: bash
@ -82,7 +82,7 @@ runs:
path: | path: |
/usr/share/rust/.cargo/bin /usr/share/rust/.cargo/bin
~/.cargo/bin ~/.cargo/bin
key: timelord-binaries-v3 key: continuwuity-timelord-binaries
- name: Restore timelord cache with fallbacks - name: Restore timelord cache with fallbacks
@ -92,7 +92,7 @@ runs:
path: ${{ env.TIMELORD_CACHE_PATH }} path: ${{ env.TIMELORD_CACHE_PATH }}
key: ${{ env.TIMELORD_KEY }} key: ${{ env.TIMELORD_KEY }}
restore-keys: | restore-keys: |
timelord-v1-${{ github.repository }}- continuwuity-timelord-${{ github.repository }}-
- name: Initialize timestamps on complete cache miss - name: Initialize timestamps on complete cache miss
if: steps.timelord-restore.outputs.cache-hit != 'true' if: steps.timelord-restore.outputs.cache-hit != 'true'

View file

@ -51,7 +51,7 @@ jobs:
- name: Detect runner environment - name: Detect runner environment
id: runner-env id: runner-env
uses: ./.forgejo/actions/detect-runner-os uses: https://git.tomfos.tr/actions/detect-versions@v1
- name: Setup Node.js - name: Setup Node.js
if: steps.runner-env.outputs.node_major == '' || steps.runner-env.outputs.node_major < '20' if: steps.runner-env.outputs.node_major == '' || steps.runner-env.outputs.node_major < '20'
@ -63,9 +63,9 @@ jobs:
uses: actions/cache@v3 uses: actions/cache@v3
with: with:
path: ~/.npm path: ~/.npm
key: ${{ steps.runner-env.outputs.slug }}-node-${{ hashFiles('**/package-lock.json') }} key: continuwuity-${{ steps.runner-env.outputs.slug }}-${{ steps.runner-env.outputs.arch }}-node-${{ hashFiles('**/package-lock.json') }}
restore-keys: | restore-keys: |
${{ steps.runner-env.outputs.slug }}-node- continuwuity-${{ steps.runner-env.outputs.slug }}-${{ steps.runner-env.outputs.arch }}-node-
- name: Install dependencies - name: Install dependencies
run: npm install --save-dev wrangler@latest run: npm install --save-dev wrangler@latest

View file

@ -59,27 +59,27 @@ jobs:
with: with:
path: | path: |
/tmp/renovate/cache/renovate/repository /tmp/renovate/cache/renovate/repository
key: repo-cache-${{ github.run_id }} key: renovate-repo-cache-${{ github.run_id }}
restore-keys: | restore-keys: |
repo-cache- renovate-repo-cache-
- name: Restore renovate package cache - name: Restore renovate package cache
uses: actions/cache/restore@v4 uses: actions/cache/restore@v4
with: with:
path: | path: |
/tmp/renovate/cache/renovate/renovate-cache-sqlite /tmp/renovate/cache/renovate/renovate-cache-sqlite
key: package-cache-${{ github.run_id }} key: renovate-package-cache-${{ github.run_id }}
restore-keys: | restore-keys: |
package-cache- renovate-package-cache-
- name: Restore renovate OSV cache - name: Restore renovate OSV cache
uses: actions/cache/restore@v4 uses: actions/cache/restore@v4
with: with:
path: | path: |
/tmp/osv /tmp/osv
key: osv-cache-${{ github.run_id }} key: renovate-osv-cache-${{ github.run_id }}
restore-keys: | restore-keys: |
osv-cache- renovate-osv-cache-
- name: Self-hosted Renovate - name: Self-hosted Renovate
run: renovate run: renovate
@ -113,7 +113,7 @@ jobs:
with: with:
path: | path: |
/tmp/renovate/cache/renovate/repository /tmp/renovate/cache/renovate/repository
key: repo-cache-${{ github.run_id }} key: renovate-repo-cache-${{ github.run_id }}
- name: Save renovate package cache - name: Save renovate package cache
if: always() if: always()
@ -121,7 +121,7 @@ jobs:
with: with:
path: | path: |
/tmp/renovate/cache/renovate/renovate-cache-sqlite /tmp/renovate/cache/renovate/renovate-cache-sqlite
key: package-cache-${{ github.run_id }} key: renovate-package-cache-${{ github.run_id }}
- name: Save renovate OSV cache - name: Save renovate OSV cache
if: always() if: always()
@ -129,4 +129,4 @@ jobs:
with: with:
path: | path: |
/tmp/osv /tmp/osv
key: osv-cache-${{ github.run_id }} key: renovate-osv-cache-${{ github.run_id }}

View file

@ -166,7 +166,7 @@ ARG RUST_PROFILE=release
# Build the binary # Build the binary
RUN --mount=type=cache,target=/usr/local/cargo/registry \ RUN --mount=type=cache,target=/usr/local/cargo/registry \
--mount=type=cache,target=/usr/local/cargo/git/db \ --mount=type=cache,target=/usr/local/cargo/git/db \
--mount=type=cache,target=/app/target,id=cargo-target-${TARGET_CPU}-${TARGETPLATFORM}-${RUST_PROFILE} \ --mount=type=cache,target=/app/target,id=continuwuity-cargo-target-${TARGET_CPU}-${TARGETPLATFORM}-${RUST_PROFILE} \
bash <<'EOF' bash <<'EOF'
set -o allexport set -o allexport
set -o xtrace set -o xtrace

View file

@ -122,7 +122,7 @@ ARG RUST_PROFILE=release
# Build the binary # Build the binary
RUN --mount=type=cache,target=/usr/local/cargo/registry \ RUN --mount=type=cache,target=/usr/local/cargo/registry \
--mount=type=cache,target=/usr/local/cargo/git/db \ --mount=type=cache,target=/usr/local/cargo/git/db \
--mount=type=cache,target=/app/target,id=cargo-target-${TARGET_CPU}-${TARGETPLATFORM}-musl-${RUST_PROFILE} \ --mount=type=cache,target=/app/target,id=continuwuity-cargo-target-${TARGET_CPU}-${TARGETPLATFORM}-musl-${RUST_PROFILE} \
bash <<'EOF' bash <<'EOF'
set -o allexport set -o allexport
set -o xtrace set -o xtrace