diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 81c30f1..bbed56f 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -12,79 +12,9 @@ on: jobs: go-tests: - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v3 - - - name: Set up Go - uses: actions/setup-go@v4 - with: - go-version: ">=1.19" - - - name: Tidy - run: | - go version - go mod tidy - - - name: Run Unit tests - run: | - go version - go test -v -race -covermode atomic -coverprofile=covprofile ./... + uses: ./.github/workflows/tests.yaml build: - runs-on: ubuntu-latest needs: go-tests if: "!contains(github.event.head_commit.message, '[ci-skip]')" - steps: - - name: Checkout - uses: actions/checkout@v3 - - - name: Docker meta - id: meta - uses: docker/metadata-action@v4 - with: - images: ghcr.io/${{ github.repository }} - flavor: | - latest=true - prefix=v - tags: | - type=ref,event=branch - type=semver,pattern={{version}} - type=semver,pattern={{major}}.{{minor}} - type=semver,pattern={{major}} - - - name: Set up QEMU - uses: docker/setup-qemu-action@v2 - with: - platforms: all - - - name: Set up Docker Buildx - id: buildx - uses: docker/setup-buildx-action@v2 - with: - install: true - version: latest - driver-opts: image=moby/buildkit:latest - - - name: Login to GitHub Container Registry - if: github.event_name != 'pull_request' - uses: docker/login-action@v2 - with: - registry: ghcr.io - username: ${{ github.actor }} - password: ${{ secrets.GITHUB_TOKEN }} - - - name: Build and Push - if: github.event_name != 'pull_request' - uses: docker/build-push-action@v4 - with: - context: . - file: ./Dockerfile - platforms: linux/amd64,linux/arm64 - push: true - tags: ${{ steps.meta.outputs.tags }} - labels: ${{ steps.meta.outputs.labels }} - build-args: | - VERSION=${{ steps.meta.outputs.version }} - BUILDTIME=${{ fromJSON(steps.meta.outputs.json).labels['org.opencontainers.image.created'] }} - REVISION=${{ fromJSON(steps.meta.outputs.json).labels['org.opencontainers.image.revision'] }} + uses: ./.github/workflows/docker-image.yaml diff --git a/.github/workflows/docker-image.yaml b/.github/workflows/docker-image.yaml new file mode 100644 index 0000000..efab3d5 --- /dev/null +++ b/.github/workflows/docker-image.yaml @@ -0,0 +1,62 @@ +--- +name: Create Docker Image + +on: + workflow_call: {} + +jobs: + docker-image: + runs-on: ubuntu-latest + steps: + - name: Checkout + uses: actions/checkout@v3 + + - name: Docker meta + id: meta + uses: docker/metadata-action@v4 + with: + images: ghcr.io/${{ github.repository }} + flavor: | + latest=true + prefix=v + tags: | + type=ref,event=branch + type=semver,pattern={{version}} + type=semver,pattern={{major}}.{{minor}} + type=semver,pattern={{major}} + + - name: Set up QEMU + uses: docker/setup-qemu-action@v2 + with: + platforms: all + + - name: Set up Docker Buildx + id: buildx + uses: docker/setup-buildx-action@v2 + with: + install: true + version: latest + driver-opts: image=moby/buildkit:latest + + - name: Login to GitHub Container Registry + if: github.event_name != 'pull_request' + uses: docker/login-action@v2 + with: + registry: ghcr.io + username: ${{ github.actor }} + password: ${{ secrets.GITHUB_TOKEN }} + + - name: Build and Push + if: github.event_name != 'pull_request' + uses: docker/build-push-action@v4 + with: + context: . + file: ./Dockerfile + platforms: linux/amd64,linux/arm64 + push: true + tags: ${{ steps.meta.outputs.tags }} + labels: ${{ steps.meta.outputs.labels }} + build-args: | + VERSION=${{ steps.meta.outputs.version }} + BUILDTIME=${{ fromJSON(steps.meta.outputs.json).labels['org.opencontainers.image.created'] }} + REVISION=${{ fromJSON(steps.meta.outputs.json).labels['org.opencontainers.image.revision'] }} diff --git a/.github/workflows/go-release.yaml b/.github/workflows/go-release.yaml new file mode 100644 index 0000000..589d4b8 --- /dev/null +++ b/.github/workflows/go-release.yaml @@ -0,0 +1,26 @@ +--- +name: Release Binary (go-releaser) + +on: + workflow_call: {} + +jobs: + go-release: + runs-on: ubuntu-latest + if: "!contains(github.event.head_commit.message, '[ci-skip]')" + steps: + - name: Checkout + uses: actions/checkout@v3 + + - name: Install Go + uses: actions/setup-go@v4 + with: + go-version: ">=1.19" + + - name: Run GoReleaser + uses: goreleaser/goreleaser-action@v4 + with: + version: latest + args: release --rm-dist + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} \ No newline at end of file diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 68d03ce..01908ba 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -6,67 +6,14 @@ on: - v*.*.* jobs: - container-release: - runs-on: ubuntu-latest + go-tests: if: "!contains(github.event.head_commit.message, '[ci-skip]')" - steps: - - name: Checkout - uses: actions/checkout@v3 - - - name: Prepare - id: prep - run: | - echo ::set-output name=version::${GITHUB_REF##*/} - - - name: Set up QEMU - uses: docker/setup-qemu-action@v2 - with: - platforms: all - - - name: Set up Docker Buildx - id: buildx - uses: docker/setup-buildx-action@v2 - with: - install: true - version: latest - driver-opts: image=moby/buildkit:latest - - - name: Login to GitHub Container Registry - if: github.event_name != 'pull_request' - uses: docker/login-action@v2 - with: - registry: ghcr.io - username: ${{ github.actor }} - password: ${{ secrets.GITHUB_TOKEN }} + uses: ./.github/workflows/tests.yaml - - name: Build and Push - if: github.event_name != 'pull_request' - uses: docker/build-push-action@v4 - with: - context: . - file: ./Dockerfile - platforms: linux/amd64,linux/arm64 - push: true - tags: | - ghcr.io/${{ github.repository_owner }}/exportarr:latest - ghcr.io/${{ github.repository_owner }}/exportarr:${{ steps.prep.outputs.version }} + container-release: + if: "!contains(github.event.head_commit.message, '[ci-skip]')" + uses: ./.github/workflows/docker-image.yaml go-release: - runs-on: ubuntu-latest if: "!contains(github.event.head_commit.message, '[ci-skip]')" - steps: - - name: Checkout - uses: actions/checkout@v3 - - - name: Install Go - uses: actions/setup-go@v4 - with: - go-version: ">=1.19" - - - name: Run GoReleaser - uses: goreleaser/goreleaser-action@v4 - with: - version: latest - args: release --rm-dist - env: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + uses: ./.github/workflows/go-release.yaml diff --git a/.github/workflows/tests.yaml b/.github/workflows/tests.yaml new file mode 100644 index 0000000..2fe70ad --- /dev/null +++ b/.github/workflows/tests.yaml @@ -0,0 +1,25 @@ +name: go-tests + +on: + workflow_call: {} + +jobs: + go-tests: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v3 + + - name: Set up Go + uses: actions/setup-go@v4 + with: + go-version: ">=1.19" + + - name: Tidy + run: | + go version + go mod tidy + + - name: Run Unit tests + run: | + go version + go test -v -race -covermode atomic -coverprofile=covprofile ./... \ No newline at end of file