From e82343acf42ea8443436122309b1f1168119c48b Mon Sep 17 00:00:00 2001 From: Justin Schneck Date: Thu, 27 Jun 2024 18:19:14 -0400 Subject: [PATCH] testing release workflow --- .github/workflows/build_push_release.yml | 200 +++++++++++++++++++++++ CHANGELOG.md | 7 + Containerfile | 2 +- VERSION | 2 +- support/Containerfile-release.amd64 | 2 +- support/Containerfile-release.arm64 | 2 +- 6 files changed, 211 insertions(+), 4 deletions(-) create mode 100644 .github/workflows/build_push_release.yml diff --git a/.github/workflows/build_push_release.yml b/.github/workflows/build_push_release.yml new file mode 100644 index 0000000..dc4ef1f --- /dev/null +++ b/.github/workflows/build_push_release.yml @@ -0,0 +1,200 @@ +name: Build and Push Release + +on: + push: + tags: + - 'v*' + +permissions: + contents: write + +jobs: + create_release: + runs-on: ubuntu-latest + + steps: + - name: Checkout repository + uses: actions/checkout@v3 + + - name: Set Env + run: | + VERSION=$(echo "${GITHUB_REF#refs/*/}" | sed 's/^v//') + echo "RELEASE_TAG=${GITHUB_REF#refs/*/}" >> $GITHUB_ENV + echo "RELEASE_VERSION=${VERSION}" >> $GITHUB_ENV + + - name: Create GitHub Release + id: create_release + env: + GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} + run: | + if gh release view $RELEASE_TAG &>/dev/null; then + echo "Release $RELEASE_TAG exists. skipping" + else + echo "Release $RELEASE_TAG does not exists. creating..." + RELEASE_NOTES=$(sed -e "/^## ${RELEASE_TAG}/,/^## / ! d" CHANGELOG.md | tail -n +2 | head -n -1) + gh release create $RELEASE_TAG \ + --generate-notes \ + --title $RELEASE_TAG \ + --notes "$RELEASE_NOTES" + fi + + create_release_arm64: + runs-on: ubuntu-latest-4-cores-arm64 + needs: create_release + + outputs: + image_digest: ${{ steps.build.outputs.digest }} + + steps: + - name: Checkout repository + uses: actions/checkout@v3 + + - name: Set Env + run: | + VERSION=$(echo "${GITHUB_REF#refs/*/}" | sed 's/^v//') + echo "RELEASE_TAG=${GITHUB_REF#refs/*/}" >> $GITHUB_ENV + echo "RELEASE_VERSION=${VERSION}" >> $GITHUB_ENV + + - name: Set up Docker Buildx + uses: docker/setup-buildx-action@v2 + with: + install: true + + - name: Build release artifacts for arm64 + run: | + docker buildx build --platform linux/arm64/v8 --output type=local,dest=docker_output/ -t peridiod:${RELEASE_TAG} -f support/Containerfile-release.arm64 . + + - name: Upload Release Asset + env: + GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} + run: | + mv ./docker_output/arm64/peridiod-${RELEASE_VERSION}.tar.gz ./docker_output/peridiod-${RELEASE_VERSION}-arm64.tar.gz + gh release upload $RELEASE_TAG ./docker_output/peridiod-${RELEASE_VERSION}-arm64.tar.gz --clobber + + - name: Load docker hub credentials + id: op-load-docker-hub-credentials + uses: 1password/load-secrets-action@v1 + with: + export-env: false + env: + OP_SERVICE_ACCOUNT_TOKEN: ${{ secrets.OP_SERVICE_ACCOUNT_TOKEN }} + DOCKER_HUB_USERNAME: op://ci-cd/docker-hub-machine/username + DOCKER_HUB_PASSWORD: op://ci-cd/docker-hub-machine/password + + - name: Login to Docker Hub + uses: docker/login-action@v2 + with: + username: ${{ steps.op-load-docker-hub-credentials.outputs.DOCKER_HUB_USERNAME }} + password: ${{ steps.op-load-docker-hub-credentials.outputs.DOCKER_HUB_PASSWORD }} + + - name: Build and push Docker image + uses: docker/build-push-action@v5 + id: build + with: + context: . + file: ./Containerfile + platforms: linux/arm64/v8 + push: false + tags: | + peridio/peridiod:${{ env.RELEASE_TAG }} + peridio/peridiod:latest + + create_release_amd64: + runs-on: ubuntu-latest + needs: create_release + + outputs: + image_digest: ${{ steps.build.outputs.digest }} + + steps: + - name: Checkout repository + uses: actions/checkout@v3 + + - name: Set Env + run: | + VERSION=$(echo "${GITHUB_REF#refs/*/}" | sed 's/^v//') + echo "RELEASE_TAG=${GITHUB_REF#refs/*/}" >> $GITHUB_ENV + echo "RELEASE_VERSION=${VERSION}" >> $GITHUB_ENV + + - name: Set up Docker Buildx + uses: docker/setup-buildx-action@v2 + with: + install: true + + - name: Build release artifacts for amd64 + run: | + docker buildx build --platform linux/amd64 --output type=local,dest=docker_output/ -t peridiod:${RELEASE_TAG} -f support/Containerfile-release.amd64 . + + - name: Upload Release Asset + env: + GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} + run: | + mv ./docker_output/amd64/peridiod-${RELEASE_VERSION}.tar.gz ./docker_output/peridiod-${RELEASE_VERSION}-amd64.tar.gz + gh release upload $RELEASE_TAG ./docker_output/peridiod-${RELEASE_VERSION}-amd64.tar.gz --clobber + + - name: Load docker hub credentials + id: op-load-docker-hub-credentials + uses: 1password/load-secrets-action@v1 + with: + export-env: false + env: + OP_SERVICE_ACCOUNT_TOKEN: ${{ secrets.OP_SERVICE_ACCOUNT_TOKEN }} + DOCKER_HUB_USERNAME: op://ci-cd/docker-hub-machine/username + DOCKER_HUB_PASSWORD: op://ci-cd/docker-hub-machine/password + + - name: Login to Docker Hub + uses: docker/login-action@v2 + with: + username: ${{ steps.op-load-docker-hub-credentials.outputs.DOCKER_HUB_USERNAME }} + password: ${{ steps.op-load-docker-hub-credentials.outputs.DOCKER_HUB_PASSWORD }} + + - name: Build and push Docker image + uses: docker/build-push-action@v5 + id: build + with: + context: . + file: ./Containerfile + platforms: linux/amd64 + push: false + tags: | + peridio/peridiod:${{ env.RELEASE_TAG }} + peridio/peridiod:latest + + push_container_images: + runs-on: ubuntu-latest + needs: [create_release_arm64, create_release_amd64] + + steps: + - name: Checkout repository + uses: actions/checkout@v3 + + - name: Set Env + run: | + echo "RELEASE_TAG=${GITHUB_REF#refs/*/}" >> $GITHUB_ENV + + - name: Load docker hub credentials + id: op-load-docker-hub-credentials + uses: 1password/load-secrets-action@v1 + with: + export-env: false + env: + OP_SERVICE_ACCOUNT_TOKEN: ${{ secrets.OP_SERVICE_ACCOUNT_TOKEN }} + DOCKER_HUB_USERNAME: op://ci-cd/docker-hub-machine/username + DOCKER_HUB_PASSWORD: op://ci-cd/docker-hub-machine/password + + - name: Login to Docker Hub + uses: docker/login-action@v2 + with: + username: ${{ steps.op-load-docker-hub-credentials.outputs.DOCKER_HUB_USERNAME }} + password: ${{ steps.op-load-docker-hub-credentials.outputs.DOCKER_HUB_PASSWORD }} + + - name: Create and Push Manifest + run: | + docker manifest create peridio/peridiod:${{ env.RELEASE_TAG }} \ + --amend peridio/peridiod:${{ env.RELEASE_TAG }}@${{ needs.create_release_amd64.outputs.image_digest }} \ + --amend peridio/peridiod:${{ env.RELEASE_TAG }}@${{ needs.create_release_64.outputs.image_digest }} + docker manifest create peridio/peridiod:latest \ + --amend peridio/peridiod:latest@${{ needs.create_release_amd64.outputs.image_digest }} \ + --amend peridio/peridiod:latest@${{ needs.create_release_64.outputs.image_digest }} + docker manifest push peridio/peridiod:${{ env.RELEASE_TAG }} + docker manifest push peridio/peridiod:latest diff --git a/CHANGELOG.md b/CHANGELOG.md index f3b67bd..6334395 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,12 @@ # peridiod releases +## v2.5.4-dev + +* Enhancements + * Here is an enhancement +* Bug Fixes + * Here is a bug fix + ## v2.5.3 * Bug fixes diff --git a/Containerfile b/Containerfile index 6ca4266..3935d09 100644 --- a/Containerfile +++ b/Containerfile @@ -1,4 +1,4 @@ -FROM elixir:1.16.2-alpine AS build +FROM elixir:1.16.3-alpine AS build ARG MIX_ENV=prod ARG UBOOT_ENV_SIZE=0x20000 diff --git a/VERSION b/VERSION index aedc15b..9cf22a4 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -2.5.3 +2.5.4-dev diff --git a/support/Containerfile-release.amd64 b/support/Containerfile-release.amd64 index 7431d41..1d929c7 100644 --- a/support/Containerfile-release.amd64 +++ b/support/Containerfile-release.amd64 @@ -1,4 +1,4 @@ -FROM --platform=linux/amd64 hexpm/elixir:1.16.2-erlang-26.2.5-ubuntu-noble-20240429 AS build +FROM --platform=linux/amd64 hexpm/elixir:1.16.3-erlang-26.2.5.1-ubuntu-noble-20240605 AS build ARG MIX_ENV=prod ARG UBOOT_ENV_SIZE=0x20000 diff --git a/support/Containerfile-release.arm64 b/support/Containerfile-release.arm64 index 99a086f..67327d4 100644 --- a/support/Containerfile-release.arm64 +++ b/support/Containerfile-release.arm64 @@ -1,4 +1,4 @@ -FROM --platform=linux/arm64/v8 hexpm/elixir:1.16.2-erlang-26.2.5-ubuntu-noble-20240429 AS build +FROM --platform=linux/arm64/v8 hexpm/elixir:1.16.3-erlang-26.2.5.1-ubuntu-noble-20240605 AS build ARG MIX_ENV=prod ARG UBOOT_ENV_SIZE=0x20000