fix: change 1 to 0 in instanceIndex #102
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: Build and deploy JWizard API | |
on: | |
push: | |
branches: | |
- master | |
paths: | |
- ".github/workflows/deploy.yml" | |
- "dokka/**" | |
- "jwa-*/**" | |
- ".dockerignore" | |
- "Dockerfile.pipeline" | |
- "build.gradle" | |
- "gradle.properties" | |
- "settings.gradle" | |
workflow_dispatch: | |
env: | |
PM2_API_NAME: JWizardApi | |
SSH_HOST: ${{ secrets.SSH_HOST }} | |
SSH_USERNAME: ${{ secrets.SSH_USERNAME }} | |
SSH_PORT: ${{ secrets.SSH_PORT }} | |
SSH_KEY: ${{ secrets.SSH_KEY }} | |
SSH_PASSPHRASE: ${{ secrets.SSH_PASSPHRASE }} | |
jobs: | |
build: | |
runs-on: ubuntu-latest | |
steps: | |
- name: Checkout repository | |
uses: actions/checkout@v4 | |
- name: Set up JDK 17 | |
uses: actions/setup-java@v4 | |
with: | |
java-version: '17' | |
distribution: 'adopt' | |
- name: Determinate build version | |
id: version | |
run: echo "sha_short=$(git rev-parse --short HEAD)" >> $GITHUB_OUTPUT | |
- name: Grant execute permission for gradlew | |
run: chmod +x gradlew | |
- name: Clean build directory | |
run: ./gradlew clean --no-daemon | |
- name: Package to JAR | |
run: ./gradlew shadowJar --no-daemon | |
env: | |
JWIZARD_VERSION: ${{ steps.version.outputs.sha_short }} | |
JWIZARD_MAVEN_NAME: ${{ secrets.MVN_LIB_READER_NAME }} | |
JWIZARD_MAVEN_SECRET: ${{ secrets.MVN_LIB_READER_SECRET }} | |
- name: Upload generated JAR artifact | |
uses: actions/upload-artifact@v4 | |
with: | |
name: output-jar | |
path: .bin/jwizard-api.jar | |
retention-days: 1 | |
docker: | |
runs-on: ubuntu-latest | |
needs: build | |
steps: | |
- name: Checkout repository | |
uses: actions/checkout@v4 | |
- name: Download generated JAR artifact | |
uses: actions/download-artifact@v4 | |
with: | |
name: output-jar | |
path: ${{ github.workspace }}/docker | |
- name: Set up builder | |
uses: docker/setup-buildx-action@v3 | |
- name: Log in to Docker Hub | |
uses: docker/login-action@v3 | |
with: | |
username: ${{ secrets.DOCKER_USERNAME }} | |
password: ${{ secrets.DOCKER_PASSWORD }} | |
- name: Build the Docker image | |
uses: docker/build-push-action@v6 | |
with: | |
context: . | |
file: ./Dockerfile.pipeline | |
push: true | |
tags: milosz08/jwizard-api:latest | |
- name: Logout from Docker Hub | |
run: docker logout | |
generate-docs: | |
runs-on: ubuntu-latest | |
needs: build | |
env: | |
SERVER_OUTPUT: "/var/www/jwizard-docs/jwa" | |
steps: | |
- name: Checkout repository | |
uses: actions/checkout@v4 | |
- name: Set up JDK 17 | |
uses: actions/setup-java@v4 | |
with: | |
java-version: '17' | |
distribution: 'adopt' | |
- name: Determinate build version | |
id: version | |
run: echo "sha_short=$(git rev-parse --short HEAD)" >> $GITHUB_OUTPUT | |
- name: Grant execute permission for gradlew | |
run: chmod +x gradlew | |
- name: Generate KDoc and Javadoc documentation | |
run: ./gradlew dokkaAll --no-daemon | |
env: | |
JWIZARD_VERSION: ${{ steps.version.outputs.sha_short }} | |
JWIZARD_MAVEN_NAME: ${{ secrets.MVN_LIB_READER_NAME }} | |
JWIZARD_MAVEN_SECRET: ${{ secrets.MVN_LIB_READER_SECRET }} | |
- name: Copy generated content on server | |
uses: appleboy/scp-action@v0.1.7 | |
with: | |
host: ${{ secrets.SSH_HOST }} | |
username: ${{ secrets.SSH_USERNAME }} | |
port: ${{ secrets.SSH_PORT }} | |
key: ${{ secrets.SSH_KEY }} | |
passphrase: ${{ secrets.SSH_PASSPHRASE }} | |
source: docs/* | |
target: ${{ env.SERVER_OUTPUT }} | |
rm: true | |
strip_components: 1 | |
clear-context: | |
runs-on: ubuntu-latest | |
needs: build | |
steps: | |
- name: Stop existing process | |
uses: appleboy/ssh-action@v1.1.0 | |
with: | |
host: ${{ env.SSH_HOST }} | |
username: ${{ env.SSH_USERNAME }} | |
port: ${{ env.SSH_PORT }} | |
key: ${{ env.SSH_KEY }} | |
passphrase: ${{ env.SSH_PASSPHRASE }} | |
script: ~/exec/process stop ${{ env.PM2_API_NAME }} | |
pre-deploy: | |
runs-on: ubuntu-latest | |
needs: clear-context | |
steps: | |
- name: Checkout tools repository | |
uses: actions/checkout@v4 | |
with: | |
repository: ${{ github.repository_owner }}/jwizard-tools | |
token: ${{ secrets.GITHUB_TOKEN }} | |
- name: Setup Python environment | |
uses: actions/setup-python@v5 | |
with: | |
python-version: '3.12' | |
cache: 'pip' | |
- name: Install requirements | |
run: pip install -r requirements.txt | |
- name: Grand permissions to run packages grabber | |
run: chmod +x exec/run-with-config | |
- name: Run migrator | |
run: exec/run-with-config db_migrator \ | |
"${{ secrets.CONFIG_FILE_CONTENT }}" \ | |
--pipeline infra | |
- name: Cache version | |
run: exec/run-with-config cache_version \ | |
"${{ secrets.CONFIG_FILE_CONTENT }}" \ | |
--repo ${{ github.repository }} | |
deploy: | |
runs-on: ubuntu-latest | |
needs: pre-deploy | |
env: | |
SERVER_OUTPUT: "/var/www/jwizard-api" | |
steps: | |
- name: Download generated JAR artifact | |
uses: actions/download-artifact@v4 | |
with: | |
name: output-jar | |
- name: Move files to server | |
uses: appleboy/scp-action@v0.1.7 | |
with: | |
host: ${{ env.SSH_HOST }} | |
username: ${{ env.SSH_USERNAME }} | |
port: ${{ env.SSH_PORT }} | |
key: ${{ env.SSH_KEY }} | |
passphrase: ${{ env.SSH_PASSPHRASE }} | |
source: "jwizard-api.jar" | |
target: ${{ env.SERVER_OUTPUT }} | |
rm: true | |
- name: Re-create config file | |
uses: appleboy/ssh-action@v1.1.0 | |
with: | |
host: ${{ env.SSH_HOST }} | |
username: ${{ env.SSH_USERNAME }} | |
port: ${{ env.SSH_PORT }} | |
key: ${{ env.SSH_KEY }} | |
passphrase: ${{ env.SSH_PASSPHRASE }} | |
script: exec/make-conf ${{ env.SERVER_OUTPUT }} "${{ secrets.CONFIG_FILE_CONTENT }}" | |
- name: Start process | |
uses: appleboy/ssh-action@v1.1.0 | |
with: | |
host: ${{ env.SSH_HOST }} | |
username: ${{ env.SSH_USERNAME }} | |
port: ${{ env.SSH_PORT }} | |
key: ${{ env.SSH_KEY }} | |
passphrase: ${{ env.SSH_PASSPHRASE }} | |
script: ~/exec/process start ${{ env.PM2_API_NAME }} |