Merge branch 'feature/yearly-report2' into test-prod #1676
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
--- | |
name: Create packages | |
on: | |
push: | |
paths: | |
- "frontend/**" # Frontend changes | |
- "app/**" # Main app changes | |
- "r-api/**" # R API changes | |
- "docker/**" # Docker related changes | |
- ".docker/**" # Docker config changes | |
- "docker-compose.yml" # Docker compose changes | |
- ".github/workflows/create_packages.yml" # Workflow changes | |
jobs: | |
changes: | |
runs-on: ubuntu-latest | |
outputs: | |
frontend: ${{ steps.filter.outputs.frontend }} | |
main: ${{ steps.filter.outputs.main }} | |
r-api: ${{ steps.filter.outputs.r-api }} | |
steps: | |
- uses: actions/checkout@v3 | |
- uses: dorny/paths-filter@v2 | |
id: filter | |
with: | |
filters: | | |
frontend: | |
- 'frontend/**' | |
- 'docker/frontend.Dockerfile' | |
main: | |
- 'app/**' | |
- 'docker/main.Dockerfile' | |
- '.docker/main' | |
r-api: | |
- 'r-api/**' | |
- 'docker/r-api.Dockerfile' | |
build: | |
needs: changes | |
runs-on: ubuntu-latest | |
steps: | |
- name: Checkout | |
uses: actions/checkout@v3 | |
- name: Update tags.json version | |
uses: jossef/[email protected] | |
with: | |
file: frontend/src/tags.json | |
field: gitBranch | |
value: ${{github.ref_name}} | |
- name: Login to GitHub Container Registry | |
uses: docker/login-action@v2 | |
with: | |
registry: ghcr.io | |
username: ${{ secrets.GHCR_USER }} | |
password: ${{ secrets.GHCR_PAT }} | |
- name: Prepare .docker files | |
run: | | |
for p in .docker/*.default ; do | |
mv "$p" "${p%.default}" | |
done | |
# Pull existing images for layer caching | |
- name: Pull existing images | |
run: | | |
# Sanitize branch name for docker tags | |
branch="${{ github.ref_name }}" | |
safe_branch="${branch//\//-}" # Replace / with - | |
for image in herdbook_r-api herdbook_main herdbook_frontend; do | |
docker pull "ghcr.io/nbisweden/$image:latest" || true | |
docker pull "ghcr.io/nbisweden/$image:$safe_branch" || true | |
done | |
# Build images using docker compose | |
- name: Build images | |
env: | |
DOCKER_BUILDKIT: 1 | |
COMPOSE_DOCKER_CLI_BUILD: 1 | |
run: | | |
# Only build changed images and their dependents | |
if [[ "${{ needs.changes.outputs.frontend }}" == "true" ]]; then | |
docker compose build --build-arg BUILDKIT_INLINE_CACHE=1 herdbook-frontend main | |
elif [[ "${{ needs.changes.outputs.main }}" == "true" ]]; then | |
docker compose build --build-arg BUILDKIT_INLINE_CACHE=1 main | |
fi | |
if [[ "${{ needs.changes.outputs.r-api }}" == "true" ]]; then | |
docker compose build --build-arg BUILDKIT_INLINE_CACHE=1 r-api | |
fi | |
# Push images | |
- name: Push images | |
run: | | |
# Sanitize branch name for docker tags | |
branch="${{ github.ref_name }}" | |
safe_branch="${branch//\//-}" # Replace / with - | |
# Function to push an image if it was built | |
push_if_built() { | |
local image="$1" | |
if docker image inspect "$image:latest" >/dev/null 2>&1; then | |
docker tag "$image:latest" "ghcr.io/nbisweden/$image:$safe_branch" | |
docker push "ghcr.io/nbisweden/$image:$safe_branch" | |
if [[ "$branch" == "main" || "$branch" == "master" || "$branch" == "develop" ]]; then | |
docker tag "$image:latest" "ghcr.io/nbisweden/$image:latest" | |
docker push "ghcr.io/nbisweden/$image:latest" | |
fi | |
fi | |
} | |
# Push only the images that were built | |
if [[ "${{ needs.changes.outputs.frontend }}" == "true" ]]; then | |
push_if_built "herdbook_frontend" | |
fi | |
if [[ "${{ needs.changes.outputs.main }}" == "true" || "${{ needs.changes.outputs.frontend }}" == "true" ]]; then | |
push_if_built "herdbook_main" | |
fi | |
if [[ "${{ needs.changes.outputs.r-api }}" == "true" ]]; then | |
push_if_built "herdbook_r-api" | |
fi |