Deploy to Maven Central #229
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| name: Deploy to Maven Central | |
| on: | |
| push: | |
| tags: | |
| - "v[0-9]+.[0-9]+.[0-9]+" | |
| branches: | |
| # Allows you to run this workflow manually from the Actions tab | |
| workflow_dispatch: | |
| jobs: | |
| build: | |
| runs-on: ubuntu-latest | |
| steps: | |
| - name: Set up GnuPG | |
| env: | |
| GPG_EXECUTABLE: gpg | |
| GPG_SECRET_KEYS: ${{ secrets.GPG_SECRET_KEYS }} | |
| GPG_OWNERTRUST: ${{ secrets.GPG_OWNERTRUST }} | |
| run: | | |
| mkdir -m 700 ~/.gnupg/ | |
| echo 'use-agent' > ~/.gnupg/gpg.conf | |
| echo 'pinentry-mode loopback' >> ~/.gnupg/gpg.conf | |
| echo 'allow-loopback-pinentry' > ~/.gnupg/gpg-agent.conf | |
| echo $GPG_SECRET_KEYS | base64 --decode | $GPG_EXECUTABLE --yes --batch --import | |
| echo $GPG_OWNERTRUST | base64 --decode | $GPG_EXECUTABLE --yes --batch --import-ownertrust | |
| - name: Checkout Source | |
| uses: actions/checkout@v7 | |
| - name: Cache maven repository | |
| uses: actions/cache@v6 | |
| with: | |
| path: ~/.m2/repository | |
| key: ${{ runner.os }}-maven-dpl-${{ hashFiles('**/pom.xml') }} | |
| restore-keys: | | |
| ${{ runner.os }}-maven-dpl | |
| ${{ runner.os }}-maven | |
| - name: Set up JDK 21 | |
| uses: actions/setup-java@v5 | |
| with: | |
| distribution: 'temurin' | |
| java-version: 21 | |
| - name: Build with Maven | |
| run: | | |
| mvn -B -Dmaven.javadoc.skip=true install | |
| echo "Exporting Variables" | |
| export HTTP_NAME=$(mvn -pl FROST-Server.HTTP -Dexec.executable='echo' -Dexec.args='${project.build.finalName}' exec:exec -q) | |
| export MQTTP_NAME=$(mvn -pl FROST-Server.MQTTP -Dexec.executable='echo' -Dexec.args='${project.build.finalName}' exec:exec -q) | |
| export MQTT_NAME=$(mvn -pl FROST-Server.MQTT -Dexec.executable='echo' -Dexec.args='${project.build.finalName}' exec:exec -q) | |
| export MODEL_EDITOR_NAME=$(mvn -pl Tools/ModelEditor -Dexec.executable='echo' -Dexec.args='${project.build.finalName}' exec:exec -q) | |
| export MODEL_EXTRACTOR_NAME=$(mvn -pl Tools/ModelExtractor -Dexec.executable='echo' -Dexec.args='${project.build.finalName}' exec:exec -q) | |
| echo "HTTP_ARTIFACT=${HTTP_NAME}.war" >> $GITHUB_ENV | |
| echo "MQTTP_ARTIFACT=${MQTTP_NAME}.war" >> $GITHUB_ENV | |
| echo "MQTT_ARTIFACT=${MQTT_NAME}-jar-with-dependencies.jar" >> $GITHUB_ENV | |
| echo "MODEL_EDITOR_ARTIFACT=${MODEL_EDITOR_NAME}-shaded.jar" >> $GITHUB_ENV | |
| echo "MODEL_EXTRACTOR_ARTIFACT=${MODEL_EXTRACTOR_NAME}-shaded.jar" >> $GITHUB_ENV | |
| export version=$(mvn -Dexec.executable='echo' -Dexec.args='${project.version}' --non-recursive exec:exec -q) | |
| echo "DOCKER_TAG_FULL=${version}" >> $GITHUB_ENV | |
| echo "DOCKER_TAG_SHORT=${version%.*}" >> $GITHUB_ENV | |
| if [[ "$version" == *SNAPSHOT ]]; then echo "DOCKER_TAG_SHORT=${version%.*}" >> $GITHUB_ENV; fi | |
| - name: Upload MQTTP war | |
| uses: actions/upload-artifact@v7 | |
| with: | |
| path: FROST-Server.MQTTP/target/${{ env.MQTTP_ARTIFACT }} | |
| archive: false | |
| - name: Upload HTTP war | |
| uses: actions/upload-artifact@v7 | |
| with: | |
| path: FROST-Server.HTTP/target/${{ env.HTTP_ARTIFACT }} | |
| archive: false | |
| - name: Upload MQTT jar | |
| uses: actions/upload-artifact@v7 | |
| with: | |
| path: FROST-Server.MQTT/target/${{ env.MQTT_ARTIFACT }} | |
| archive: false | |
| - name: Upload ModelEditor jar | |
| uses: actions/upload-artifact@v7 | |
| with: | |
| path: Tools/ModelEditor/target/${{ env.MODEL_EDITOR_ARTIFACT }} | |
| archive: false | |
| - name: Upload ModelExtractor jar | |
| uses: actions/upload-artifact@v7 | |
| with: | |
| path: Tools/ModelExtractor/target/${{ env.MODEL_EXTRACTOR_ARTIFACT }} | |
| archive: false | |
| - name: Deploy with Maven | |
| env: | |
| OSSINDEX_TOKEN: ${{ secrets.OSSINDEX_TOKEN }} | |
| OSSINDEX_USERNAME: ${{ secrets.OSSINDEX_USERNAME }} | |
| GPG_EXECUTABLE: gpg | |
| GPG_PASSPHRASE: ${{ secrets.GPG_PASSPHRASE }} | |
| SONATYPE_USERNAME: ${{ secrets.SONATYPE_USERNAME }} | |
| SONATYPE_PASSWORD: ${{ secrets.SONATYPE_PASSWORD }} | |
| run: | | |
| mvn -B deploy -P release -DskipTests=true --settings maven-ci-settings.xml | |
| - name: Set up QEMU | |
| uses: docker/setup-qemu-action@v4 | |
| - name: Set up Docker Buildx | |
| uses: docker/setup-buildx-action@v4 | |
| - name: Login to DockerHub | |
| uses: docker/login-action@v4 | |
| with: | |
| username: ${{ secrets.DOCKER_USERNAME }} | |
| password: ${{ secrets.DOCKER_PASSWORD }} | |
| - name: Build and push - HTTP | |
| uses: docker/build-push-action@v7 | |
| with: | |
| platforms: linux/amd64,linux/arm64 | |
| context: "./FROST-Server.HTTP" | |
| push: true | |
| build-args: | | |
| ARTIFACT_FILE=${{ env.HTTP_ARTIFACT }} | |
| tags: | | |
| fraunhoferiosb/frost-server-http:${{ env.DOCKER_TAG_FULL }} | |
| fraunhoferiosb/frost-server-http:${{ env.DOCKER_TAG_SHORT }} | |
| - name: Build and push - MQTTP | |
| uses: docker/build-push-action@v7 | |
| with: | |
| platforms: linux/amd64,linux/arm64 | |
| context: "./FROST-Server.MQTTP" | |
| push: true | |
| build-args: | | |
| ARTIFACT_FILE=${{ env.MQTTP_ARTIFACT }} | |
| tags: | | |
| fraunhoferiosb/frost-server:${{ env.DOCKER_TAG_FULL }} | |
| fraunhoferiosb/frost-server:${{ env.DOCKER_TAG_SHORT }} | |
| - name: Build and push - MQTT | |
| uses: docker/build-push-action@v7 | |
| with: | |
| platforms: linux/amd64,linux/arm64 | |
| context: "./FROST-Server.MQTT" | |
| push: true | |
| build-args: | | |
| ARTIFACT_FILE=${{ env.MQTT_ARTIFACT }} | |
| tags: | | |
| fraunhoferiosb/frost-server-mqtt:${{ env.DOCKER_TAG_FULL }} | |
| fraunhoferiosb/frost-server-mqtt:${{ env.DOCKER_TAG_SHORT }} | |