name: build image on: push: branches: - main jobs: release_tag: runs-on: ubuntu-latest outputs: release: ${{ steps.create_release.outputs.RELEASE }} steps: - name: Checkout uses: actions/checkout@v4 - name: Get latest release and create new release id: create_release shell: bash run: | # Get latest release. latest_release=$(curl -s https://git.smail.koeln/api/v1/repos/homelab/docker-ownDynDNS-netcup/releases/latest | jq -r .tag_name) # Cut release into year, month and counter. year=$(echo $latest_release | awk -F '.' '//{print $1}') month=$(echo $latest_release | awk -F '.' '//{print $2}') counter=$(echo $latest_release | awk -F '.' '//{print $3}') # increase the counter, if the release is from the same year and month if [[ $(date +'%Y') == $year ]] && [[ $(date +'%m') == $month ]]; then counter=$(($counter + 1)); # else reset counter else counter=0; fi # Create new_release=$(date +'%Y').$(date +'%m').$counter echo "RELEASE=$new_release" >> "$GITHUB_OUTPUT" echo "Release $new_release successfully set" build: runs-on: ubuntu-latest needs: release_tag env: RELEASE: ${{ needs.release_tag.outputs.release }} steps: - name: Checkout uses: actions/checkout@v4 - name: Login to Docker Hub uses: docker/login-action@v3 with: username: ${{ secrets.DOCKER_USER }} password: ${{ secrets.DOCKER_ACCESS_TOKEN }} - name: Set up QEMU uses: docker/setup-qemu-action@v3 - name: Set up Docker Buildx uses: docker/setup-buildx-action@v3 with: endpoint: tcp://forgejo-docker-in-docker-1:2375 - name: Build and push uses: docker/build-push-action@v6 with: context: ./docker-build/ file: ./docker-build/Dockerfile platforms: linux/amd64,linux/arm64,linux/arm/v7 push: true cleanup: true tags: | ${{ secrets.DOCKER_USER }}/docker-owndyndns-netcup:latest ${{ secrets.DOCKER_USER }}/docker-owndyndns-netcup:${{ needs.release_tag.outputs.release }} publish_release: needs: [release_tag, build] runs-on: ubuntu-latest env: NEW_RELEASE: ${{ needs.release_tag.outputs.release }} GH_TOKEN: "${{ secrets.RENOVATE_TOKEN }}" steps: - name: Checkout uses: actions/checkout@v4 - name: Create new release shell: bash run: | # Get latest release "created at" timestemp latest_release_time=$(date -d "$(curl -s https://git.smail.koeln/api/v1/repos/homelab/docker-ownDynDNS-netcup/releases/latest | jq -r .created_at)") echo "Last release from $latest_release_time" # Get last 50 commits curl -s "https://git.smail.koeln/api/v1/repos/homelab/docker-ownDynDNS-netcup/commits?limit=50" > /tmp/last_50_commits.json # Count commits (max. 50) between now and the latest release i=0 fin=0 while [[ $fin == 0 ]]; do commit_time=$(date --date="$(< /tmp/last_50_commits.json jq -r --arg i "$i" '.[$i|tonumber] | .created' )"); if [[ $(date -d "$latest_release_time" +%s) -le $(date -d "$commit_time" +%s) ]]; then echo "$i $commit_time" i=$((i + 1)) else fin=1; fi done # Generate list of commit messages since latest release for release message j=0 message_list="" while [[ "$j" != "$i" ]]; do message=$(< /tmp/last_50_commits.json jq -r --arg j "$j" '.[$j|tonumber] | .commit.message') echo "$j $message" message_newline="${message}\n\"" message_list="$message_list* $message_newline" j=$((j + 1)) done # Generate release message datetime=$(env TZ=Europe/Berlin date "+%A, %d.%m.%Y at %R") body="Automatically created on $datetime by forgejo action \\n\\n $i commit(s) since last relase:\\n\\n$(echo $message_list | sed 's/"//g' | sed 's/README.md docker-build docker-compose.yaml example.config renovate.json/*/g')" echo "$body" # Create release curl -d "{\"body\": \"$body\", \"name\": \"$NEW_RELEASE\", \"tag_name\": \"$NEW_RELEASE\", \"target_commitish\": \"main\" }" https://git.smail.koeln/api/v1/repos/homelab/docker-ownDynDNS-netcup/releases -H "Authorization: token $GH_TOKEN" -H "Content-Type: application/json"