Skip to content
on: workflow_dispatch
name: Prod - Create a release, publish the documentation, and deploy the binaries
# Sets permissions of the GITHUB_TOKEN to allow deployment to GitHub Pages
permissions:
contents: read
pages: write
id-token: write
# Allow only one concurrent deployment, skipping runs queued between the run in-progress and latest queued.
# However, do NOT cancel in-progress runs as we want to allow these production deployments to complete.
concurrency:
group: "pages"
cancel-in-progress: false
jobs:
release:
environment:
name: github-pages
url: ${{ steps.deployment.outputs.page_url }}
name: prod-release-deploy
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
############################################
# Install Java
###########################################
- name: Set up JDK 21
uses: actions/setup-java@v4
with:
java-version: '21'
distribution: 'adopt'
cache: maven
############################################
# Build jars
###########################################
# - name: Build jars with Maven
# run: mvn --batch-mode --update-snapshots install -Dmaven.test.skip=true
############################################
# Build jars + maven site
###########################################
- name: Build Maven site
run: mvn --batch-mode clean install site site:stage
############################################
# Build the changelogs
###########################################
- name: Build Changelog
id: github_release
uses: mikepenz/release-changelog-builder-action@v3
############################################
# Tag the repository
###########################################
- name: Tag the repository
id: tag
run: |
# See https://docs.github.com/en/get-started/using-git/dealing-with-special-characters-in-branch-and-tag-names
TAG=v$(date -Iseconds | sed 's/[T:\+]/-/g')
echo "$TAG"
echo "tag=$TAG" >> $GITHUB_OUTPUT
git config user.name "GitHub Action"
git config user.email "[email protected]"
git tag -a $TAG -m "Published version $TAG" ${GITHUB_SHA}
git push origin $TAG
############################################
# Create the release
###########################################
- name: Create Release
uses: mikepenz/[email protected] #softprops/action-gh-release
with:
body: ${{steps.github_release.outputs.changelog}}
tag_name: ${{ steps.tag.outputs.tag }}
files: |
pom.xml
LICENSE
############################################
# Deploy API to production server
###########################################
- name: Deploy API to server
uses: easingthemes/ssh-deploy@main
env:
SSH_PRIVATE_KEY: ${{ secrets.SSH_PRIVATE_KEY }}
ARGS: "-rltgoDzvO --delete"
SOURCE: "/api/target/api-0.0.1-SNAPSHOT.jar"
REMOTE_HOST: ${{ secrets.REMOTE_HOST }}
REMOTE_USER: ${{ secrets.REMOTE_USER }}
TARGET: "/opt/open4goods/bin/latest/api-latest.jar"
############################################
# Deploy UI to production server
###########################################
- name: Deploy UI to production server
uses: easingthemes/ssh-deploy@main
env:
SSH_PRIVATE_KEY: ${{ secrets.SSH_PRIVATE_KEY }}
ARGS: "-rltgoDzvO --delete"
SOURCE: "/ui/target/ui-0.0.1-SNAPSHOT.jar"
REMOTE_HOST: ${{ secrets.REMOTE_HOST }}
REMOTE_USER: ${{ secrets.REMOTE_USER }}
TARGET: "/opt/open4goods/bin/latest/ui-latest.jar"
############################################
# Restart applications
###########################################
- name: Publish applications
uses: appleboy/[email protected]
with:
host: ${{ secrets.REMOTE_HOST }}
username: ${{ secrets.REMOTE_USER }}
key: ${{ secrets.SSH_PRIVATE_KEY}}
script: sh /opt/open4goods/bin/publish-jars.sh
############################################
# Github pages deployment
###########################################
- name: Setup Pages
uses: actions/configure-pages@v4
- name: Upload artifact
uses: actions/upload-pages-artifact@v3
with:
# Upload entire repository
path: './target/staging'
- name: Deploy to GitHub Pages
id: deployment
uses: actions/deploy-pages@v4