Reticulum-Go/.github/workflows/preview-release.yml

75 lines
2.5 KiB
YAML

# Pinned first-party actions (bump tag and SHA together when upgrading):
# actions/checkout@v7.0.0 9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0
#
name: Preview Release
on:
schedule:
- cron: "0 6 * * 0"
workflow_dispatch:
concurrency:
group: preview-release
cancel-in-progress: false
permissions:
contents: read
jobs:
metadata:
name: Prepare preview tag
runs-on: ubuntu-latest
outputs:
tag_name: ${{ steps.meta.outputs.tag_name }}
commit_sha: ${{ steps.meta.outputs.commit_sha }}
skip_release: ${{ steps.meta.outputs.skip_release }}
steps:
- name: Checkout
uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
with:
ref: master
fetch-depth: 0
- name: Compute preview tag
id: meta
env:
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
EVENT_NAME: ${{ github.event_name }}
run: |
set -euo pipefail
short_sha="$(git rev-parse --short=7 HEAD)"
full_sha="$(git rev-parse HEAD)"
tag="preview-$(date -u +%Y.%m.%d)-${short_sha}"
skip_release=false
if [ "${EVENT_NAME}" = "schedule" ]; then
last_preview_tag="$(gh release list --limit 50 --json tagName,isPrerelease \
--jq '[.[] | select(.isPrerelease) | select(.tagName | startswith("preview-"))][0].tagName // empty')"
last_preview_sha=""
if [ -n "${last_preview_tag}" ]; then
git fetch --tags --force origin
last_preview_sha="$(git rev-parse "refs/tags/${last_preview_tag}^{commit}" 2>/dev/null || true)"
fi
if [ -n "${last_preview_sha}" ] && [ "${last_preview_sha}" = "${full_sha}" ]; then
echo "No new commits on master since last preview (${last_preview_tag} @ ${last_preview_sha}); skipping scheduled release."
skip_release=true
fi
fi
echo "tag_name=${tag}" >> "$GITHUB_OUTPUT"
echo "commit_sha=${full_sha}" >> "$GITHUB_OUTPUT"
echo "skip_release=${skip_release}" >> "$GITHUB_OUTPUT"
echo "Preview tag: ${tag} @ ${full_sha} (skip_release=${skip_release})"
release:
name: Build and publish preview
needs: metadata
if: needs.metadata.outputs.skip_release != 'true'
permissions:
contents: write
uses: ./.github/workflows/release-assets.yml
with:
tag_name: ${{ needs.metadata.outputs.tag_name }}
prerelease: true
target_commitish: ${{ needs.metadata.outputs.commit_sha }}
secrets: inherit