136 lines
4.3 KiB
YAML
136 lines
4.3 KiB
YAML
name: Packages
|
|
|
|
on:
|
|
workflow_call:
|
|
inputs:
|
|
tag:
|
|
type: string
|
|
required: true
|
|
secrets:
|
|
TAP_GITHUB_TOKEN:
|
|
required: true
|
|
AUR_KEY:
|
|
required: true
|
|
PACKAGES_GPG_KEY:
|
|
required: true
|
|
PACKAGES_RSA_KEY:
|
|
required: true
|
|
workflow_dispatch:
|
|
inputs:
|
|
tag:
|
|
description: The released tag to package, such as v0.1.0
|
|
type: string
|
|
required: true
|
|
|
|
permissions:
|
|
contents: read
|
|
|
|
concurrency:
|
|
group: packages
|
|
cancel-in-progress: false
|
|
|
|
jobs:
|
|
packages:
|
|
name: Binaries, packages and image for ${{ inputs.tag }}
|
|
runs-on: ubuntu-26.04
|
|
permissions:
|
|
contents: write
|
|
packages: write
|
|
outputs:
|
|
latest: ${{ steps.latest.outputs.latest }}
|
|
steps:
|
|
- uses: actions/checkout@v7
|
|
with:
|
|
ref: ${{ inputs.tag }}
|
|
path: src
|
|
fetch-depth: 0
|
|
persist-credentials: false
|
|
# Check out the packaging config at the workflow's commit, so a tag cut before the
|
|
# config existed can still be packaged.
|
|
- uses: actions/checkout@v7
|
|
with:
|
|
path: tooling
|
|
persist-credentials: false
|
|
- name: The Go version the gate tests
|
|
id: go
|
|
run: sed -n 's/^ARG GO_VERSION=/version=/p' tooling/Dockerfile >> "$GITHUB_OUTPUT"
|
|
- uses: actions/setup-go@v7
|
|
with:
|
|
go-version: ${{ steps.go.outputs.version }}
|
|
cache: false
|
|
- name: Channels holding one version
|
|
id: latest
|
|
env:
|
|
GH_TOKEN: ${{ github.token }}
|
|
TAG: ${{ inputs.tag }}
|
|
run: |
|
|
latest="$(gh release view --repo "$GITHUB_REPOSITORY" --json tagName --jq .tagName)"
|
|
if [ "$latest" = "$TAG" ]; then
|
|
echo "latest=true" >> "$GITHUB_OUTPUT"
|
|
else
|
|
echo "skip=--skip=homebrew,scoop,aur" >> "$GITHUB_OUTPUT"
|
|
echo "OLDER_TAG=1" >> "$GITHUB_ENV"
|
|
fi
|
|
- uses: docker/setup-buildx-action@v4
|
|
- uses: docker/login-action@v4
|
|
with:
|
|
registry: ghcr.io
|
|
username: ${{ github.actor }}
|
|
password: ${{ secrets.GITHUB_TOKEN }}
|
|
- uses: goreleaser/goreleaser-action@v7
|
|
with:
|
|
version: v2.18.3
|
|
workdir: src
|
|
args: release --clean --config ../tooling/release-tooling/goreleaser.yaml ${{ steps.latest.outputs.skip }}
|
|
env:
|
|
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
|
TAP_GITHUB_TOKEN: ${{ secrets.TAP_GITHUB_TOKEN }}
|
|
AUR_KEY: ${{ secrets.AUR_KEY }}
|
|
- name: The built binary and the published image print the tag
|
|
env:
|
|
TAG: ${{ inputs.tag }}
|
|
run: |
|
|
test "$(dist/fejkdata_linux_amd64_v1/fejkdata --version)" = "fejkdata $TAG"
|
|
test "$(docker run --rm "ghcr.io/larvit/fejkdata:${TAG#v}" --version)" = "fejkdata $TAG"
|
|
|
|
repos:
|
|
name: apt, dnf and apk repositories for ${{ inputs.tag }}
|
|
needs: packages
|
|
if: needs.packages.outputs.latest == 'true'
|
|
runs-on: ubuntu-26.04
|
|
permissions:
|
|
contents: read
|
|
pages: write
|
|
id-token: write
|
|
environment:
|
|
name: github-pages
|
|
url: ${{ steps.deploy.outputs.page_url }}
|
|
steps:
|
|
- uses: actions/checkout@v7
|
|
with:
|
|
persist-credentials: false
|
|
- name: The release's Linux packages
|
|
env:
|
|
GH_TOKEN: ${{ github.token }}
|
|
TAG: ${{ inputs.tag }}
|
|
run: gh release download "$TAG" --repo "$GITHUB_REPOSITORY" --dir packages --pattern '*.deb' --pattern '*.rpm' --pattern '*.apk'
|
|
- uses: docker/setup-buildx-action@v4
|
|
- name: Install fejkdata from each repository, then export them
|
|
env:
|
|
PACKAGES_GPG_KEY: ${{ secrets.PACKAGES_GPG_KEY }}
|
|
PACKAGES_RSA_KEY: ${{ secrets.PACKAGES_RSA_KEY }}
|
|
TAG: ${{ inputs.tag }}
|
|
run: |
|
|
build() {
|
|
docker buildx build -f release-tooling/package-repos.Dockerfile \
|
|
--secret id=gpg,env=PACKAGES_GPG_KEY --secret id=rsa,env=PACKAGES_RSA_KEY \
|
|
--build-context packages=packages --build-arg "EXPECTED_VERSION=$TAG" "$@" .
|
|
}
|
|
build --target checks --output type=local,dest=checks
|
|
build --target site --output type=local,dest=site
|
|
- uses: actions/upload-pages-artifact@v5
|
|
with:
|
|
path: site
|
|
- id: deploy
|
|
uses: actions/deploy-pages@v5
|