From f9245c41453f01132c75fb3a43340fb7adcbd0cf Mon Sep 17 00:00:00 2001 From: trev Date: Sat, 17 May 2025 04:03:37 -0400 Subject: [PATCH] style: move push action to new dir so github and gitea can share it --- .../actions => .actions}/init/action.yaml | 0 .actions/push/action.yaml | 60 ++++++++++++ .gitea/workflows/check.yaml | 22 ++--- .gitea/workflows/release.yaml | 97 ++++++------------- .gitea/workflows/update.yaml | 24 ++--- .github/workflows/check.yaml | 2 +- .github/workflows/release.yaml | 49 ++-------- .github/workflows/update.yaml | 2 +- 8 files changed, 112 insertions(+), 144 deletions(-) rename {.github/actions => .actions}/init/action.yaml (100%) create mode 100644 .actions/push/action.yaml diff --git a/.github/actions/init/action.yaml b/.actions/init/action.yaml similarity index 100% rename from .github/actions/init/action.yaml rename to .actions/init/action.yaml diff --git a/.actions/push/action.yaml b/.actions/push/action.yaml new file mode 100644 index 0000000..49c6f1a --- /dev/null +++ b/.actions/push/action.yaml @@ -0,0 +1,60 @@ +name: "docker push" +description: "push to docker registry" + +inputs: + server_url: + required: true + repository: + required: true + tag: + required: true + +runs: + using: "composite" + steps: + - name: Set env + run: | + REGISTRY=$(basename ${{ inputs.server_url }}) + + NR=${{ inputs.repository }} + NAMESPACE="${NR%%/*}" + REPOSITORY="${NR##*/}" + + TAG=${{ inputs.tag }} + VERSION=${TAG#v} + + echo "REGISTRY=${REGISTRY}" >> $GITHUB_ENV + echo "NAMESPACE=${NAMESPACE}" >> $GITHUB_ENV + echo "REPOSITORY=${REPOSITORY}" >> $GITHUB_ENV + echo "VERSION=${VERSION}" >> $GITHUB_ENV + + - name: Push images + run: | + docker image tag $REPOSITORY:$VERSION-amd64 $REGISTRY/$NAMESPACE/$REPOSITORY:$VERSION-amd64 + docker push $REGISTRY/$NAMESPACE/$REPOSITORY:$VERSION-amd64 + + docker image tag $REPOSITORY:$VERSION-arm64 $REGISTRY/$NAMESPACE/$REPOSITORY:$VERSION-arm64 + docker push $REGISTRY/$NAMESPACE/$REPOSITORY:$VERSION-arm64 + + docker image tag $REPOSITORY:$VERSION-arm $REGISTRY/$NAMESPACE/$REPOSITORY:$VERSION-arm + docker push $REGISTRY/$NAMESPACE/$REPOSITORY:$VERSION-arm + + - name: Push manifest + run: | + docker manifest create $HOST/$REPOSITORY:$VERSION \ + $REGISTRY/$NAMESPACE/$REPOSITORY:$VERSION-amd64 \ + $REGISTRY/$NAMESPACE/$REPOSITORY:$VERSION-arm64 \ + $REGISTRY/$NAMESPACE/$REPOSITORY:$VERSION-arm + docker manifest annotate $REGISTRY/$NAMESPACE/$REPOSITORY:$VERSION $REGISTRY/$NAMESPACE/$REPOSITORY:$VERSION-amd64 --arch amd64 + docker manifest annotate $REGISTRY/$NAMESPACE/$REPOSITORY:$VERSION $REGISTRY/$NAMESPACE/$REPOSITORY:$VERSION-arm64 --arch arm64 + docker manifest annotate $REGISTRY/$NAMESPACE/$REPOSITORY:$VERSION $REGISTRY/$NAMESPACE/$REPOSITORY:$VERSION-arm --arch arm + docker manifest push $REGISTRY/$NAMESPACE/$REPOSITORY:$VERSION + + docker manifest create $REGISTRY/$NAMESPACE/$REPOSITORY:latest \ + $REGISTRY/$NAMESPACE/$REPOSITORY:$VERSION-amd64 \ + $REGISTRY/$NAMESPACE/$REPOSITORY:$VERSION-arm64 \ + $REGISTRY/$NAMESPACE/$REPOSITORY:$VERSION-arm + docker manifest annotate $REGISTRY/$NAMESPACE/$REPOSITORY:latest $REGISTRY/$NAMESPACE/$REPOSITORY:$VERSION-amd64 --arch amd64 + docker manifest annotate $REGISTRY/$NAMESPACE/$REPOSITORY:latest $REGISTRY/$NAMESPACE/$REPOSITORY:$VERSION-arm64 --arch arm64 + docker manifest annotate $REGISTRY/$NAMESPACE/$REPOSITORY:latest $REGISTRY/$NAMESPACE/$REPOSITORY:$VERSION-arm --arch arm + docker manifest push $REGISTRY/$NAMESPACE/$REPOSITORY:latest diff --git a/.gitea/workflows/check.yaml b/.gitea/workflows/check.yaml index 41d7d26..df22eee 100644 --- a/.gitea/workflows/check.yaml +++ b/.gitea/workflows/check.yaml @@ -12,22 +12,12 @@ jobs: name: check runs-on: ubuntu-latest if: | - contains(gitea.event.head_commit.message, 'bump:') == false && - contains(gitea.event.head_commit.message, 'Merge pull request') == false + contains(github.event.head_commit.message, 'bump:') == false && + contains(github.event.head_commit.message, 'Merge pull request') == false steps: - - name: Checkout - uses: actions/checkout@v4 - - - name: Install Nix - uses: cachix/install-nix-action@v31 + - uses: actions/checkout@v4 + - uses: ./.actions/init with: - nix_path: nixpkgs=channel:nixos-unstable + token: "${{ secrets.CACHIX_AUTH_TOKEN }}" - - name: Use Cachix - uses: cachix/cachix-action@v16 - with: - name: trevstack - authToken: "${{ secrets.CACHIX_AUTH_TOKEN }}" - - - name: Check - run: nix flake check + - run: nix flake check diff --git a/.gitea/workflows/release.yaml b/.gitea/workflows/release.yaml index 19af433..994f893 100644 --- a/.gitea/workflows/release.yaml +++ b/.gitea/workflows/release.yaml @@ -9,43 +9,23 @@ jobs: check: runs-on: ubuntu-latest steps: - - name: Checkout - uses: actions/checkout@v4 - - - name: Install Nix - uses: cachix/install-nix-action@v31 + - uses: actions/checkout@v4 + - uses: ./.actions/init with: - nix_path: nixpkgs=channel:nixos-unstable + token: "${{ secrets.CACHIX_AUTH_TOKEN }}" - - name: Use Cachix - uses: cachix/cachix-action@v16 - with: - name: trevstack - authToken: "${{ secrets.CACHIX_AUTH_TOKEN }}" - - - name: Check - run: nix flake check + - run: nix flake check release: runs-on: ubuntu-latest needs: check steps: - - name: Checkout - uses: actions/checkout@v4 - - - name: Install Nix - uses: cachix/install-nix-action@v31 + - uses: actions/checkout@v4 + - uses: ./.actions/init with: - nix_path: nixpkgs=channel:nixos-unstable + token: "${{ secrets.CACHIX_AUTH_TOKEN }}" - - name: Use Cachix - uses: cachix/cachix-action@v16 - with: - name: trevstack - authToken: "${{ secrets.CACHIX_AUTH_TOKEN }}" - - - name: Build - run: > + - run: > nix build .#trevstack-linux-amd64 .#trevstack-linux-arm64 @@ -54,52 +34,35 @@ jobs: .#trevstack-darwin-amd64 .#trevstack-darwin-arm64 - - name: Release - uses: akkuman/gitea-release-action@v1 + - uses: akkuman/gitea-release-action@v1 with: files: |- result*/bin/* - # https://docs.docker.com/build/ci/github-actions/manage-tags-labels/ package: runs-on: ubuntu-latest - needs: release # Wait for binary cache to propagate + needs: release steps: - - name: Get domain - id: get_domain + - uses: actions/checkout@v4 + - uses: ./.actions/init + with: + token: "${{ secrets.CACHIX_AUTH_TOKEN }}" + + - uses: docker/login-action@v3 + with: + registry: ${{ github.server_url }} + username: ${{ github.actor }} + password: ${{ secrets.GITHUB_TOKEN }} + + - name: Build & load images run: | - DOMAIN=$(basename ${{ gitea.server_url }}) - echo $DOMAIN - echo "domain=$DOMAIN" >> $GITHUB_OUTPUT + nix build .#trevstack-linux-amd64-image && ./result | docker load + nix build .#trevstack-linux-arm64-image && ./result | docker load + nix build .#trevstack-linux-arm-image && ./result | docker load - - name: Docker meta - id: meta - uses: docker/metadata-action@v5 + - name: Push images + uses: ./.actions/push with: - # list of Docker images to use as base name for tags - images: | - ${{ steps.get_domain.outputs.domain }}/${{ gitea.repository }} - # generate Docker tags based on the following events/attributes - tags: | - type=ref,event=branch - type=semver,pattern={{version}} - - - name: Login to Gitea Container Registry - uses: docker/login-action@v3 - with: - registry: ${{ gitea.server_url }} - username: ${{ gitea.actor }} - password: ${{ secrets.PAT }} - - - name: Set up QEMU - uses: docker/setup-qemu-action@v3 - - - name: Set up Docker Buildx - uses: docker/setup-buildx-action@v3 - - - name: Build and push - uses: docker/build-push-action@v6 - with: - push: true - tags: ${{ steps.meta.outputs.tags }} - labels: ${{ steps.meta.outputs.labels }} + server_url: ${{ github.server_url }} + repository: ${{ github.repository }} + tag: ${{ github.ref_name }} diff --git a/.gitea/workflows/update.yaml b/.gitea/workflows/update.yaml index 9c11c53..289c0eb 100644 --- a/.gitea/workflows/update.yaml +++ b/.gitea/workflows/update.yaml @@ -9,33 +9,21 @@ jobs: update: runs-on: ubuntu-latest steps: - - name: Checkout - uses: actions/checkout@v4 + - uses: actions/checkout@v4 + - uses: ./.actions/init with: - fetch-depth: 0 - - - name: Install Nix - uses: cachix/install-nix-action@v31 - with: - nix_path: nixpkgs=channel:nixos-unstable - - - name: Use Cachix - uses: cachix/cachix-action@v16 - with: - name: trevstack - authToken: "${{ secrets.CACHIX_AUTH_TOKEN }}" + token: "${{ secrets.CACHIX_AUTH_TOKEN }}" # https://github.com/actions/checkout/issues/13 - - name: Set Git Config + - name: Set git config run: | git config user.name "github-actions[bot]" git config user.email "41898282+github-actions[bot]@users.noreply.github.com" git checkout -B update - - name: Update - run: nix run .#update + - run: nix run .#update - - name: Create Pull Request + - name: Create pull request env: PAT: ${{ secrets.PAT }} run: | diff --git a/.github/workflows/check.yaml b/.github/workflows/check.yaml index 50ae04f..df22eee 100644 --- a/.github/workflows/check.yaml +++ b/.github/workflows/check.yaml @@ -16,7 +16,7 @@ jobs: contains(github.event.head_commit.message, 'Merge pull request') == false steps: - uses: actions/checkout@v4 - - uses: ./.github/actions/init + - uses: ./.actions/init with: token: "${{ secrets.CACHIX_AUTH_TOKEN }}" diff --git a/.github/workflows/release.yaml b/.github/workflows/release.yaml index 522fb6a..e1213ac 100644 --- a/.github/workflows/release.yaml +++ b/.github/workflows/release.yaml @@ -14,7 +14,7 @@ jobs: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - - uses: ./.github/actions/init + - uses: ./.actions/init with: token: "${{ secrets.CACHIX_AUTH_TOKEN }}" @@ -25,7 +25,7 @@ jobs: needs: check steps: - uses: actions/checkout@v4 - - uses: ./.github/actions/init + - uses: ./.actions/init with: token: "${{ secrets.CACHIX_AUTH_TOKEN }}" @@ -49,19 +49,10 @@ jobs: needs: release steps: - uses: actions/checkout@v4 - - uses: ./.github/actions/init + - uses: ./.actions/init with: token: "${{ secrets.CACHIX_AUTH_TOKEN }}" - - name: Set env - run: | - TAG=${{ github.ref_name }} - VERSION=${TAG#v} - REGISTRY="ghcr.io" - - echo "VERSION=${VERSION}" >> $GITHUB_ENV - echo "REGISTRY=${REGISTRY}" >> $GITHUB_ENV - - uses: docker/login-action@v3 with: registry: ghcr.io @@ -75,32 +66,8 @@ jobs: nix build .#trevstack-linux-arm-image && ./result | docker load - name: Push images - run: | - docker image tag trevstack:$VERSION-amd64 $REGISTRY/$GITHUB_REPOSITORY:$VERSION-amd64 - docker push $REGISTRY/$GITHUB_REPOSITORY:$VERSION-amd64 - - docker image tag trevstack:$VERSION-arm64 $REGISTRY/$GITHUB_REPOSITORY:$VERSION-arm64 - docker push $REGISTRY/$GITHUB_REPOSITORY:$VERSION-arm64 - - docker image tag trevstack:$VERSION-arm $REGISTRY/$GITHUB_REPOSITORY:$VERSION-arm - docker push $REGISTRY/$GITHUB_REPOSITORY:$VERSION-arm - - - name: Push manifest - run: | - docker manifest create $REGISTRY/$GITHUB_REPOSITORY:$VERSION \ - $REGISTRY/$GITHUB_REPOSITORY:$VERSION-amd64 \ - $REGISTRY/$GITHUB_REPOSITORY:$VERSION-arm64 \ - $REGISTRY/$GITHUB_REPOSITORY:$VERSION-arm - docker manifest annotate $REGISTRY/$GITHUB_REPOSITORY:$VERSION $REGISTRY/$GITHUB_REPOSITORY:$VERSION-amd64 --arch amd64 - docker manifest annotate $REGISTRY/$GITHUB_REPOSITORY:$VERSION $REGISTRY/$GITHUB_REPOSITORY:$VERSION-arm64 --arch arm64 - docker manifest annotate $REGISTRY/$GITHUB_REPOSITORY:$VERSION $REGISTRY/$GITHUB_REPOSITORY:$VERSION-arm --arch arm - docker manifest push $REGISTRY/$GITHUB_REPOSITORY:$VERSION - - docker manifest create $REGISTRY/$GITHUB_REPOSITORY:latest \ - $REGISTRY/$GITHUB_REPOSITORY:$VERSION-amd64 \ - $REGISTRY/$GITHUB_REPOSITORY:$VERSION-arm64 \ - $REGISTRY/$GITHUB_REPOSITORY:$VERSION-arm - docker manifest annotate $REGISTRY/$GITHUB_REPOSITORY:latest $REGISTRY/$GITHUB_REPOSITORY:$VERSION-amd64 --arch amd64 - docker manifest annotate $REGISTRY/$GITHUB_REPOSITORY:latest $REGISTRY/$GITHUB_REPOSITORY:$VERSION-arm64 --arch arm64 - docker manifest annotate $REGISTRY/$GITHUB_REPOSITORY:latest $REGISTRY/$GITHUB_REPOSITORY:$VERSION-arm --arch arm - docker manifest push $REGISTRY/$GITHUB_REPOSITORY:latest + uses: ./.actions/push + with: + server_url: ${{ github.server_url }} + repository: ${{ github.repository }} + tag: ${{ github.ref_name }} diff --git a/.github/workflows/update.yaml b/.github/workflows/update.yaml index 0742797..bcbe204 100644 --- a/.github/workflows/update.yaml +++ b/.github/workflows/update.yaml @@ -14,7 +14,7 @@ jobs: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - - uses: ./.github/actions/init + - uses: ./.actions/init with: token: "${{ secrets.CACHIX_AUTH_TOKEN }}"