Refactored CI workflows: removed auto-tag.yml, merged tagging logic into build.yml. Added app version management in Dockerfile and pom.xml.

This commit is contained in:
Jan 2025-11-27 17:26:20 +01:00
parent f3c5e78ffa
commit c3ea8d14a1
3 changed files with 85 additions and 17 deletions

View file

@ -1,12 +1,10 @@
name: Build and Push Docker Image
name: Build, Tag and Push Docker Image
on:
push:
branches:
- main
- dev
tags:
- 'v*'
pull_request:
branches:
- main
@ -18,6 +16,61 @@ jobs:
steps:
- name: Checkout code
uses: actions/checkout@v4
with:
fetch-depth: 0
- name: Determine version and create tag (main only)
id: version
run: |
if [ "${{ gitea.ref_name }}" = "main" ]; then
# Hole letzten Tag
LATEST_TAG=$(git tag -l "v*" --sort=-v:refname | head -n 1)
if [ -z "$LATEST_TAG" ]; then
NEW_TAG="v1.0.0"
BUMP="minor"
else
VERSION=${LATEST_TAG#v}
MAJOR=$(echo $VERSION | cut -d. -f1)
MINOR=$(echo $VERSION | cut -d. -f2)
PATCH=$(echo $VERSION | cut -d. -f3)
COMMITS=$(git log ${LATEST_TAG}..HEAD --pretty=format:"%s" 2>/dev/null || echo "")
if [ -z "$COMMITS" ]; then
echo "Keine neuen Commits seit ${LATEST_TAG}"
echo "skip=true" >> $GITHUB_OUTPUT
echo "version=${VERSION}" >> $GITHUB_OUTPUT
exit 0
fi
if echo "$COMMITS" | grep -qiE "^BREAKING CHANGE:|^[^:]+!:|breaking:|major:"; then
MAJOR=$((MAJOR + 1)); MINOR=0; PATCH=0; BUMP="major"
elif echo "$COMMITS" | grep -qiE "^feat:|^feature:|minor:"; then
MINOR=$((MINOR + 1)); PATCH=0; BUMP="minor"
else
PATCH=$((PATCH + 1)); BUMP="patch"
fi
NEW_TAG="v${MAJOR}.${MINOR}.${PATCH}"
fi
# Prüfe ob Tag bereits existiert
if git rev-parse "$NEW_TAG" >/dev/null 2>&1; then
echo "Tag ${NEW_TAG} existiert bereits"
echo "skip=true" >> $GITHUB_OUTPUT
echo "version=${NEW_TAG#v}" >> $GITHUB_OUTPUT
else
echo "Erstelle neues Tag: ${NEW_TAG} (${BUMP})"
echo "new_tag=${NEW_TAG}" >> $GITHUB_OUTPUT
echo "version=${NEW_TAG#v}" >> $GITHUB_OUTPUT
echo "skip=false" >> $GITHUB_OUTPUT
fi
else
# Dev branch: snapshot version
echo "version=dev-${{ gitea.sha }}" >> $GITHUB_OUTPUT
echo "skip=true" >> $GITHUB_OUTPUT
fi
- name: Login to Gitea Container Registry
run: |
@ -27,8 +80,8 @@ jobs:
id: tags
run: |
IMAGE_BASE="git.avatic.de/lcc_public/lcc"
TAGS=""
VERSION="${{ steps.version.outputs.version }}"
TAGS="-t ${IMAGE_BASE}:${VERSION}"
TAGS="${TAGS} -t ${IMAGE_BASE}:${{ gitea.sha }}"
if [ "${{ gitea.ref_name }}" = "main" ]; then
@ -38,11 +91,6 @@ jobs:
TAGS="${TAGS} -t ${IMAGE_BASE}:dev"
fi
if [[ "${{ gitea.ref }}" == refs/tags/* ]]; then
VERSION="${{ gitea.ref_name }}"
TAGS="${TAGS} -t ${IMAGE_BASE}:${VERSION}"
fi
echo "tags=${TAGS}" >> $GITHUB_OUTPUT
echo "image_base=${IMAGE_BASE}" >> $GITHUB_OUTPUT
@ -50,13 +98,16 @@ jobs:
run: |
docker build \
--build-arg BUILDKIT_INLINE_CACHE=1 \
--build-arg APP_VERSION=${{ steps.version.outputs.version }} \
${{ steps.tags.outputs.tags }} \
.
- name: Push Docker images
run: |
IMAGE_BASE="${{ steps.tags.outputs.image_base }}"
VERSION="${{ steps.version.outputs.version }}"
docker push ${IMAGE_BASE}:${VERSION}
docker push ${IMAGE_BASE}:${{ gitea.sha }}
if [ "${{ gitea.ref_name }}" = "main" ]; then
@ -66,12 +117,16 @@ jobs:
docker push ${IMAGE_BASE}:dev
fi
if [[ "${{ gitea.ref }}" == refs/tags/* ]]; then
docker push ${IMAGE_BASE}:${{ gitea.ref_name }}
fi
- name: Create and push git tag
if: gitea.ref_name == 'main' && steps.version.outputs.skip != 'true' && steps.version.outputs.new_tag != ''
run: |
git config user.name "Gitea Actions"
git config user.email "actions@gitea.local"
git tag -a ${{ steps.version.outputs.new_tag }} -m "Release ${{ steps.version.outputs.new_tag }}"
git push origin ${{ steps.version.outputs.new_tag }}
- name: Deploy to Docker
if: github.event_name == 'push' && (github.ref_name == 'main' || github.ref_name == 'dev')
if: gitea.event_name == 'push' && (gitea.ref_name == 'main' || gitea.ref_name == 'dev')
run: |
mkdir -p ~/.ssh
echo "${{ secrets.DEPLOY_KEY }}" > ~/.ssh/deploy_key

View file

@ -7,14 +7,22 @@ RUN npm run build
FROM maven:3.9-eclipse-temurin-23 AS backend-build
WORKDIR /app
ARG APP_VERSION=0.0.1-SNAPSHOT
COPY pom.xml ./
COPY src ./src
# copy frontend
COPY --from=frontend-build /app/frontend/dist ./src/main/resources/static
RUN mvn clean package -DskipTests
RUN mvn versions:set -DnewVersion=${APP_VERSION} -DgenerateBackupPoms=false && \
mvn clean package -DskipTests
FROM eclipse-temurin:23-jre-alpine
WORKDIR /app
ARG APP_VERSION=0.0.1-SNAPSHOT
ENV APP_VERSION=${APP_VERSION}
LABEL version="${APP_VERSION}"
COPY --from=backend-build /app/target/*.jar app.jar
EXPOSE 8080
ENTRYPOINT ["java", "-jar", "app.jar"]

View file

@ -209,6 +209,11 @@
<build>
<plugins>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>versions-maven-plugin</artifactId>
<version>2.18.0</version>
</plugin>
<plugin>
<groupId>org.jvnet.jaxb</groupId>
<artifactId>jaxb-maven-plugin</artifactId>