name: Build and Push Docker Images (Default + Simple Mode) on: push: branches: - "main" tags: - "v*" workflow_dispatch: jobs: # New job to build dist and create release build-and-release: runs-on: ubuntu-latest if: github.repository == 'alam00000/bentopdf' && startsWith(github.ref, 'refs/tags/') permissions: contents: write env: HUSKY: 0 steps: - name: Checkout code uses: actions/checkout@v4 - name: Setup Node.js uses: actions/setup-node@v4 with: node-version: "20" - name: Install dependencies run: npm ci - name: Build distribution run: npm run build - name: Extract version id: version run: | VERSION=${GITHUB_REF#refs/tags/v} echo "version=${VERSION}" >> $GITHUB_OUTPUT - name: Package distribution run: npm run package - name: Create GitHub Release uses: softprops/action-gh-release@v2 with: files: dist-${{ steps.version.outputs.version }}.zip generate_release_notes: true draft: false prerelease: false env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} docker-build-and-push: runs-on: ubuntu-latest if: github.repository == 'alam00000/bentopdf' permissions: contents: write packages: write strategy: matrix: mode: - name: default simple_mode: false suffix: "" - name: simple simple_mode: true suffix: "-simple" steps: - name: Checkout code uses: actions/checkout@v4 - name: Set up QEMU uses: docker/setup-qemu-action@v3 - name: Set up Docker Buildx uses: docker/setup-buildx-action@v3 - name: Login to DockerHub uses: docker/login-action@v3 with: username: ${{ secrets.DOCKER_USERNAME }} password: ${{ secrets.DOCKER_TOKEN }} - name: Login to GitHub Container Registry uses: docker/login-action@v3 with: registry: ghcr.io username: ${{ github.repository_owner }} password: ${{ secrets.GITHUB_TOKEN }} - name: Extract version and determine release type id: version run: | if [[ $GITHUB_REF == refs/tags/v* ]]; then VERSION=${GITHUB_REF#refs/tags/} echo "version=${VERSION}" >> $GITHUB_OUTPUT echo "version_without_v=${VERSION#v}" >> $GITHUB_OUTPUT echo "is_release=true" >> $GITHUB_OUTPUT else SHORT_SHA=${GITHUB_SHA::7} echo "version=edge" >> $GITHUB_OUTPUT echo "short_sha=${SHORT_SHA}" >> $GITHUB_OUTPUT echo "is_release=false" >> $GITHUB_OUTPUT fi # Build and push for releases (with 'latest' tag) - name: Build and push ${{ matrix.mode.name }} image (release) if: steps.version.outputs.is_release == 'true' uses: docker/build-push-action@v6 with: push: true build-args: | SIMPLE_MODE=${{ matrix.mode.simple_mode }} tags: | bentopdf/bentopdf${{ matrix.mode.suffix }}:latest bentopdf/bentopdf${{ matrix.mode.suffix }}:${{ steps.version.outputs.version_without_v }} bentopdf/bentopdf${{ matrix.mode.suffix }}:${{ steps.version.outputs.version }} ghcr.io/${{ github.repository_owner }}/bentopdf${{ matrix.mode.suffix }}:latest ghcr.io/${{ github.repository_owner }}/bentopdf${{ matrix.mode.suffix }}:${{ steps.version.outputs.version_without_v }} ghcr.io/${{ github.repository_owner }}/bentopdf${{ matrix.mode.suffix }}:${{ steps.version.outputs.version }} platforms: linux/amd64,linux/arm64 cache-from: type=gha cache-to: type=gha,mode=max # Build and push for main branch (with 'edge' tag) - name: Build and push ${{ matrix.mode.name }} image (edge) if: steps.version.outputs.is_release == 'false' uses: docker/build-push-action@v6 with: push: true build-args: | SIMPLE_MODE=${{ matrix.mode.simple_mode }} tags: | bentopdf/bentopdf${{ matrix.mode.suffix }}:edge bentopdf/bentopdf${{ matrix.mode.suffix }}:sha-${{ steps.version.outputs.short_sha }} ghcr.io/${{ github.repository_owner }}/bentopdf${{ matrix.mode.suffix }}:edge ghcr.io/${{ github.repository_owner }}/bentopdf${{ matrix.mode.suffix }}:sha-${{ steps.version.outputs.short_sha }} platforms: linux/amd64,linux/arm64 cache-from: type=gha cache-to: type=gha,mode=max