mirror of
https://github.com/ManiMatter/decluttarr.git
synced 2026-04-18 01:53:58 +02:00
146 lines
4.3 KiB
YAML
146 lines
4.3 KiB
YAML
name: Test, Build, Deploy
|
|
|
|
on:
|
|
push:
|
|
branches:
|
|
- '*'
|
|
paths:
|
|
- 'src/**'
|
|
pull_request:
|
|
branches:
|
|
- '*'
|
|
paths:
|
|
- 'src/**'
|
|
workflow_dispatch:
|
|
create:
|
|
branches:
|
|
- '*'
|
|
|
|
jobs:
|
|
validate-branch-name:
|
|
runs-on: ubuntu-latest
|
|
outputs:
|
|
valid_branch_name: ${{ steps.validate.outputs.valid_branch_name }}
|
|
steps:
|
|
- name: Validate Branch Name
|
|
id: validate
|
|
run: |
|
|
BRANCH_NAME="${{ github.ref_name }}"
|
|
if [[ "$BRANCH_NAME" =~ ^v[0-9]+\.[0-9]+\.[0-9]+$ ]]; then
|
|
echo "::error::Branch name '$BRANCH_NAME' is not allowed. Branch names using versioning names like 'v1.2.3' are prohibited."
|
|
echo "valid_branch_name=false" >> $GITHUB_OUTPUT
|
|
exit 1
|
|
else
|
|
echo "Branch name '$BRANCH_NAME' is valid."
|
|
echo "valid_branch_name=true" >> $GITHUB_OUTPUT
|
|
fi
|
|
|
|
unit-tests:
|
|
needs: validate-branch-name
|
|
if: needs.validate-branch-name.outputs.valid_branch_name == 'true'
|
|
runs-on: ubuntu-latest
|
|
steps:
|
|
- uses: actions/checkout@v4
|
|
- name: Set up Python
|
|
uses: actions/setup-python@v4
|
|
with:
|
|
python-version: '3.10.13'
|
|
- name: Install testing dependencies
|
|
run: |
|
|
python -m pip install --upgrade pip
|
|
pip install -r docker/requirements.txt
|
|
- name: Run unit tests
|
|
run: |
|
|
python3 -m pytest -o log_cli=false
|
|
|
|
build:
|
|
needs: unit-tests
|
|
runs-on: ubuntu-latest
|
|
if: github.event_name == 'push'
|
|
steps:
|
|
- uses: actions/checkout@v4
|
|
with:
|
|
fetch-depth: '0'
|
|
|
|
- name: Bump version and push tag
|
|
if: ${{ github.ref_name == 'latest' }}
|
|
id: setversion
|
|
uses: anothrNick/github-tag-action@1.36.0
|
|
env:
|
|
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
|
WITH_V: true
|
|
RELEASE_BRANCHES: latest
|
|
|
|
- name: Set up QEMU
|
|
uses: docker/setup-qemu-action@v3
|
|
|
|
- name: Set up Docker Buildx
|
|
uses: docker/setup-buildx-action@v3
|
|
|
|
- name: Log in to GitHub Container Registry
|
|
uses: docker/login-action@v1
|
|
with:
|
|
registry: ghcr.io
|
|
username: ${{ github.actor }}
|
|
password: ${{ secrets.GITHUB_TOKEN }}
|
|
|
|
- name: Store short Commit ID in env variable
|
|
id: vars
|
|
run: |
|
|
calculatedSha=$(git rev-parse --short ${{ github.sha }})
|
|
echo "SHORT_COMMIT_ID=$calculatedSha" >> $GITHUB_ENV
|
|
|
|
- name: Determine Docker image tag
|
|
id: determine_tag
|
|
run: |
|
|
BRANCH_NAME="${{ github.ref_name }}"
|
|
if [[ "$BRANCH_NAME" == "dev" ]]; then
|
|
IMAGE_TAG="dev"
|
|
elif [[ "$BRANCH_NAME" == "latest" ]]; then
|
|
IMAGE_TAG=${{ steps.setversion.outputs.new_tag }}
|
|
else
|
|
IMAGE_TAG=$BRANCH_NAME
|
|
fi
|
|
# Convert IMAGE_TAG to lowercase
|
|
IMAGE_TAG=$(echo $IMAGE_TAG | tr '[:upper:]' '[:lower:]')
|
|
echo "IMAGE_TAG=$IMAGE_TAG" >> $GITHUB_ENV
|
|
|
|
# Convert repository owner to lowercase
|
|
REPO_OWNER=$(echo ${{ github.repository_owner }} | tr '[:upper:]' '[:lower:]')
|
|
echo "REPO_OWNER=$REPO_OWNER" >> $GITHUB_ENV
|
|
|
|
- name: Build, Tag, and Push Docker Image
|
|
env:
|
|
IMAGE_NAME: ghcr.io/${{ env.REPO_OWNER }}/decluttarr
|
|
IMAGE_TAG: ${{ env.IMAGE_TAG }}
|
|
run: |
|
|
BRANCH_NAME="${{ github.ref_name }}"
|
|
TAG_LATEST=""
|
|
if [[ "$BRANCH_NAME" == "latest" ]]; then
|
|
TAG_LATEST="-t $IMAGE_NAME:latest"
|
|
fi
|
|
|
|
docker buildx build \
|
|
--platform linux/amd64,linux/arm64 -f docker/Dockerfile . \
|
|
--progress plain \
|
|
-t $IMAGE_NAME:$IMAGE_TAG \
|
|
$TAG_LATEST \
|
|
--label com.decluttarr.version=$IMAGE_TAG \
|
|
--label com.decluttarr.commit=$SHORT_COMMIT_ID \
|
|
--build-arg IMAGE_TAG=$IMAGE_TAG \
|
|
--build-arg SHORT_COMMIT_ID=$SHORT_COMMIT_ID \
|
|
--push
|
|
|
|
docker-image-clean-up:
|
|
needs: build
|
|
runs-on: ubuntu-latest
|
|
steps:
|
|
- name: Clean up Docker images
|
|
uses: dataaxiom/ghcr-cleanup-action@v1.0.8
|
|
with:
|
|
exclude-tags: dev
|
|
delete-untagged: true
|
|
delete-ghost-images: true
|
|
delete-partial-images: true
|
|
token: ${{ secrets.GITHUB_TOKEN }}
|