Bump actions/setup-java from 3 to 4
[storage-units.git] / .github / workflows / release.yml
blob6d27a840ca0ad1402058511d65e1e00d91af02a4
1 # SPDX-FileCopyrightText: The Storage-Units Authors
2 # SPDX-License-Identifier: 0BSD
4 name: Automated Release
5 on:
6   schedule:
7     - cron: 27 4 * * TUE
8   workflow_dispatch:
9 jobs:
10   publish:
11     runs-on: ubuntu-latest
12     permissions:
13       contents: write
14     steps:
15       - id: checkout
16         name: Checkout
17         uses: actions/checkout@v4
18         with:
19           fetch-depth: 0
20       - id: last_release
21         name: Fetch last release info
22         run: echo "tag=$(gh release view --json tagName --jq '.tagName')" >> $GITHUB_OUTPUT
23         env:
24           GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
25       - id: commits
26         name: Count Commits
27         run: echo "count=$(git rev-list --count ${{ steps.last_release.outputs.tag }}..HEAD)" >> $GITHUB_OUTPUT
28       - id: release
29         name: Create Release Version
30         if: steps.commits.outputs.count > 0
31         run: echo "version=$(date +'%Y.%-m.%-d')" >> $GITHUB_OUTPUT
32       - id: sha
33         name: Last Commit
34         if: steps.commits.outputs.count > 0
35         run: echo "sha=$(git rev-parse HEAD)" >> $GITHUB_OUTPUT
36       - id: timestamp
37         name: Build Timestamp
38         if: steps.commits.outputs.count > 0
39         run: echo "iso8601=$(date --utc --iso-8601=seconds)" >> $GITHUB_OUTPUT
40       - id: setup-java
41         name: Set up Java
42         if: steps.commits.outputs.count > 0
43         uses: actions/setup-java@v4
44         with:
45           java-version: 17
46           java-package: jdk
47           architecture: x64
48           distribution: temurin
49           server-id: ossrh
50           server-username: MAVEN_CENTRAL_USERNAME
51           server-password: MAVEN_CENTRAL_TOKEN
52       - id: cache
53         name: Cache Dependencies
54         if: steps.commits.outputs.count > 0
55         uses: actions/cache@v3
56         with:
57           path: ~/.m2/repository
58           key: ${{ runner.os }}-maven-${{ hashFiles('**/pom.xml') }}
59           restore-keys: |
60             ${{ runner.os }}-maven-
61       - id: gpg
62         name: GPG Key
63         if: steps.commits.outputs.count > 0
64         uses: timheuer/base64-to-file@v1.2
65         with:
66           fileName: signing.key.asc
67           fileDir: ${{ github.workspace}}
68           encodedString: ${{ secrets.GPG_SECRET_KEY_BASE64 }}
69       - id: pom-version
70         name: Set Release Version
71         if: steps.commits.outputs.count > 0
72         run: mvn --batch-mode --define newVersion=${{ steps.release.outputs.version }} --define generateBackupPoms=false versions:set
73       - id: deploy-maven
74         name: Deploy Maven Artifact
75         if: steps.commits.outputs.count > 0
76         run: >
77           mvn
78           --batch-mode
79           --activate-profiles release
80           --define scmTag=${{ steps.sha.outputs.sha }}
81           --define pgp.secretkey=keyfile:${{ steps.gpg.outputs.filePath }}
82           --define pgp.passphrase=literal:${{ secrets.GPG_SECRET_KEY_PASSWORD }}
83           --define project.build.outputTimestamp=${{ steps.timestamp.outputs.iso8601 }}
84           deploy
85         env:
86           MAVEN_CENTRAL_USERNAME: ${{ secrets.MAVEN_CENTRAL_USERNAME }}
87           MAVEN_CENTRAL_TOKEN: ${{ secrets.MAVEN_CENTRAL_TOKEN }}
88           MAVEN_OPTS: "--add-opens=java.base/java.util=ALL-UNNAMED --add-opens=java.base/java.lang.reflect=ALL-UNNAMED --add-opens=java.base/java.text=ALL-UNNAMED --add-opens=java.desktop/java.awt.font=ALL-UNNAMED"
89       - id: create_release
90         name: Create Release
91         if: steps.commits.outputs.count > 0
92         uses: softprops/action-gh-release@v1
93         with:
94           tag_name: ${{ steps.release.outputs.version }}
95           name: ${{ steps.release.outputs.version }}
96           token: ${{ secrets.GITHUB_TOKEN }}
97           draft: false
98           prerelease: false
99           generate_release_notes: true
100       - id: mail
101         name: Send Mail
102         if: steps.commits.outputs.count > 0
103         uses: dawidd6/action-send-mail@v3
104         with:
105           server_address: ${{ secrets.MAIL_SERVER }}
106           server_port: ${{ secrets.MAIL_PORT }}
107           username: ${{ secrets.MAIL_USERNAME }}
108           password: ${{ secrets.MAIL_PASSWORD }}
109           subject: ${{ github.event.repository.name }} version ${{ steps.release.outputs.version }} published
110           body: See ${{ steps.create_release.outputs.url }} for details.
111           to: announcements@metio.groups.io
112           from: ${{ secrets.MAIL_SENDER }}
113       - id: matrix
114         name: Send Matrix Message
115         if: steps.commits.outputs.count > 0
116         uses: s3krit/matrix-message-action@v0.0.3
117         with:
118           room_id: ${{ secrets.MATRIX_ROOM_ID }}
119           access_token: ${{ secrets.MATRIX_ACCESS_TOKEN }}
120           message: ${{ github.event.repository.name }} version [${{ steps.release.outputs.version }}](${{ steps.create_release.outputs.url }}) published
121           server: matrix.org