Skip to content

v0.7.0

v0.7.0 #290

Workflow file for this run

name: Build, test and push
permissions:
contents: read
packages: write
security-events: write
on:
workflow_dispatch:
schedule:
- cron: "0 3 * * 3" # Build the preview image every Wednesday at 03:00
release:
types:
- published
push:
branches:
- main
- feature/**
- fix/**
paths:
- .github/**
- docker/**
concurrency:
group: ${{ github.ref }}-publish
cancel-in-progress: true
jobs:
python:
name: Python
runs-on: ubuntu-latest
timeout-minutes: 15
env:
IMAGE_NAME: tna-python
DOCKERFILE_LOCATION: docker/tna-python
BASE_IMAGE: ghcr.io/nationalarchives/tna-python
USER_IMAGE: app
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Lint Dockerfile
uses: ./.github/actions/lint
with:
dockerfile-location: ${{ env.DOCKERFILE_LOCATION }}
- name: Test Docker image build
id: build
uses: ./.github/actions/test-build
with:
image-name: ${{ env.IMAGE_NAME }}
base-image: ${{ env.BASE_IMAGE }}
dockerfile-location: ${{ env.DOCKERFILE_LOCATION }}
user-image: ${{ env.USER_IMAGE }}
- name: Test Flask
uses: ./.github/actions/test-container
with:
application-repository: nationalarchives/flask-application-template
service: app
image: ${{ env.IMAGE_NAME }}
image-tag: ${{ steps.build.outputs.tag }}
expected-user: app
- name: Test FastAPI
uses: ./.github/actions/test-container
with:
application-repository: nationalarchives/fastapi-application-template
service: app
image: ${{ env.IMAGE_NAME }}
image-tag: ${{ steps.build.outputs.tag }}
expected-user: app
- name: Build and push Docker images
uses: ./.github/actions/push
with:
image-id: ${{ steps.build.outputs.image-id }}
image-tag: ${{ steps.build.outputs.tag }}
major-version: ${{ steps.build.outputs.major-version }}
minor-version: ${{ steps.build.outputs.minor-version }}
base-image: ${{ env.BASE_IMAGE }}
dockerfile-location: ${{ env.DOCKERFILE_LOCATION }}
user-image: ${{ env.USER_IMAGE }}
github-token: ${{ secrets.GITHUB_TOKEN }}
- name: Scan Docker image
uses: ./.github/actions/scan
with:
image-id: ${{ steps.build.outputs.image-id }}
image-tag: ${{ steps.build.outputs.tag }}
python-root:
name: Python (root)
runs-on: ubuntu-latest
timeout-minutes: 15
env:
IMAGE_NAME: tna-python-root
DOCKERFILE_LOCATION: docker/tna-python
BASE_IMAGE: ghcr.io/nationalarchives/tna-python
USER_IMAGE: root
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Lint Dockerfile
uses: ./.github/actions/lint
with:
dockerfile-location: ${{ env.DOCKERFILE_LOCATION }}
ignore-linting-rules: DL3002
- name: Test Docker image build
id: build
uses: ./.github/actions/test-build
with:
image-name: ${{ env.IMAGE_NAME }}
base-image: ${{ env.BASE_IMAGE }}
dockerfile-location: ${{ env.DOCKERFILE_LOCATION }}
user-image: ${{ env.USER_IMAGE }}
- name: Test Flask
uses: ./.github/actions/test-container
with:
application-repository: nationalarchives/flask-application-template
service: app
image: ${{ env.IMAGE_NAME }}
image-tag: ${{ steps.build.outputs.tag }}
expected-user: root
- name: Test FastAPI
uses: ./.github/actions/test-container
with:
application-repository: nationalarchives/fastapi-application-template
service: app
image: ${{ env.IMAGE_NAME }}
image-tag: ${{ steps.build.outputs.tag }}
expected-user: root
- name: Build and push Docker images
uses: ./.github/actions/push
with:
image-id: ${{ steps.build.outputs.image-id }}
image-tag: ${{ steps.build.outputs.tag }}
major-version: ${{ steps.build.outputs.major-version }}
minor-version: ${{ steps.build.outputs.minor-version }}
base-image: ${{ env.BASE_IMAGE }}
dockerfile-location: ${{ env.DOCKERFILE_LOCATION }}
user-image: ${{ env.USER_IMAGE }}
github-token: ${{ secrets.GITHUB_TOKEN }}
- name: Scan Docker image
uses: ./.github/actions/scan
with:
image-id: ${{ steps.build.outputs.image-id }}
image-tag: ${{ steps.build.outputs.tag }}
python-django:
name: Python Django
needs: python
runs-on: ubuntu-latest
timeout-minutes: 5
env:
IMAGE_NAME: tna-python-django
DOCKERFILE_LOCATION: docker/tna-python-django
BASE_IMAGE: ghcr.io/nationalarchives/tna-python
USER_IMAGE: root
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Lint Dockerfile
uses: ./.github/actions/lint
with:
dockerfile-location: ${{ env.DOCKERFILE_LOCATION }}
- name: Test Docker image build
id: build
uses: ./.github/actions/test-build
with:
image-name: ${{ env.IMAGE_NAME }}
base-image: ${{ env.BASE_IMAGE }}
dockerfile-location: ${{ env.DOCKERFILE_LOCATION }}
user-image: ${{ env.USER_IMAGE }}
- name: Test Django
uses: ./.github/actions/test-container
with:
application-repository: nationalarchives/django-application-template
service: app
image: ${{ env.IMAGE_NAME }}
image-tag: ${{ steps.build.outputs.tag }}
expected-user: app
- name: Build and push Docker images
uses: ./.github/actions/push
with:
image-id: ${{ steps.build.outputs.image-id }}
image-tag: ${{ steps.build.outputs.tag }}
major-version: ${{ steps.build.outputs.major-version }}
minor-version: ${{ steps.build.outputs.minor-version }}
base-image: ${{ env.BASE_IMAGE }}
dockerfile-location: ${{ env.DOCKERFILE_LOCATION }}
user-image: ${{ env.USER_IMAGE }}
github-token: ${{ secrets.GITHUB_TOKEN }}
- name: Scan Docker image
uses: ./.github/actions/scan
with:
image-id: ${{ steps.build.outputs.image-id }}
image-tag: ${{ steps.build.outputs.tag }}
python-django-root:
name: Python Django (root)
needs: python-root
runs-on: ubuntu-latest
timeout-minutes: 5
env:
IMAGE_NAME: tna-python-django-root
DOCKERFILE_LOCATION: docker/tna-python-django
BASE_IMAGE: ghcr.io/nationalarchives/tna-python-root
USER_IMAGE: root
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Lint Dockerfile
uses: ./.github/actions/lint
with:
dockerfile-location: ${{ env.DOCKERFILE_LOCATION }}
ignore-linting-rules: DL3002
- name: Test Docker image build
id: build
uses: ./.github/actions/test-build
with:
image-name: ${{ env.IMAGE_NAME }}
base-image: ${{ env.BASE_IMAGE }}
dockerfile-location: ${{ env.DOCKERFILE_LOCATION }}
user-image: ${{ env.USER_IMAGE }}
- name: Test Django
uses: ./.github/actions/test-container
with:
application-repository: nationalarchives/django-application-template
service: app
image: ${{ env.IMAGE_NAME }}
image-tag: ${{ steps.build.outputs.tag }}
expected-user: root
- name: Build and push Docker images
uses: ./.github/actions/push
with:
image-id: ${{ steps.build.outputs.image-id }}
image-tag: ${{ steps.build.outputs.tag }}
major-version: ${{ steps.build.outputs.major-version }}
minor-version: ${{ steps.build.outputs.minor-version }}
base-image: ${{ env.BASE_IMAGE }}
dockerfile-location: ${{ env.DOCKERFILE_LOCATION }}
user-image: ${{ env.USER_IMAGE }}
github-token: ${{ secrets.GITHUB_TOKEN }}
- name: Scan Docker image
uses: ./.github/actions/scan
with:
image-id: ${{ steps.build.outputs.image-id }}
image-tag: ${{ steps.build.outputs.tag }}
python-dev:
name: Python Dev
needs: python-root
runs-on: ubuntu-latest
timeout-minutes: 5
env:
IMAGE_NAME: tna-python-dev
DOCKERFILE_LOCATION: docker/tna-python-dev
BASE_IMAGE: ghcr.io/nationalarchives/tna-python-root
USER_IMAGE: root
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Lint Dockerfile
uses: ./.github/actions/lint
with:
dockerfile-location: ${{ env.DOCKERFILE_LOCATION }}
ignore-linting-rules: DL3002,DL3008,SC1091
- name: Test Docker image build
id: build
uses: ./.github/actions/test-build
with:
image-name: ${{ env.IMAGE_NAME }}
base-image: ${{ env.BASE_IMAGE }}
dockerfile-location: ${{ env.DOCKERFILE_LOCATION }}
user-image: ${{ env.USER_IMAGE }}
# - uses: actions/setup-node@v4
# - uses: actions/setup-python@v5
# - name: Test development formatting
# run: |
# set +e
# # Install Python linting and formatting tools
# pip install black flake8 isort
# npm i stylelint-config-standard-scss stylelint-selector-bem-pattern
# # Create directories for test files
# mkdir tests
# # Create test files for Prettier
# echo " const foo = 'bar';; const a=foo ;console.log( a) " > tests/test.js
# echo " * { color : red;text-decoration:underline} " > tests/test.css
# echo " \$colour : #ff0000; * { color : \$colour;text-decoration:underline} " > tests/test.scss
# echo " { 'foo' : 'bar'} " > tests/test.json
# # Create test files for Python
# echo "import sys " > tests/test.py
# echo "import datetime " >> tests/test.py
# echo "print( 'test' ) " >> tests/test.py
# # Run the dev container
# docker run -v ./tests:/app/tests --name test_container -it -d ${{ steps.build.outputs.image-id }}:${{ steps.build.outputs.tag }}
# # Wait for everything to be installed
# echo "Sleeping..."
# # TODO: Improve this
# sleep 30
# # Copy configuration files from container
# docker cp test_container:/home/app/.eslintrc.js .eslintrc.js
# docker cp test_container:/home/app/.flake8 .flake8
# docker cp test_container:/home/app/.isort.cfg .isort.cfg
# docker cp test_container:/home/app/.stylelintrc .stylelintrc
# # Check that Prettier finds issues
# echo "Checking Prettier..."
# npx prettier tests --check; [[ "$?" == "1" ]]
# echo "Checking stylelint..."
# npx stylelint --config .stylelintrc "tests/**/*.{css,scss}"; [[ "$?" == "1" ]]
# echo "Checking eslint..."
# npx [email protected] -c .eslintrc.js "tests"; [[ "$?" == "1" ]]
# # Check that issues are found in Python code
# echo "Checking isort..."
# isort --settings-file .isort.cfg --check tests; [[ "$?" == "1" ]]
# echo "Checking black..."
# black --check tests; [[ "$?" == "1" ]]
# echo "Checking flake8..."
# flake8 --config=.flake8 tests; [[ "$?" == "1" ]]
# set -e
# # Format the code
# echo "Formatting code..."
# docker exec test_container format
# # Check that Prettier finds no issues
# echo "Checking Prettier..."
# npx prettier tests --check
# echo "Checking stylelint..."
# npx stylelint --config .stylelintrc "tests/**/*.{css,scss}"
# echo "Checking eslint..."
# npx [email protected] -c .eslintrc.js "tests"
# # Check that no issues are found in Python code
# echo "Checking isort..."
# isort --settings-file .isort.cfg --check tests
# echo "Checking black..."
# black --check tests
# echo "Checking flake8..."
# flake8 --config=.flake8 tests
- name: Build and push Docker images
uses: ./.github/actions/push
with:
image-id: ${{ steps.build.outputs.image-id }}
image-tag: ${{ steps.build.outputs.tag }}
major-version: ${{ steps.build.outputs.major-version }}
minor-version: ${{ steps.build.outputs.minor-version }}
base-image: ${{ env.BASE_IMAGE }}
dockerfile-location: ${{ env.DOCKERFILE_LOCATION }}
user-image: ${{ env.USER_IMAGE }}
github-token: ${{ secrets.GITHUB_TOKEN }}
- name: Scan Docker image
uses: ./.github/actions/scan
with:
image-id: ${{ steps.build.outputs.image-id }}
image-tag: ${{ steps.build.outputs.tag }}