From 06226724b718883cff9e9150e60e2eeacc2e0a1c Mon Sep 17 00:00:00 2001 From: sentriz Date: Sat, 8 May 2021 19:07:31 +0100 Subject: [PATCH] feat(ci): arm builds, push multiple registries Release-As: 0.13.0 --- .github/workflows/go.yml | 32 ------------- .github/workflows/image.yml | 44 ------------------ .github/workflows/nightly-release.yaml | 63 ++++++++++++++++++++------ .github/workflows/release.yaml | 52 +++++++++++++-------- .github/workflows/test.yml | 29 ++++++++++++ Dockerfile | 1 + 6 files changed, 112 insertions(+), 109 deletions(-) delete mode 100644 .github/workflows/go.yml delete mode 100644 .github/workflows/image.yml create mode 100644 .github/workflows/test.yml diff --git a/.github/workflows/go.yml b/.github/workflows/go.yml deleted file mode 100644 index 225c875f..00000000 --- a/.github/workflows/go.yml +++ /dev/null @@ -1,32 +0,0 @@ -name: go -on: - push: - branches: - - master - - develop - pull_request: -jobs: - test: - runs-on: ubuntu-latest - steps: - - name: Setup Go - uses: actions/setup-go@v1 - with: - go-version: 1.16.x - - name: Checkout code into the Go module directory - uses: actions/checkout@v1 - - name: Install dependencies - run: | - sudo apt update - sudo apt install build-essential git sqlite libtag1-dev ffmpeg libasound-dev - - name: Lint - uses: golangci/golangci-lint-action@v2 - with: - version: v1.33 - - name: Update version.go - run: | - _version=v$(cat version.txt) - sed -Ei "s/VERSION = \"v0.0.0\"/VERSION = \"${_version}-nightly\"/g" version/version.go - ./_do_gen_handler_tests - - name: Test - run: go test ./... diff --git a/.github/workflows/image.yml b/.github/workflows/image.yml deleted file mode 100644 index f19f8bf8..00000000 --- a/.github/workflows/image.yml +++ /dev/null @@ -1,44 +0,0 @@ -name: image -on: - push: - tags: - - v* - workflow_dispatch: -env: - REGISTRY_IMAGE: sentriz/gonic -jobs: - build: - runs-on: ubuntu-latest - if: "!contains(github.event.head_commit.message, '[ci-skip]')" - steps: - - name: Checkout - uses: actions/checkout@v2 - - name: Set up QEMU - uses: docker/setup-qemu-action@v1 - with: - image: tonistiigi/binfmt:latest - platforms: all - - name: Set up Docker Buildx - id: buildx - uses: docker/setup-buildx-action@v1 - with: - install: true - version: latest - driver-opts: image=moby/buildkit:master - - name: Login to DockerHub - uses: docker/login-action@v1 - with: - username: ${{ secrets.DOCKERHUB_USERNAME }} - password: ${{ secrets.DOCKERHUB_TOKEN }} - - name: Set release version - run: echo "RELEASE_VERSION=${GITHUB_REF##*/}" >> $GITHUB_ENV - - name: Build and Push - uses: docker/build-push-action@v2 - with: - context: . - file: ./Dockerfile - platforms: linux/amd64,linux/arm64,linux/arm/v6,linux/arm/v7 - push: true - tags: | - ${{ env.REGISTRY_IMAGE }}:latest - ${{ env.REGISTRY_IMAGE }}:${{ env.RELEASE_VERSION }} diff --git a/.github/workflows/nightly-release.yaml b/.github/workflows/nightly-release.yaml index 47ed6f02..b99ff5d5 100644 --- a/.github/workflows/nightly-release.yaml +++ b/.github/workflows/nightly-release.yaml @@ -4,24 +4,59 @@ on: - cron: '0 0 * * *' workflow_dispatch: {} jobs: + test: + name: Lint and test + runs-on: ubuntu-latest + steps: + - name: Checkout + uses: actions/checkout@v2 + - name: Setup Go + uses: actions/setup-go@v2 + with: + go-version: 1.16.x + - name: Install dependencies + run: | + sudo apt update -qq + sudo apt install -y -qq build-essential git sqlite libtag1-dev ffmpeg libasound-dev + - name: Lint + uses: golangci/golangci-lint-action@v2 + with: + version: latest + skip-go-installation: true + - name: Test + run: go test ./... build-release: name: Build and release Docker image runs-on: ubuntu-latest + needs: [test] steps: - name: Checkout repository uses: actions/checkout@v2 - - name: Update version.go - run: | - _version=v$(cat version.txt) - sed -Ei "s/VERSION = \"v0.0.0\"/VERSION = \"${_version}-nightly\"/g" version/version.go + - name: Set up QEMU + uses: docker/setup-qemu-action@v1 + with: + image: tonistiigi/binfmt:latest + platforms: all + - name: Set up Docker Buildx + id: buildx + uses: docker/setup-buildx-action@v1 + with: + install: true + version: latest + driver-opts: image=moby/buildkit:master + - name: Login into DockerHub + run: echo ${{ secrets.DOCKERHUB_TOKEN }} | docker login -u ${{ secrets.DOCKERHUB_USERNAME }} --password-stdin - name: Login into GitHub Container Registry - run: echo ${{ secrets.CR_PAT }} | docker login ghcr.io -u $GITHUB_ACTOR --password-stdin - - name: Build Docker image - run: | - docker build \ - -t "ghcr.io/${GITHUB_REPOSITORY}:${GITHUB_SHA:0:7}" \ - -t "ghcr.io/${GITHUB_REPOSITORY}:nightly" . - - name: Release Docker image - run: | - docker push "ghcr.io/${GITHUB_REPOSITORY}:${GITHUB_SHA:0:7}" - docker push "ghcr.io/${GITHUB_REPOSITORY}:nightly" + run: echo ${{ secrets.CR_PAT }} | docker login ghcr.io -u ${{ github.actor }} --password-stdin + - name: Build and Push + uses: docker/build-push-action@v2 + with: + context: . + file: ./Dockerfile + platforms: linux/amd64,linux/arm64,linux/arm/v7 + push: true + tags: | + ghcr.io/${{ github.repository }}:${{ github.sha }} + ghcr.io/${{ github.repository }}:nightly + ${{ github.repository }}:${{ github.sha }} + ${{ github.repository }}:nightly diff --git a/.github/workflows/release.yaml b/.github/workflows/release.yaml index 90926137..5e1fa6b6 100644 --- a/.github/workflows/release.yaml +++ b/.github/workflows/release.yaml @@ -5,7 +5,7 @@ on: - master jobs: release-please: - name: Run release-please + name: Run Release Please runs-on: ubuntu-latest outputs: release_created: ${{ steps.release.outputs.release_created }} @@ -13,33 +13,47 @@ jobs: steps: - name: Checkout repository uses: actions/checkout@v2 - - name: Setup release please + - name: Setup Release Please uses: google-github-actions/release-please-action@v2 id: release with: - token: ${{ secrets.GITHUB_TOKEN }} + token: ${{ secrets.CR_PAT }} release-type: simple changelog-path: CHANGELOG.md package-name: gonic - build-tag-publish: + build-release: name: Build, tag, and publish Docker image - if: ${{ needs.release-please.outputs.release_created }} - needs: release-please runs-on: ubuntu-latest + needs: [release-please] + if: ${{ needs.release-please.outputs.release_created }} steps: - name: Checkout repository uses: actions/checkout@v2 - - name: Update version.go - run: sed -Ei 's/VERSION = "v0.0.0"/VERSION = "${{ needs.release-please.outputs.tag_name }}"/g' version/version.go + - name: Set up QEMU + uses: docker/setup-qemu-action@v1 + with: + image: tonistiigi/binfmt:latest + platforms: all + - name: Set up Docker Buildx + id: buildx + uses: docker/setup-buildx-action@v1 + with: + install: true + version: latest + driver-opts: image=moby/buildkit:master + - name: Login into DockerHub + run: echo ${{ secrets.DOCKERHUB_TOKEN }} | docker login -u ${{ secrets.DOCKERHUB_USERNAME }} --password-stdin - name: Login into GitHub Container Registry - run: echo ${{ secrets.CR_PAT }} | docker login ghcr.io -u $GITHUB_ACTOR --password-stdin - - name: Build Docker image - if: ${{ needs.release-please.outputs.release_created }} - run: | - docker build \ - -t "ghcr.io/${GITHUB_REPOSITORY}:${{ needs.release-please.outputs.tag_name }}" \ - -t "ghcr.io/${GITHUB_REPOSITORY}:latest" . - - name: Release Docker image - run: | - docker push "ghcr.io/${GITHUB_REPOSITORY}:${{ needs.release-please.outputs.tag_name }}" - docker push "ghcr.io/${GITHUB_REPOSITORY}:latest" + run: echo ${{ secrets.CR_PAT }} | docker login ghcr.io -u ${{ github.actor }} --password-stdin + - name: Build and Push + uses: docker/build-push-action@v2 + with: + context: . + file: ./Dockerfile + platforms: linux/amd64,linux/arm64,linux/arm/v6,linux/arm/v7 + push: true + tags: | + ghcr.io/${{ github.repository }}:${{ needs.release-please.outputs.tag_name }} + ghcr.io/${{ github.repository }}:latest + ${{ github.repository }}:${{ needs.release-please.outputs.tag_name }} + ${{ github.repository }}:latest diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml new file mode 100644 index 00000000..598c4714 --- /dev/null +++ b/.github/workflows/test.yml @@ -0,0 +1,29 @@ +name: Lint and test +on: + push: + branches: + - master + - develop + pull_request: +jobs: + test: + name: Lint and test + runs-on: ubuntu-latest + steps: + - name: Checkout + uses: actions/checkout@v2 + - name: Setup Go + uses: actions/setup-go@v2 + with: + go-version: 1.16.x + - name: Install dependencies + run: | + sudo apt update -qq + sudo apt install -y -qq build-essential git sqlite libtag1-dev ffmpeg libasound-dev + - name: Lint + uses: golangci/golangci-lint-action@v2 + with: + version: latest + skip-go-installation: true + - name: Test + run: go test ./... diff --git a/Dockerfile b/Dockerfile index bcb19b9c..e247ec92 100644 --- a/Dockerfile +++ b/Dockerfile @@ -15,6 +15,7 @@ COPY . . RUN GOOS=linux go build -o gonic cmd/gonic/gonic.go FROM alpine:3.13.1 +LABEL org.opencontainers.image.source https://github.com/sentriz/gonic RUN apk add -U --no-cache \ ffmpeg \ ca-certificates \