name: Build / Release on: push: branches: [ "main" ] tags: [ 'v*.*.*' ] pull_request: branches: [ "main" ] jobs: docker: name: Docker Publish runs-on: ubuntu-latest permissions: contents: read packages: write steps: - name: Checkout repository uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 - name: Set Docker Platforms For Branch id: set-platforms run: | if [[ ${{ startsWith(github.ref, 'refs/tags/v') }} == 'true' ]]; then echo "DOCKER_PLATFORMS=linux/amd64,linux/arm64,linux/arm" >> "$GITHUB_OUTPUT" else echo "DOCKER_PLATFORMS=linux/amd64" >> "$GITHUB_OUTPUT" fi - name: Set up Docker Buildx uses: docker/setup-buildx-action@c47758b77c9736f4b2ef4073d4d51994fabfe349 # v3.7.1 - name: Log into Github Container Registry if: github.event_name != 'pull_request' uses: docker/login-action@9780b0c442fbb1117ed29e0efdff1e18412f7567 # v3.3.0 with: registry: ghcr.io username: ${{ github.actor }} password: ${{ secrets.GITHUB_TOKEN }} - name: Login to Docker Hub if: github.event_name != 'pull_request' uses: docker/login-action@9780b0c442fbb1117ed29e0efdff1e18412f7567 # v3.3.0 with: username: ${{ secrets.DOCKERHUB_USERNAME }} password: ${{ secrets.DOCKERHUB_PASSWORD }} - name: Extract Docker metadata id: meta uses: docker/metadata-action@8e5442c4ef9f78752691e2d8f8d19755c6f78e81 # v5.5.1 with: images: | evanbuss/opds-proxy ghcr.io/${{ github.repository }} flavor: | latest=auto tags: | type=edge,branch=main type=semver,pattern={{version}} # Build and push Docker image with Buildx (don't push on PR) - name: Build and push Docker image id: build-and-push uses: docker/build-push-action@4f58ea79222b3b9dc2c8bbdd6debcef730109a75 # v6.9.0 with: context: . push: ${{ github.event_name != 'pull_request' }} tags: ${{ steps.meta.outputs.tags }} labels: ${{ steps.meta.outputs.labels }} platforms: ${{ steps.set-platforms.outputs.DOCKER_PLATFORMS}} cache-from: type=gha cache-to: type=gha,mode=max build-args: | VERSION=${{ fromJSON(steps.meta.outputs.json).labels['org.opencontainers.image.version'] }} REVISION=${{ fromJSON(steps.meta.outputs.json).labels['org.opencontainers.image.revision'] }} BUILDTIME=${{ fromJSON(steps.meta.outputs.json).labels['org.opencontainers.image.created'] }} - name: Docker Hub Description uses: peter-evans/dockerhub-description@e98e4d1628a5f3be2be7c231e50981aee98723ae # v4.0.0 with: username: ${{ secrets.DOCKERHUB_USERNAME }} password: ${{ secrets.DOCKERHUB_PASSWORD }} repository: evanbuss/opds-proxy short-description: Access your OPDS library from any eReader enable-url-completion: true # fixes relative image links in README release: name: Github Release if: startsWith(github.ref, 'refs/tags/v') runs-on: ubuntu-latest permissions: contents: write steps: - name: Checkout repository uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 with: fetch-depth: 0 - name: Set up Go uses: actions/setup-go@41dfa10bad2bb2ae585af6ee5bb4d7d973ad74ed # v5.1.0 with: go-version: 'stable' - name: Run GoReleaser uses: goreleaser/goreleaser-action@286f3b13b1b49da4ac219696163fb8c1c93e1200 # v6.0.0 with: distribution: goreleaser version: latest args: release --clean env: GITHUB_TOKEN: "${{ secrets.GITHUB_TOKEN }}" deploy-demo: name: Deploy Demo to Cloud Run runs-on: ubuntu-latest environment: demo needs: docker permissions: id-token: write steps: - name: Authenticate with Google Cloud uses: google-github-actions/auth@6fc4af4b145ae7821d527454aa9bd537d1f2dc5f # v2.1.7 with: credentials_json: ${{ secrets.GCP_SA_KEY }} - name: Set up Cloud SDK uses: google-github-actions/setup-gcloud@f0990588f1e5b5af6827153b93673613abdc6ec7 #v2.1.1 - name: Deploy to Cloud Run run: | gcloud run deploy opds-proxy-demo \ --image=evanbuss/opds-proxy:edge \ --platform=managed \ --region=us-central1 \ --allow-unauthenticated