.github/workflows/release.yml #8
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
on: | |
workflow_run: | |
workflows: [ci] | |
types: [completed] | |
branches: [main] | |
workflow_dispatch: | |
inputs: | |
version: | |
description: "Version to release (format: vX.Y.Z)" | |
required: true | |
upload: | |
description: "Upload final artifacts to github" | |
default: false | |
push: | |
tags: | |
- "v[0-9]+.[0-9]+.[0-9]+" | |
concurrency: | |
group: ${{ github.workflow }} | |
cancel-in-progress: false | |
permissions: | |
contents: write | |
packages: write | |
jobs: | |
setup: | |
name: Setup | |
runs-on: ubuntu-latest | |
outputs: | |
version: ${{ steps.extract_version.outputs.version }} | |
steps: | |
- name: Exract the Version | |
id: extract_version | |
run: | | |
if [[ "${{ github.event_name }}" == "push" ]]; then | |
# Remove the leading 'v' from the tag | |
VERSION=${GITHUB_REF#refs/tags/v} | |
echo "version=$VERSION" >> $GITHUB_OUTPUT | |
elif [[ "${{ github.event_name }}" == "workflow_dispatch" ]]; then | |
VERSION=${{ github.event.inputs.version }} | |
VERSION=${VERSION#v} | |
echo "version=$VERSION" >> $GITHUB_OUTPUT | |
else | |
echo "Error: Unsupported event type." | |
exit 1 | |
fi | |
binary: | |
name: Binaries | |
runs-on: ubuntu-latest | |
needs: [setup] | |
env: | |
CONNET_VERSION: ${{ needs.setup.outputs.version }} | |
steps: | |
- uses: actions/checkout@v4 | |
- uses: cachix/install-nix-action@v27 | |
with: | |
nix_path: nixpkgs=channel:nixos-unstable | |
github_access_token: ${{ secrets.GITHUB_TOKEN }} | |
- uses: DeterminateSystems/magic-nix-cache-action@main | |
- name: Build release | |
run: nix develop --command make release | |
- name: Upload release | |
uses: softprops/action-gh-release@v2 | |
if: ${{ github.event_name == 'workflow_dispatch' && github.event.inputs.upload == 'true' || github.event_name == 'push' }} | |
with: | |
tag_name: v${{ env.CONNET_VERSION }} | |
files: "dist/archive/connet-${{ env.CONNET_VERSION }}-*.tar.gz" | |
docker-x86: | |
name: Docker x86 | |
runs-on: ubuntu-latest | |
needs: [setup] | |
env: | |
CONNET_VERSION: ${{ needs.setup.outputs.version }} | |
steps: | |
- uses: actions/checkout@v4 | |
- uses: cachix/install-nix-action@v27 | |
with: | |
nix_path: nixpkgs=channel:nixos-unstable | |
github_access_token: ${{ secrets.GITHUB_TOKEN }} | |
- uses: DeterminateSystems/magic-nix-cache-action@main | |
- name: Docker build | |
run: nix build .#docker | |
- name: Docker login | |
uses: docker/login-action@v3 | |
with: | |
registry: ghcr.io | |
username: ${{ github.actor }} | |
password: ${{ secrets.GITHUB_TOKEN }} | |
- name: Docker push | |
if: ${{ github.event_name == 'workflow_dispatch' && github.event.inputs.upload == 'true' || github.event_name == 'push' }} | |
run: nix develop --command skopeo copy "docker-archive:result" "docker://ghcr.io/connet-dev/connet:${CONNET_VERSION}-amd64" | |
docker-arm: | |
name: Docker arm | |
runs-on: ubuntu-latest | |
needs: [setup] | |
env: | |
CONNET_VERSION: ${{ needs.setup.outputs.version }} | |
steps: | |
- uses: actions/checkout@v4 | |
- uses: docker/setup-qemu-action@v3 | |
- uses: cachix/install-nix-action@v27 | |
with: | |
extra_nix_config: system = aarch64-linux | |
nix_path: nixpkgs=channel:nixos-unstable | |
github_access_token: ${{ secrets.GITHUB_TOKEN }} | |
- uses: DeterminateSystems/magic-nix-cache-action@main | |
- name: Docker build | |
run: nix build .#docker | |
- name: Docker login | |
uses: docker/login-action@v3 | |
with: | |
registry: ghcr.io | |
username: ${{ github.actor }} | |
password: ${{ secrets.GITHUB_TOKEN }} | |
- name: Docker push | |
if: ${{ github.event_name == 'workflow_dispatch' && github.event.inputs.upload == 'true' || github.event_name == 'push' }} | |
run: nix develop --command skopeo copy "docker-archive:result" "docker://ghcr.io/connet-dev/connet:${CONNET_VERSION}-arm64" | |
docker-multiarch: | |
name: Tag multi-arch | |
runs-on: ubuntu-latest | |
needs: [setup, docker-x86, docker-arm] | |
env: | |
CONNET_VERSION: ${{ needs.setup.outputs.version }} | |
steps: | |
- uses: actions/checkout@v4 | |
- uses: cachix/install-nix-action@v27 | |
with: | |
nix_path: nixpkgs=channel:nixos-unstable | |
github_access_token: ${{ secrets.GITHUB_TOKEN }} | |
- uses: DeterminateSystems/magic-nix-cache-action@main | |
- name: Docker login | |
uses: docker/login-action@v3 | |
with: | |
registry: ghcr.io | |
username: ${{ github.actor }} | |
password: ${{ secrets.GITHUB_TOKEN }} | |
- name: Docker tag | |
if: ${{ github.event_name == 'workflow_dispatch' && github.event.inputs.upload == 'true' || github.event_name == 'push' }} | |
run: nix develop --command manifest-tool push from-args --platforms linux/amd64,linux/arm64 --template ghcr.io/connet-dev/connet:${CONNET_VERSION}-ARCHVARIANT --target ghcr.io/connet-dev/connet:${CONNET_VERSION} |