Lucien Cartier-Tilet 08945464c1
Some checks failed
CI/CD Pipeline / build-and-publish (push) Failing after 8m13s
feat: CI/CD
2025-09-03 00:37:55 +02:00

108 lines
3.0 KiB
YAML

name: CI/CD Pipeline
on:
push:
branches:
- develop
tags:
- 'v*'
pull_request:
types: [opened, synchronize, reopened]
env:
REGISTRY: labs.phundrak.com
IMAGE_NAME: phundrak/roll-one-ring
jobs:
build-and-publish:
runs-on: ubuntu-latest
permissions:
contents: read
packages: write
steps:
- name: Checkout repository
uses: actions/checkout@v5
- name: Install Nix
uses: cachix/install-nix-action@v31.6.0
- name: Setup Cachix
uses: cachix/cachix-action@v16
with:
name: roll-one-ring
authToken: '${{ secrets.CACHIX_AUTH_TOKEN }}'
skipPush: ${{ github.event_name == 'pull_request' }}
- name: Log in to Docker Hub
uses: docker/login-action@v3
with:
registry: ${{ env.REGISTRY }}
username: ${{ secrets.DOCKERHUB_USERNAME }}
password: ${{ secrets.DOCKERHUB_TOKEN }}
- name: Get version from Cargo.toml
id: get-version
run: |
VERSION=$(nix run .#version 2>/dev/null || echo "unknown")
echo "version=$VERSION" >> $GITHUB_OUTPUT
- name: Determine tags
id: determine-tags
run: |
TAGS=""
if [[ "${{ github.event_name }}" == "push" ]]; then
if [[ "${{ github.ref }}" == "refs/heads/develop" ]]; then
# Push to develop branch
TAGS="${{ env.IMAGE_NAME }}:develop"
elif [[ "${{ github.ref }}" == refs/tags/* ]]; then
# Tag push
VERSION_TAG=${GITHUB_REF#refs/tags/}
# Remove 'v' prefix if present
VERSION_TAG=${VERSION_TAG#v}
TAGS="${{ env.IMAGE_NAME }}:latest,${{ env.IMAGE_NAME }}:${VERSION_TAG}"
fi
elif [[ "${{ github.event_name }}" == "pull_request" ]]; then
# Pull request
PR_NUMBER=${{ github.event.number }}
TAGS="${{ env.IMAGE_NAME }}:pr${PR_NUMBER}"
fi
echo "tags=$TAGS" >> $GITHUB_OUTPUT
echo "Tags to build: $TAGS"
- name: Delete homeless-shelter directory
run: |
rm -rf /homeless-shelter
- name: Build Docker image with Nix
run: |
echo "Building Docker image..."
nix build .#docker
# Load the image into Docker
docker load < result
# Get the image ID that was just loaded
IMAGE_ID=$(docker images --format "table {{.Repository}}:{{.Tag}}\t{{.ID}}" | grep "${{ env.IMAGE_NAME }}:latest" | awk '{print $2}' | head -1)
echo "Loaded image ID: $IMAGE_ID"
echo "image_id=$IMAGE_ID" >> $GITHUB_ENV
- name: Tag and push Docker image
run: |
TAGS="${{ steps.determine-tags.outputs.tags }}"
if [ -n "$TAGS" ]; then
IFS=',' read -ra TAG_ARRAY <<< "$TAGS"
for tag in "${TAG_ARRAY[@]}"; do
echo "Tagging and pushing: $tag"
docker tag ${{ env.image_id }} "$tag"
docker push "$tag"
done
fi
- name: Output image tags
run: |
echo "Built and pushed the following tags:"
echo "${{ steps.determine-tags.outputs.tags }}"