diff --git a/.github/workflows/image-build.yaml b/.github/workflows/image-build.yaml index 2d97ce0754..020ef964f0 100644 --- a/.github/workflows/image-build.yaml +++ b/.github/workflows/image-build.yaml @@ -13,15 +13,119 @@ concurrency: group: build-${{ github.ref }} cancel-in-progress: true +env: + tag: ${{ github.ref == 'refs/heads/main' && 'latest' || github.ref_name }} + + # what is normally sent in as input + registry: "quay.io/sdickers" + image_name: "tackle2-ui" + containerfile: "./Dockerfile" + extra-args: "--ulimit nofile=4096:4096" + # pre_build_cmd: | + # echo "registry= \"http://localhost:4873\"" >> .npmrc + pre_build_cmd: | + echo "registry=https://npm.pkg.github.com" >> .npmrc + jobs: - image-build: - uses: konveyor/release-tools/.github/workflows/build-push-images.yaml@main - with: - registry: "quay.io/sdickers" - image_name: "tackle2-ui" - containerfile: "./Dockerfile" - architectures: '[ "amd64", "arm64", "ppc64le", "s390x" ]' - extra-args: "--ulimit nofile=4096:4096" - secrets: - registry_username: ${{ secrets.QUAY_PUBLISH_ROBOT }} - registry_password: ${{ secrets.QUAY_PUBLISH_TOKEN }} + build: + runs-on: ubuntu-latest + + # setup a npm mirror server so multiple npm installs can share fetches + # services: + # npm-mirror: + # image: verdaccio/verdaccio:5 + # ports: + # - 4873:4873 + + strategy: + matrix: + architecture: + - "amd64" + - "arm64" + - "ppc64le" + - "s390x" + + steps: + - name: Maximize disk space + shell: bash + run: | + echo "Space before clearing:" + df . -h + sudo rm -rf /usr/share/dotnet + sudo rm -rf /opt/ghc + sudo rm -rf "/usr/local/share/boost" + sudo rm -rf "$AGENT_TOOLSDIRECTORY" + echo "Space after clearing:" + df . -h + + - name: Checkout + uses: actions/checkout@main + + - name: Configure QEMU + uses: docker/setup-qemu-action@master + with: + platforms: all + + - name: Image meta + id: meta + uses: docker/metadata-action@v4 + with: + images: ${{ env.registry }}/${{ env.image_name }} + tags: | + type=schedule + type=semver,pattern={{version}} + type=semver,pattern={{major}}.{{minor}} + type=semver,pattern={{major}} + type=ref,event=branch + type=ref,event=pr + type=sha + + - name: Run pre build command + shell: bash + run: "${{ env.pre_build_cmd }}" + if: "${{ env.pre_build_cmd != '' }}" + + - name: Build Image + id: build + uses: redhat-actions/buildah-build@main + with: + image: ${{ env.image_name }} + tags: ${{ env.tag }}-${{ matrix.architecture }} + extra-args: "--no-cache --rm ${{ env.extra-args }}" + archs: ${{ matrix.architecture }} + labels: ${{ steps.meta.outputs.labels }} + containerfiles: ${{ env.containerfile }} + + - name: Push To Quay + uses: redhat-actions/push-to-registry@main + id: push + with: + image: ${{ steps.build.outputs.image }} + tags: ${{ env.tag }}-${{ matrix.architecture }} + username: ${{ secrets.QUAY_PUBLISH_ROBOT }} + password: ${{ secrets.QUAY_PUBLISH_TOKEN }} + registry: ${{ env.registry }} + + manifest: + needs: build + runs-on: ubuntu-latest + steps: + - name: Create manifest + shell: bash + run: | + podman manifest create "${{ env.registry }}/${{ env.image_name }}:${{ env.tag }}" + for arch in $(echo '${{ env.architectures }}' | jq -r '.[]'); do + podman manifest add \ + "${{ env.registry }}/${{ env.image_name }}:${{ env.tag }}" \ + "${{ env.registry }}/${{ env.image_name }}:${{ env.tag }}-${arch}" + done + + - name: Push To Quay + uses: redhat-actions/push-to-registry@main + id: push + with: + image: ${{ env.image_name }} + tags: ${{ env.tag }} + username: ${{ secrets.QUAY_PUBLISH_ROBOT }} + password: ${{ secrets.QUAY_PUBLISH_TOKEN }} + registry: ${{ env.registry }}