Package build and deploy #100
This file contains 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: Package build and deploy | |
on: | |
workflow_dispatch: | |
inputs: | |
publish_maven: | |
description: "Publish to Maven" | |
required: true | |
type: boolean | |
release_made: | |
description: "I have used the scripts/set_version.sh script to set the new version." | |
required: true | |
type: boolean | |
publish_only_maven: | |
description: "(DEV) Publish only to Maven" | |
required: true | |
type: boolean | |
concurrency: | |
group: ${{ github.ref }}-build | |
cancel-in-progress: true | |
jobs: | |
check_release: | |
name: Check input parameters | |
if: ${{ !inputs.publish_only_maven && !inputs.release_made }} | |
runs-on: ubuntu-latest | |
steps: | |
- run: echo "Release check wasn't checked" | |
build: | |
name: Building project | |
if: ${{ inputs.publish_only_maven || inputs.release_made }} | |
runs-on: ubuntu-latest | |
outputs: | |
version: ${{ steps.version_get.outputs.version }} | |
steps: | |
- uses: actions/checkout@v3 | |
- id: version_get | |
run: echo "version=$(scripts/get_version.sh)" >> $GITHUB_OUTPUT | |
- name: Set up JDK | |
uses: actions/setup-java@v3 | |
with: | |
distribution: 'microsoft' | |
java-version: 17 | |
- name: Use Node.js 16 | |
uses: actions/setup-node@v3 | |
with: | |
node-version: 16 | |
cache-dependency-path: qendpoint-frontend/package-lock.json | |
- name: Install frontend dependencies | |
run: npm ci --legacy-peer-deps | |
working-directory: qendpoint-frontend | |
- name: Validate frontend format | |
run: npm run validate | |
working-directory: qendpoint-frontend | |
- name: Compiling frontend | |
run: npm run build --if-present | |
working-directory: qendpoint-frontend | |
- name: Put frontend in backend | |
run: | | |
mkdir -p qendpoint-backend/src/main/resources/static/ | |
cp -r qendpoint-frontend/build/* qendpoint-backend/src/main/resources/static/ | |
- name: Compile qendpoint | |
run: mvn install | |
- name: move endpoint | |
run: mv qendpoint-backend/target/qendpoint-*-exec.jar qendpoint.jar | |
- name: Deploy jar | |
uses: actions/upload-artifact@v3 | |
with: | |
name: "qendpoint.jar" | |
path: "qendpoint.jar" | |
- name: move cli | |
run: mv qendpoint-cli/target/qendpoint-cli-*-distribution.zip qendpoint-cli.zip | |
- name: Deploy CLI zip | |
uses: actions/upload-artifact@v3 | |
with: | |
name: "qendpoint-cli.zip" | |
path: "qendpoint-cli.zip" | |
publish: | |
name: Publish to Maven Central | |
needs: build | |
runs-on: ubuntu-latest | |
if: ${{ inputs.publish_only_maven || inputs.publish_maven }} | |
permissions: | |
contents: read | |
packages: write | |
steps: | |
- name: Set up JDK | |
uses: actions/setup-java@v3 | |
with: | |
distribution: 'microsoft' | |
java-version: 17 | |
- name: Import GPG key | |
id: import_gpg | |
uses: crazy-max/ghaction-import-gpg@v4 | |
with: | |
gpg_private_key: ${{ secrets.GPG_PRIVATE_KEY }} | |
passphrase: ${{ secrets.PASSPHRASE }} | |
- uses: actions/checkout@v3 | |
- name: maven-settings-action | |
uses: s4u/maven-settings-action@v2.5.0 | |
with: | |
servers: '[{"id": "sonatype-nexus-snapshots", "username": "${{ secrets.SONATYPE_NEXUS_USERNAME }}", "password": "${{ secrets.SONATYPE_NEXUS_PASSWORD }}"},{"id": "sonatype-nexus-staging", "username": "${{ secrets.SONATYPE_NEXUS_USERNAME }}", "password": "${{ secrets.SONATYPE_NEXUS_PASSWORD }}"}]' | |
- name: Publish to the Maven Central Repository | |
run: mvn --batch-mode clean deploy -P release -DskipTests | |
osx: | |
name: Build OSX version | |
needs: build | |
runs-on: macos-latest | |
if: ${{ !inputs.publish_only_maven }} | |
steps: | |
- uses: actions/checkout@v3 | |
- name: Set up JDK | |
uses: actions/setup-java@v3 | |
with: | |
distribution: 'microsoft' | |
java-version: 17 | |
- name: Download qendpoint jar | |
uses: actions/download-artifact@v3 | |
with: | |
name: "qendpoint.jar" | |
- name: Create Icon | |
run: scripts/create_osx_icon.sh docs/images/logo_fill_icon.png docs/images/mac_icons.icns | |
- name: Package jar as dmg installer | |
env: | |
MACOS_CERTIFICATE: ${{ secrets.MACOS_CERTIFICATE }} | |
MACOS_CERTIFICATE_PWD: ${{ secrets.MAOS_CERTIFICATE_PWD }} | |
MACOS_KEYCHAIN_PWD: ${{ secrets.MACOS_KEYCHAIN_PWD }} | |
MACOS_DEV_ID: ${{ secrets.MACOS_DEVID }} | |
MACOS_TEAMID: ${{ secrets.MACOS_TEAMID }} | |
AC_PASSWORD: ${{ secrets.NOTARIZATION_PASSWORD }} | |
NOTARIZATION_USERNAME_NEW: ${{ secrets.NOTARIZATION_USERNAME_NEW }} | |
NOTARIZATION_TEAM_NEW: ${{ secrets.NOTARIZATION_TEAM_NEW }} | |
NOTARIZATION_PASSWORD_NEW: ${{ secrets.NOTARIZATION_PASSWORD_NEW }} | |
run: scripts/build_package_osx.sh qendpoint.jar | |
- name: Upload dmg | |
uses: actions/upload-artifact@v3 | |
with: | |
name: "qendpoint.dmg" | |
path: "qendpoint.dmg" | |
windows: | |
name: Build WINDOWS version | |
needs: build | |
runs-on: windows-latest | |
if: ${{ !inputs.publish_only_maven }} | |
steps: | |
- uses: actions/checkout@v3 | |
- name: Setup Java | |
uses: actions/setup-java@v3 | |
with: | |
distribution: 'microsoft' | |
java-version: 17 | |
- name: Download endpoint jar | |
uses: actions/download-artifact@v3 | |
with: | |
name: "qendpoint.jar" | |
- name: Package jar as msi installer | |
run: | | |
scripts/build_package.ps1 scripts/jpackage_windows.cfg qendpoint.jar | |
mv scripts/build/distributions/*.msi qendpoint.msi | |
- name: Upload installer | |
uses: actions/upload-artifact@v1 | |
with: | |
name: "qendpoint.msi" | |
path: "qendpoint.msi" | |
linux: | |
name: Build LINUX version | |
needs: build | |
runs-on: ubuntu-latest | |
if: ${{ !inputs.publish_only_maven }} | |
steps: | |
- uses: actions/checkout@v3 | |
- name: Set up JDK | |
uses: actions/setup-java@v3 | |
with: | |
distribution: 'microsoft' | |
java-version: 17 | |
- name: Download endpoint jar | |
uses: actions/download-artifact@v3 | |
with: | |
name: "qendpoint.jar" | |
- name: Package jar as deb installer | |
run: | | |
scripts/build_package.sh scripts/jpackage_linux.cfg qendpoint.jar | |
mv scripts/build/distributions/*.deb qendpoint.deb | |
- name: Upload installer | |
uses: actions/upload-artifact@v1 | |
with: | |
name: "qendpoint.deb" | |
path: "qendpoint.deb" | |
push_to_docker_hub: | |
name: Push to Docker Hub base image | |
needs: | |
- build | |
environment: | |
name: qendpoint docker image | |
url: https://hub.docker.com/r/qacompany/qendpoint/tags | |
runs-on: ubuntu-latest | |
if: ${{ !inputs.publish_only_maven }} | |
steps: | |
- name: Check out the repo | |
uses: actions/checkout@v3 | |
- name: Download qendpoint jar | |
uses: actions/download-artifact@v3 | |
with: | |
name: "qendpoint.jar" | |
- name: Move endpoint | |
run: mv qendpoint.jar scripts | |
- name: Set up QEMU | |
uses: docker/setup-qemu-action@v2 | |
- name: Set up Docker Buildx | |
uses: docker/setup-buildx-action@v2 | |
- name: Log in to Docker Hub | |
uses: docker/login-action@v2 | |
with: | |
username: ${{ secrets.DOCKER_HUB_USERNAME }} | |
password: ${{ secrets.DOCKER_HUB_PASSWORD }} | |
- name: Extract metadata (tags, labels) for Docker | |
id: meta | |
uses: docker/metadata-action@v4 | |
with: | |
images: qacompany/qendpoint | |
- name: Build and push Docker image | |
uses: docker/build-push-action@v3 | |
with: | |
file: scripts/Dockerfile | |
context: scripts | |
push: true | |
tags: "qacompany/qendpoint:latest,qacompany/qendpoint:${{ needs.build.outputs.version }}" | |
platforms: linux/amd64,linux/arm64 | |
labels: ${{ steps.meta.outputs.labels }} | |
push_to_docker_hub_wikidata: | |
name: Push to Docker Hub wikidata image | |
environment: | |
name: qendpoint-wikidata docker image | |
url: https://hub.docker.com/r/qacompany/qendpoint-wikidata/tags | |
needs: | |
- build | |
- push_to_docker_hub | |
runs-on: ubuntu-latest | |
if: ${{ !inputs.publish_only_maven }} | |
steps: | |
- name: Check out the repo | |
uses: actions/checkout@v3 | |
- name: Set up QEMU | |
uses: docker/setup-qemu-action@v2 | |
- name: Set up Docker Buildx | |
uses: docker/setup-buildx-action@v2 | |
- name: Log in to Docker Hub | |
uses: docker/login-action@v2 | |
with: | |
username: ${{ secrets.DOCKER_HUB_USERNAME }} | |
password: ${{ secrets.DOCKER_HUB_PASSWORD }} | |
- name: Extract metadata (tags, labels) for Docker | |
id: meta | |
uses: docker/metadata-action@v4 | |
with: | |
images: qacompany/qendpoint | |
- name: Build and push Docker image | |
uses: docker/build-push-action@v3 | |
with: | |
file: scripts/Dockerfile-wikidata | |
context: scripts | |
push: true | |
tags: "qacompany/qendpoint-wikidata:latest,qacompany/qendpoint-wikidata:${{ needs.build.outputs.version }}" | |
platforms: linux/amd64,linux/arm64 | |
labels: ${{ steps.meta.outputs.labels }} | |
create_release: | |
name: Create Github release | |
environment: | |
name: qendpoint release | |
url: "https://github.com/the-qa-company/qEndpoint/releases/tag/v${{ needs.build.outputs.version }}" | |
needs: | |
- build | |
- linux | |
- windows | |
- osx | |
- push_to_docker_hub_wikidata | |
runs-on: ubuntu-latest | |
if: ${{ !inputs.publish_only_maven }} | |
steps: | |
- uses: actions/checkout@v3 | |
- name: Download artifacts | |
uses: actions/download-artifact@v3 | |
- name: Extract artifacts | |
run: | | |
mkdir -p deploy_file | |
mv qendpoint.*/* deploy_file | |
mv qendpoint-cli.*/* deploy_file | |
- name: Compute hashes | |
run: | | |
chmod u+x scripts/hashfiles.sh | |
echo " " >> release/SUFFIX.md | |
echo " " >> release/SUFFIX.md | |
echo '**SHA256**' >> release/SUFFIX.md | |
echo '' >> release/SUFFIX.md | |
echo '```' >> release/SUFFIX.md | |
scripts/hashfiles.sh deploy_file >> release/SUFFIX.md | |
echo '```' >> release/SUFFIX.md | |
- name: Create release body | |
run: | | |
chmod u+x scripts/build_release_input.sh | |
scripts/build_release_input.sh | |
- name: Create release with artifacts | |
uses: ncipollo/release-action@v1 | |
with: | |
commit: ${{ github.sha }} | |
tag: "v${{ needs.build.outputs.version }}" | |
artifacts: "deploy_file/*" | |
name: "Release ${{ needs.build.outputs.version }}" | |
bodyFile: "release/RELEASE_OUTPUT.md" | |
token: ${{ secrets.GITHUB_TOKEN }} |