Skip to content

comment

comment #297

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.
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:
############################################
# Cache Maven Dependencies
###########################################
- name: Cache Maven Dependencies
id: cache-maven
uses: actions/cache@v4
with:
path: ~/.m2/repository
key: ${{ runner.os }}-maven-${{ hashFiles('**/pom.xml') }}
restore-keys: |
${{ runner.os }}-maven-
############################################
# Checkout xwiki-springboot-starter
###########################################
- uses: actions/checkout@v4
with:
repository: 'open4good/xwiki-spring-boot-starter'
############################################
# Set up JDK 21 and Maven Cache
###########################################
- name: Set up JDK 21
uses: actions/setup-java@v4
with:
distribution: 'temurin'
java-version: '21'
cache: 'maven' # Link this to the previously cached maven dependencies
############################################
# Set up Maven Repositories
###########################################
- name: Set up Maven Repositories
uses: s4u/[email protected]
with:
repositories: |
[
{
"id": "xwiki-releases",
"name": "xwiki-releases",
"url": "https://maven.xwiki.org/releases/",
"snapshots": {
"enabled": false
}
},
{
"id": "spring-snapshots",
"name": "spring-snapshots",
"url": "https://repo.spring.io/snapshot",
"snapshots": {
"enabled": true
}
},
{
"id": "linkedin",
"name": "linkedin",
"url": "https://linkedin.jfrog.io/artifactory/open-source/",
"snapshots": {
"enabled": false
}
}
]
############################################
# Build and test xwiki-springboot-starter
###########################################
- name: Build and Test xwiki-springboot-starter
working-directory: ./xwiki-spring-boot-starter
run: mvn --batch-mode --update-snapshots install
############################################
# Checkout Main Repository
###########################################
- uses: actions/checkout@v4
############################################
# Build Maven site and Artifacts
###########################################
- name: Build Maven Site
run: mvn --batch-mode clean install site site:stage
############################################
# Create the Release 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### File changes\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}})",
"empty_template": "Nothing",
"categories": [
{
"title": "### 💡 Features",
"labels": ["feature"]
},
{
"title": "### 🔥 Bug Fixes",
"labels": ["bug"]
},
{
"title": "### ⚡ Performance",
"labels": ["performance"]
},
{
"title": "### 💬 Documentation",
"labels": ["documentation"]
},
{
"title": "### 📦 Dependencies",
"labels": ["dependencies"]
}
]
}
############################################
# Create the Release 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 GitHub Release
###########################################
- name: Create Release
uses: mikepenz/action-gh-release@v1
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
./target/staging/taglist/taglist.xml
############################################
# Deploy JARs to Production Server
###########################################
- name: Deploy SBADMIN to Server
uses: easingthemes/ssh-deploy@main
env:
SSH_PRIVATE_KEY: ${{ secrets.SSH_PRIVATE_KEY }}
ARGS: "-rltgoDzvO --delete"
SOURCE: "/admin/target/admin-0.0.1-SNAPSHOT.jar"
REMOTE_HOST: ${{ secrets.REMOTE_HOST }}
REMOTE_USER: ${{ secrets.REMOTE_USER }}
TARGET: "/opt/open4goods/bin/latest/sbadmin-latest.jar"
- 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"
- 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 prod
############################################
# GitHub Pages Deployment
###########################################
- name: Setup GitHub Pages
uses: actions/configure-pages@v5
- name: Merge Site
run: cp -r target/staging/* src/main/site/maven/
- name: Upload Custom Site to GitHub Pages
uses: actions/upload-pages-artifact@v3
with:
path: './src/main/site/'
- name: Deploy to GitHub Pages
id: deployment
uses: actions/deploy-pages@v4