Skip to content

✨ Test image build on Dockerfile change #68

✨ Test image build on Dockerfile change

✨ Test image build on Dockerfile change #68

Workflow file for this run

name: CI (repo level)
on:
push:
branches:
- "main"
- "release-*"
pull_request:
branches:
- "main"
- "release-*"
schedule:
- cron: "35 5 * * *" # every day @ 5:35am UTC
workflow_dispatch:
jobs:
unit-test-lookups:
runs-on: ubuntu-latest
outputs:
builder-image: ${{ steps.grepBuilder.outputs.builder }}
test-image-build: ${{ steps.dockerChanged.outputs.flag }}
steps:
- uses: actions/checkout@v4
- name: Lookup builder image from the project's Dockerfile
id: grepBuilder
run: |
builder=$(grep 'as builder' Dockerfile | sed -e 's/^FROM \(.*\) as builder$/\1/')
echo "Builder image: \`$builder\`" >> "$GITHUB_STEP_SUMMARY"
echo "builder=$builder" >> "$GITHUB_OUTPUT"
- name: Check if the `Dockerfile` has been changed by a PR
id: dockerChanged
env:
IS_PR: ${{ !!github.event.pull_request }}}
run: |
INCLUDES_DOCKERFILE=$(
if [[ $(git show --raw --oneline HEAD -- Dockerfile | wc --lines) -eq 0 ]]; then
echo "false"
else
echo "true"
fi
)
TEST_IMAGE_BUILD=$(
if [[ $IS_PR == true ]] && [[ $INCLUDES_DOCKERFILE == true ]]; then
echo "true"
else
echo "false"
fi
)
cat >> "$GITHUB_STEP_SUMMARY" <<EOF
PR triggered? \`$IS_PR\`
PR merge commit include a Dockerfile change? \`$INCLUDES_DOCKERFILE\`
Should the image build be tested? \`$TEST_IMAGE_BUILD\`
EOF
echo "flag=`$TEST_IMAGE_BUILD" >> "$GITHUB_OUTPUT"
unit-test:
runs-on: ubuntu-latest
needs: unit-test-lookups
# Use the same container as the Dockerfile's "FROM * as builder"
container: ${{ needs.unit-test-lookups.outputs.builder-image }}
steps:
- uses: actions/checkout@v4
# TODO: Setup a cache for npm so it could install faster
# follow actions/setup-node@v4 techniques
- name: Verify package-lock.json
run: ./scripts/verify_lock.mjs
- name: Install
run: |
npm version
npm clean-install --ignore-scripts
- name: Lint sources
run: npm run lint
- name: Build
run: npm run build
- name: Test
run: npm run test -- --coverage --watchAll=false
- name: Upload to codecov (client)
if: ${{ github.event.pull_request }}
uses: codecov/codecov-action@v4
with:
flags: client
directory: ./client/coverage
- name: Upload to codecov (server)
if: ${{ github.event.pull_request }}
uses: codecov/codecov-action@v4
with:
flags: server
directory: ./server/coverage
#
# Based on:
# - image-build.yaml
# - konveyor/release-tools/.github/workflows/build-push-images.yaml@main
#
# Only test the image build, no push to quay is required.
#
image-build-test:
runs-on: ubuntu-latest
needs: unit-test-lookups
if: ${{ needs.unit-test-lookups.outputs.test-image-build }}
strategy:
fail-fast: true
matrix:
architecture:
- amd64
- arm64
steps:
- name: Checkout merge commit for PR${{ github.event.pull_request.number }}
uses: actions/checkout@v4
- name: Test build image on ${{ matrix.architecture }}
id: test-build
uses: redhat-actions/buildah-build@main
with:
image: "tackle2-ui"
tags: PR${{ github.event.pull_request.number }}-${{ matrix.architecture }}
extra-args: "--no-cache --rm --ulimit nofile=4096:4096"
archs: ${{ matrix.architecture }}
labels: ""
containerfiles: "./Dockerfile"
context: "."