Skip to content

CI / CD

CI / CD #70

name: πŸš€ Release
on:
push:
tags:
- '*'
# Sets permissions of the GITHUB_TOKEN to allow deployment to GitHub Pages
permissions:
contents: write
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:
if: startsWith(github.ref, 'refs/tags/')
environment:
name: test-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 + maven site
###########################################
- name: Build Maven site
run: mvn --batch-mode clean install site site:stage
############################################
# Create the release with changelog,
# PR Oriented
###########################################
- name: "Build Changelog"
id: build_changelog
uses: mikepenz/[email protected]
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
fetchReleaseInformation: true
outputFile: PR-CHANGELOG.txt
configurationJson: |
{
"template": "# πŸ₯³ Welcome to this new version !\nWe hope you will appreciate the following improvements, this release <b>covers #{{DAYS_SINCE}} day</b> (or night) of work, starting the #{{FROM_TAG_DATE}} and ending at #{{TO_TAG_DATE}}. You may want to see the <b>#{{TO_TAG}}</b> release in action here : <ul><li><a target='_blank' href='https://nudger.fr'>nudger.fr</a></li><li><a target='_blank' href='https://open4good.github.io/open4goods/'>documentation</a></li></ul>\n## Editions\n<ul><li><a href='#{{RELEASE_DIFF}}'>Changed files</a> : <b>#{{CHANGED_FILES}}</b> </li><li>Commits : <b>#{{COMMITS}}</b> </li><li>Additions : <b>#{{ADDITIONS}}</b></li><li>Deletions : <b>#{{DELETIONS}}</b></li> </ul>\n\n## Included pull requests\n#{{CHANGELOG}}\n\n## ❓ Other (#{{UNCATEGORIZED_COUNT}})\n\n#{{UNCATEGORIZED}}",
"pr_template": "##{{NUMBER}} - #{{TITLE}} (#{{AUTHOR}})",
"custom_placeholders": [
{
"name": "EPIC",
"source": "BODY",
"transformer": {
"pattern": "[\\S\\s]*?(https:\\/\\/corp\\.atlassian\\.net\\/browse\\/EPIC-.{2,4})[\\S\\s]*",
"target": "- $1"
}
}
],
"empty_template": "Nothing",
"categories": [
{
"title": "## πŸ˜ƒ Features",
"labels": ["feature"]
},
{
"title": "## 🐜 Bug Fixes",
"labels": ["bug"]
},
{
"title": "## πŸ’¬ Documentation",
"labels": ["documentation"]
},
{
"title": "## πŸ“¦ Dependencies",
"labels": ["dependencies"]
}
]
}
############################################
# Create the release with changelog,
# push Oriented
###########################################
- name: "Build Changelog push oriented"
id: build_changelog_push
uses: mikepenz/[email protected]
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
fetchReleaseInformation: true
outputFile: PUSH-CHANGELOG.txt
commitMode: true
configurationJson: |
{
"template": "# πŸ™ˆ Direct commits\n#{{UNCATEGORIZED}}",
"pr_template": "#{{TITLE}} (#{{AUTHOR}})",
"empty_template": "Nothing",
"categories": []
}
############################################
# Merge the backlogs
###########################################
- name: Merge site
run: cat PUSH-CHANGELOG.txt >> PR-CHANGELOG.txt
############################################
# Create the release
###########################################
- name: Create Release
uses: mikepenz/[email protected] #softprops/action-gh-release
with:
body_path: ${{ github.workspace }}/PR-CHANGELOG.txt
body: ${{ steps.build_changelog.outputs.changelog }}
files: |
LICENSE
./api/target/api-0.0.1-SNAPSHOT.jar
./ui/target/ui-0.0.1-SNAPSHOT.jar
############################################
# 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: Start 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 github Pages
uses: actions/configure-pages@v4
- name: Merge site
run: cp -r target/staging/* src/main/site/maven/
- name: Upload pen4goods custom site
uses: actions/upload-pages-artifact@v3
with:
path: './src/main/site/'
- name: Deploy to GitHub Pages
id: deployment
uses: actions/deploy-pages@v4