name: release on: push: tags: - 'v*.*.*' # Triggert auf Semantic Versioning Tags (v1.0.0, v2.1.3, etc.) permissions: contents: write packages: write jobs: release: runs-on: ubuntu-22.04 steps: - name: Checkout code uses: actions/checkout@v4 with: submodules: recursive fetch-depth: 0 - name: Load versions from .env.versions id: versions run: | set -a source .env.versions set +a echo "node_version=${NODE_VERSION}" >> "$GITHUB_OUTPUT" echo "go_version=${GO_VERSION}" >> "$GITHUB_OUTPUT" echo "hugo_version=${HUGO_VERSION}" >> "$GITHUB_OUTPUT" echo "Node: ${NODE_VERSION}" echo "Go: ${GO_VERSION}" echo "Hugo: ${HUGO_VERSION}" - name: Extract version from tag id: version run: | VERSION=${GITHUB_REF#refs/tags/v} echo "version=${VERSION}" >> "$GITHUB_OUTPUT" echo "Version: ${VERSION}" - name: Repository meta id: repository run: | registry=${{ github.server_url }} registry=${registry##http*://} echo "registry=${registry}" >> "$GITHUB_OUTPUT" echo "registry=${registry}" repository="$(echo "${{ github.repository }}" | tr '[:upper:]' '[:lower:]')" echo "repository=${repository}" >> "$GITHUB_OUTPUT" echo "repository=${repository}" - name: Docker meta uses: docker/metadata-action@v5 id: docker with: images: ${{ steps.repository.outputs.registry }}/${{ steps.repository.outputs.repository }} tags: | type=semver,pattern={{version}} type=semver,pattern={{major}}.{{minor}} type=semver,pattern={{major}} type=raw,value=latest - name: Login to registry uses: docker/login-action@v3 with: registry: ${{ steps.repository.outputs.registry }} username: "${{ secrets.PACKAGES_USER }}" password: "${{ secrets.PACKAGES_TOKEN }}" - name: Set up QEMU uses: docker/setup-qemu-action@v3 - name: Set up Docker Buildx uses: docker/setup-buildx-action@v3 with: buildkitd-flags: '--allow-insecure-entitlement network.host' driver-opts: network=host - name: Build and push release images uses: docker/build-push-action@v6 with: context: . push: true allow: network.host network: host platforms: linux/amd64,linux/arm64 tags: ${{ steps.docker.outputs.tags }} labels: ${{ steps.docker.outputs.labels }} build-args: | NODE_VERSION=${{ steps.versions.outputs.node_version }} GO_VERSION=${{ steps.versions.outputs.go_version }} HUGO_VERSION=${{ steps.versions.outputs.hugo_version }} - name: Generate changelog id: changelog run: | # Finde vorheriges Tag PREVIOUS_TAG=$(git describe --abbrev=0 --tags ${GITHUB_REF}^ 2>/dev/null || echo "") if [ -z "$PREVIOUS_TAG" ]; then echo "Erster Release - Changelog von Anfang an" CHANGELOG=$(git log --pretty=format:"- %s (%h)" --no-merges) else echo "Changelog seit ${PREVIOUS_TAG}" CHANGELOG=$(git log ${PREVIOUS_TAG}..${GITHUB_REF} --pretty=format:"- %s (%h)" --no-merges) fi # Schreibe in Output-Datei (multiline) { echo 'changelog<> "$GITHUB_OUTPUT" - name: Create Forgejo/Gitea Release uses: actions/forgejo-release@v2 env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} with: direction: upload release-dir: . title: "Release ${{ steps.version.outputs.version }}" tag: ${{ github.ref_name }} token: ${{ secrets.GITHUB_TOKEN }} release-notes: | # Release ${{ steps.version.outputs.version }} ## Docker Images Multi-platform images (linux/amd64, linux/arm64) sind verfügbar: ```bash docker pull ${{ steps.repository.outputs.registry }}/${{ steps.repository.outputs.repository }}:${{ steps.version.outputs.version }} docker pull ${{ steps.repository.outputs.registry }}/${{ steps.repository.outputs.repository }}:latest ``` ## Build Versions - Node.js: ${{ steps.versions.outputs.node_version }} - Go: ${{ steps.versions.outputs.go_version }} - Hugo: ${{ steps.versions.outputs.hugo_version }} ## Changes ${{ steps.changelog.outputs.changelog }}