name: CI on: push: tags: [ "*" ] env: DOCKER_REGISTRY: ghcr.io DOCKER_USERNAME: ${{ github.actor }} DOCKER_PASSWORD: ${{ secrets.GITHUB_TOKEN }} DOCKER_IMAGE_NAME: ${{ github.repository }} jobs: test: runs-on: ubuntu-latest steps: - name: Checkout repository uses: actions/checkout@v3 - uses: actions/setup-go@v3 with: go-version: '^1.17' - name: Run tests run: go test -race -cover -coverprofile cover.out ./... - name: Generage coverage report run: go tool cover -html=cover.out -o coverage.html - name: Upload coverage uses: actions/upload-artifact@v3 with: name: coverage path: coverage.html build-and-publish: runs-on: ubuntu-latest needs: test steps: - name: Checkout repository uses: actions/checkout@v3 - name: Login to GitHub Container Registry uses: docker/login-action@v1 with: registry: ${{ env.DOCKER_REGISTRY }} username: ${{ env.DOCKER_USERNAME }} password: ${{ env.DOCKER_PASSWORD }} - name: Extract metadata (tags, labels) for Docker id: meta uses: docker/metadata-action@v3 with: images: ${{ env.DOCKER_REGISTRY }}/${{ env.DOCKER_IMAGE_NAME }} - name: Build and push Docker image uses: docker/build-push-action@v2 with: context: . pull: true push: ${{ github.ref == 'refs/heads/master' || github.ref == 'refs/heads/develop' || startsWith(github.ref, 'refs/tags') }} tags: ${{ steps.meta.outputs.tags }} labels: ${{ steps.meta.outputs.labels }}