11 PROJECT_URL: yosql.projects.metio.wtf
15 runs-on: ubuntu-latest
17 commit_count: ${{ steps.commits.outputs.count }}
18 release_version: ${{ steps.release.outputs.version }}
19 previous_version: ${{ steps.previous.outputs.version }}
20 changelog: ${{ steps.changelog.outputs.content }}
21 release_url: ${{ steps.create_release.outputs.upload_url }}
24 name: Clone Git Repository
25 uses: actions/checkout@v2.4.0
27 fetch-depth: 0 # required in order to get all tags
30 run: echo "::set-output name=count::$(git rev-list --count HEAD --since='last Wednesday' -- yosql-codegen yosql-converters yosql-dao yosql-internals yosql-logging yosql-models yosql-testing yosql-tooling)"
32 name: Create Release Version
33 if: steps.commits.outputs.count > 0
34 run: echo "::set-output name=version::$(date +'%Y.%-m.%-d')"
36 name: Get Last Release
37 if: steps.commits.outputs.count > 0
38 run: echo "::set-output name=version::$(git describe --abbrev=0 --tags)"
39 - id: generate_changelog
40 name: Generate Changelog
41 if: steps.commits.outputs.count > 0
42 uses: heinrichreimer/github-changelog-generator-action@v2.3
44 token: ${{ secrets.GITHUB_TOKEN }}
50 filterByMilestone: false
51 futureRelease: ${{ steps.release.outputs.version }}
52 sinceTag: ${{ steps.previous.outputs.version }}
53 stripGeneratorNotice: true
55 - name: Check Changelog Existence
57 uses: andstor/file-existence-action@v1.0.1
60 - name: Create Empty Changelog
62 uses: 1arp/create-a-file-action@0.2
63 if: steps.check_changelog.outputs.files_exists == 'false'
67 no user facing changes
68 - name: Read Changelog
70 uses: juliangruber/read-file-action@v1
75 if: steps.commits.outputs.count > 0
76 uses: actions/create-release@v1.1.4
78 GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
80 tag_name: ${{ steps.release.outputs.version }}
81 release_name: ${{ steps.release.outputs.version }}
86 Write more SQL! Take a look at the [website](https://${{ env.PROJECT_URL }}/) for detailed information. **This release requires at least Java ${{ env.JAVA_VERSION }}** at build time.
88 ${{ steps.changelog.outputs.content }}
90 name: Deploy Artifacts
91 runs-on: ubuntu-latest
95 name: Clone Git Repository
96 uses: actions/checkout@v2.4.0
97 if: needs.prepare.outputs.commit_count > 0
100 uses: actions/setup-java@v2
101 if: needs.prepare.outputs.commit_count > 0
103 java-version: ${{ env.JAVA_VERSION }}
104 java-package: ${{ env.JAVA_PACKAGE }}
105 architecture: ${{ env.JAVA_ARCH }}
106 distribution: ${{ env.JAVA_DISTRO }}
108 server-username: MAVEN_CENTRAL_USERNAME
109 server-password: MAVEN_CENTRAL_TOKEN
111 name: Cache Maven Repository
112 uses: actions/cache@v2.1.7
113 if: needs.prepare.outputs.commit_count > 0
115 path: ~/.m2/repository
116 key: ${{ runner.os }}-maven-${{ hashFiles('**/pom.xml') }}
118 ${{ runner.os }}-maven-
121 run: echo "${{ secrets.GPG_SECRET_KEY_BASE64 }}" | base64 --decode > $GITHUB_WORKSPACE/signing.key.asc
122 - name: Set release version
123 run: mvn --batch-mode versions:set -DnewVersion=${{ needs.prepare.outputs.release_version }} -DgenerateBackupPoms=false
124 if: needs.prepare.outputs.commit_count > 0
126 name: Deploy Maven Tooling
127 run: 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" mvn --batch-mode --activate-profiles release --projects yosql-tooling/yosql-tooling-maven --also-make install deploy -Dpgp.secretkey=keyfile:$GITHUB_WORKSPACE/signing.key.asc -Dpgp.passphrase=literal:${{ secrets.GPG_SECRET_KEY_PASSWORD }}
128 if: needs.prepare.outputs.commit_count > 0
130 MAVEN_CENTRAL_USERNAME: ${{ secrets.MAVEN_CENTRAL_USERNAME }}
131 MAVEN_CENTRAL_TOKEN: ${{ secrets.MAVEN_CENTRAL_TOKEN }}
133 name: Build Gradle Tooling
134 run: cd ./yosql-examples/yosql-examples-gradle/ && ./gradlew build -Pversion=${{ needs.prepare.outputs.release_version }}
135 if: needs.prepare.outputs.commit_count > 0
137 name: Deploy Gradle Tooling
138 run: cd ./yosql-tooling/yosql-tooling-gradle/ && ./gradlew publishPlugins -Pversion=${{ needs.prepare.outputs.release_version }} -Pgradle.publish.key=${{ secrets.GRADLE_PUBLISH_KEY }} -Pgradle.publish.secret=${{ secrets.GRADLE_PUBLISH_SECRET }}
139 if: needs.prepare.outputs.commit_count > 0
142 runs-on: ubuntu-latest
143 needs: [prepare, deploy]
146 benchmark: [codegen, jdbc]
149 name: Clone Git Repository
150 uses: actions/checkout@v2.4.0
151 if: needs.prepare.outputs.commit_count > 0
154 uses: actions/setup-java@v2
155 if: needs.prepare.outputs.commit_count > 0
157 java-version: ${{ env.JAVA_VERSION }}
158 java-package: ${{ env.JAVA_PACKAGE }}
159 architecture: ${{ env.JAVA_ARCH }}
160 distribution: ${{ env.JAVA_DISTRO }}
162 name: Cache Maven Repository
163 uses: actions/cache@v2.1.7
164 if: needs.prepare.outputs.commit_count > 0
166 path: ~/.m2/repository
167 key: ${{ runner.os }}-maven-${{ hashFiles('**/pom.xml') }}
169 ${{ runner.os }}-maven-
171 name: Run Benchmark [${{ matrix.benchmark }}]
172 run: mvn --batch-mode --projects yosql-benchmarks/yosql-benchmarks-${{ matrix.benchmark }} --also-make --activate-profiles benchmarks verify -Dorg.slf4j.simpleLogger.log.yosql=warn -DskipTests 2>&1 1> build.log
173 if: needs.prepare.outputs.commit_count > 0
174 - id: upload-benchmark
175 name: Upload Benchmark Results
176 uses: actions/upload-artifact@v2
177 if: needs.prepare.outputs.commit_count > 0
179 name: benchmark-${{ matrix.benchmark }}
180 path: ./yosql-benchmarks/yosql-benchmarks-${{ matrix.benchmark }}/target/benchmark/yosql-benchmarks-${{ matrix.benchmark }}.json
183 runs-on: ubuntu-latest
184 needs: [prepare, benchmarks]
187 name: Clone Git Repository
188 uses: actions/checkout@v2.4.0
189 if: needs.prepare.outputs.commit_count > 0
192 uses: actions/setup-java@v2
193 if: needs.prepare.outputs.commit_count > 0
195 java-version: ${{ env.JAVA_VERSION }}
196 java-package: ${{ env.JAVA_PACKAGE }}
197 architecture: ${{ env.JAVA_ARCH }}
198 distribution: ${{ env.JAVA_DISTRO }}
200 name: Cache Maven Repository
201 uses: actions/cache@v2.1.7
202 if: needs.prepare.outputs.commit_count > 0
204 path: ~/.m2/repository
205 key: ${{ runner.os }}-maven-${{ hashFiles('**/pom.xml') }}
207 ${{ runner.os }}-maven-
209 name: Download Benchmarks Results
210 uses: actions/download-artifact@v2
211 if: needs.prepare.outputs.commit_count > 0
212 - name: Set release version
213 run: mvn --batch-mode versions:set -DnewVersion=${{ needs.prepare.outputs.release_version }} -DgenerateBackupPoms=false
214 if: needs.prepare.outputs.commit_count > 0
215 - id: create-documentation
216 name: Create Documentation
217 run: mvn --batch-mode --projects yosql-website --also-make install -DskipTests
218 if: needs.prepare.outputs.commit_count > 0
219 - id: copy-codegen-results
220 name: Copy Codegen Results
221 run: cp --force ./benchmark-codegen/yosql-benchmarks-codegen.json ./yosql-website/content/benchmarks/results/yosql-benchmarks-codegen-${{ needs.prepare.outputs.release_version }}.json
222 if: needs.prepare.outputs.commit_count > 0
223 - id: replace-codegen-results
224 name: Replace CURRENT Codegen Results
225 run: cp --force ./benchmark-codegen/yosql-benchmarks-codegen.json ./yosql-website/content/benchmarks/results/yosql-benchmarks-codegen-CURRENT.json
226 if: needs.prepare.outputs.commit_count > 0
227 - id: copy-jdbc-results
228 name: Copy JDBC Results
229 run: cp --force ./benchmark-jdbc/yosql-benchmarks-jdbc.json ./yosql-website/content/benchmarks/results/yosql-benchmarks-jdbc-${{ needs.prepare.outputs.release_version }}.json
230 if: needs.prepare.outputs.commit_count > 0
231 - id: replace-jdbc-results
232 name: Replace CURRENT JDBC Results
233 run: cp --force ./benchmark-jdbc/yosql-benchmarks-jdbc.json ./yosql-website/content/benchmarks/results/yosql-benchmarks-jdbc-CURRENT.json
234 if: needs.prepare.outputs.commit_count > 0
237 uses: stefanzweifel/git-auto-commit-action@v4.13.1
238 if: needs.prepare.outputs.commit_count > 0
240 commit_message: Update website data for ${{ needs.prepare.outputs.release_version }}
241 file_pattern: yosql-website/*.json yosql-website/*.md
243 name: Send Announcements
244 needs: [prepare, website]
245 runs-on: ubuntu-latest
249 uses: dawidd6/action-send-mail@v3.6.0
250 if: needs.prepare.outputs.commit_count > 0
252 server_address: ${{ secrets.MAIL_SERVER }}
253 server_port: ${{ secrets.MAIL_PORT }}
254 username: ${{ secrets.MAIL_USERNAME }}
255 password: ${{ secrets.MAIL_PASSWORD }}
256 to: ${{ secrets.MAIL_TO }}
257 from: ${{ secrets.MAIL_SENDER }}
258 subject: release ${{ needs.prepare.outputs.release_version }}
259 body: See https://github.com/metio/yosql/releases/tag/${{ needs.prepare.outputs.release_version }} for details.
261 name: Send Matrix Message
262 uses: s3krit/matrix-message-action@v0.0.3
263 if: needs.prepare.outputs.commit_count > 0
265 access_token: ${{ secrets.MATRIX_ACCESS_TOKEN }}
266 room_id: ${{ secrets.MATRIX_ROOM_ID }}
267 server: ${{ secrets.MATRIX_SERVER }}
268 message: release ${{ needs.prepare.outputs.release_version }} published - see https://github.com/metio/yosql/releases/tag/${{ needs.prepare.outputs.release_version }} for details