Skip to content

npm-caching-proxy work #32

npm-caching-proxy work

npm-caching-proxy work #32

name: Image Build 2
on:
workflow_dispatch:
push:
branches:
- "main"
- "release-*"
tags:
- "v*"
concurrency:
group: image-build-2-${{ github.ref }}
cancel-in-progress: true
env:
tag: ${{ github.ref == 'refs/heads/main' && 'latest1' || github.ref_name }}
# what is normally sent in as input
registry: "quay.io/sdickers"
image_name: "tackle2-ui"
containerfile: "./Dockerfile"
context: "."
architectures: '[ "amd64", "arm64" ]'
extra-args: "--ulimit nofile=4096:4096"
# pre_build_cmd: |
# echo "registry=\"http://localhost:4873\"" >> .npmrc
# echo "registry=\"http://host.containers.internal:4873\"" >> .npmrc
# echo "registry=\"http://host.docker.internal:4873\"" >> .npmrc
jobs:
# fill-cache:
# 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
# volumes:
# -
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: # can't use `env` here.. ${{ fromJson(env.architectures) }}
- amd64
- arm64
# concurrency:
# group: image-build-2-${{ github.ref }}-${{ matrix.architecture }}
# cancel-in-progress: true
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@v4
- name: Proxy npm registry to the "npm-mirror" service
run: |
echo "registry=\"http://npm-mirror:4873\"" >> .npmrc
- name: Setup QEMU to be able to build on ${{ matrix.architecture }}
if: ${{ matrix.architecture != 'amd64' }}
uses: docker/setup-qemu-action@master
with:
platforms: ${{ matrix.architecture }}
- name: Image meta
id: meta
uses: docker/metadata-action@v5
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 }}
context: ${{ env.context }}
- 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 }}