feat(workflows): add runner input, timeouts and release concurrency

The release, release-cgo and autoupdate workflows must run on a runner
the caller chooses. Each workflow now takes a runner input. It accepts
a label or a JSON object that selects a runner group.

The workflow uses inputs.runner first. It then uses the
SHARED_ACTIONS_RUNNER variable and falls back to ubuntu-latest. Callers
that set nothing keep the old behaviour.

Every job now has a timeout. Release and autoupdate runs use a
concurrency group that never cancels a running job.
This commit is contained in:
2026-10-02 01:20:24 +01:00
parent 5cf1402555
commit cce6b9d88c
3 changed files with 42 additions and 10 deletions
+12 -5
View File
@@ -34,10 +34,10 @@ on:
type: boolean
default: false
runner:
description: "Runner label(s) for the release jobs. Defaults to ubuntu-latest; set to a self-hosted label (e.g. self-hosted) to run on your own runner."
description: "Runner label, or JSON object such as {\"group\":\"ci\",\"labels\":[\"linux\"]} to select a runner group. Falls back to vars.SHARED_ACTIONS_RUNNER, then ubuntu-latest."
required: false
type: string
default: "ubuntu-latest"
default: ""
outputs:
version:
description: "The calculated version (without v prefix)"
@@ -46,10 +46,15 @@ on:
description: "The version tag (with v prefix)"
value: ${{ jobs.version.outputs.version_tag }}
concurrency:
group: release-${{ github.repository }}-${{ github.ref }}
cancel-in-progress: false
jobs:
test:
name: Test
runs-on: ${{ inputs.runner }}
runs-on: ${{ fromJSON(startsWith(inputs.runner || vars.SHARED_ACTIONS_RUNNER || 'ubuntu-latest', '{') && inputs.runner || vars.SHARED_ACTIONS_RUNNER || 'ubuntu-latest' || toJSON(inputs.runner || vars.SHARED_ACTIONS_RUNNER || 'ubuntu-latest')) }}
timeout-minutes: 30
steps:
- name: Checkout
uses: actions/checkout@v6
@@ -72,10 +77,11 @@ jobs:
version:
name: Calculate Version
needs: test
runs-on: ${{ inputs.runner }}
runs-on: ${{ fromJSON(startsWith(inputs.runner || vars.SHARED_ACTIONS_RUNNER || 'ubuntu-latest', '{') && inputs.runner || vars.SHARED_ACTIONS_RUNNER || 'ubuntu-latest' || toJSON(inputs.runner || vars.SHARED_ACTIONS_RUNNER || 'ubuntu-latest')) }}
outputs:
version: ${{ steps.semver.outputs.version }}
version_tag: ${{ steps.semver.outputs.version_tag }}
timeout-minutes: 10
steps:
- name: Checkout
uses: actions/checkout@v6
@@ -101,11 +107,12 @@ jobs:
name: Release
needs: version
if: needs.version.outputs.version_tag != ''
runs-on: ${{ inputs.runner }}
runs-on: ${{ fromJSON(startsWith(inputs.runner || vars.SHARED_ACTIONS_RUNNER || 'ubuntu-latest', '{') && inputs.runner || vars.SHARED_ACTIONS_RUNNER || 'ubuntu-latest' || toJSON(inputs.runner || vars.SHARED_ACTIONS_RUNNER || 'ubuntu-latest')) }}
permissions:
contents: write
packages: write
id-token: write
timeout-minutes: 60
steps:
- name: Checkout
uses: actions/checkout@v6