# todo: use https://github.com/jpribyl/action-docker-layer-caching # todo: make this generic for all Rust images in this repo # todo: don't use docker/build-push-action # todo: run builds on pull request name: Build and push API Docker image on: push: branches: - main paths: - 'lib/pklib/**' - 'services/api/**' jobs: deploy: runs-on: ubuntu-latest permissions: packages: write if: github.repository == 'PluralKit/PluralKit' steps: - uses: docker/login-action@v1 if: ${{ !env.ACT }} with: registry: ghcr.io username: ${{ github.actor }} password: ${{ secrets.CR_PAT }} - uses: actions/checkout@v2 - uses: docker/setup-buildx-action@v1 # main docker build - run: echo "BRANCH_NAME=${GITHUB_REF#refs/heads/}" >> $GITHUB_ENV - uses: docker/build-push-action@v2 with: # https://github.com/docker/build-push-action/issues/378 context: . file: Dockerfile.rust push: false cache-from: type=gha cache-to: type=gha outputs: .docker-bin # add more binaries here - run: | for binary in "api"; do for tag in latest ${{ env.BRANCH_NAME }} ${{ github.sha }}; do cat Dockerfile.bin | sed "s/__BINARY__/$binary/g" | docker build -t ghcr.io/pluralkit/$binary:$tag -f - . done if [ "${{ github.repository }}" == "PluralKit/PluralKit" ]; then docker push ghcr.io/pluralkit/$binary:${{ env.BRANCH_NAME }} docker push ghcr.io/pluralkit/$binary:${{ github.sha }} [ "${{ env.BRANCH_NAME }}" == "main" ] && docker push ghcr.io/pluralkit/$binary:latest fi done