diff --git a/.github/workflows/build_and_deploy.yaml b/.github/workflows/build_and_deploy.yaml new file mode 100644 index 0000000..ccc44a9 --- /dev/null +++ b/.github/workflows/build_and_deploy.yaml @@ -0,0 +1,46 @@ +name: Build and Deploy + +on: + push: + branches: + - main + - feat/ci-cd + pull_request: + branches: + - main + - feat/ci-cd + workflow_dispatch: + +jobs: + build: + runs-on: ubuntu-latest + + steps: + - name: Checkout code + uses: actions/checkout@v3 + + - name: Set up JDK + uses: actions/setup-java@v2 + with: + java-version: '17' + distribution: 'adopt' + server-id: github + server-username: GITHUB_USER_REF + server-password: GITHUB_TOKEN_REF + + - name: Build with Maven + run: mvn -B package --file pom.xml + env: + GITHUB_USER_REF: ${{ secrets.PACKAGE_ACCESS_USER }} + GITHUB_TOKEN_REF: ${{ secrets.PACKAGE_ACCESS_TOKEN }} + + - name: Add execute permissions to script + run: chmod +x ./deploy.sh + + - name: Copy JAR over SSH and restart service + id: deploy + run: ./deploy.sh + env: + SSH_PASS: ${{ secrets.SSH_PASSWORD }} + SSH_USERNAME: ${{ secrets.SSH_USERNAME }} + SSH_HOST: ${{ secrets.SSH_HOST }} diff --git a/.github/workflows/publish.yaml b/.github/workflows/publish.yaml new file mode 100644 index 0000000..75fb977 --- /dev/null +++ b/.github/workflows/publish.yaml @@ -0,0 +1,57 @@ +name: Publish + +on: + workflow_dispatch: + +jobs: + build: + runs-on: ubuntu-latest + + steps: + - name: Checkout code + uses: actions/checkout@v3 + + - name: Set up JDK + uses: actions/setup-java@v2 + with: + java-version: '17' + distribution: 'adopt' + server-id: github + server-username: GITHUB_USER_REF + server-password: GITHUB_TOKEN_REF + + - name: Build with Maven + run: mvn -B package --file pom.xml + env: + GITHUB_USER_REF: ${{ secrets.PACKAGE_ACCESS_USER }} + GITHUB_TOKEN_REF: ${{ secrets.PACKAGE_ACCESS_TOKEN }} + + - name: Add execute permissions to script + run: chmod +x ./check-version.sh + + - name: Check if version exists + id: chkvrsn + run: ./check-version.sh + env: + PAT: ${{ secrets.PACKAGE_ACCESS_TOKEN }} + USER: ${{ secrets.PACKAGE_ACCESS_USER }} + + - name: Publish to GitHub Packages + run: mvn deploy + env: + GITHUB_USER_REF: ${{ secrets.PACKAGE_ACCESS_USER }} + GITHUB_TOKEN_REF: ${{ secrets.PACKAGE_ACCESS_TOKEN }} + if: ${{ steps.chkvrsn.outputs.exists == 'false' }} + +## While I've used a common technique for publishing package to repositories, the process for publishing packages to GitHub Packages differs slightly. If any issues arise,replace the "Publish to GitHub Packages" stage above with the following stages. +## Details are available here https://docs.github.com/en/actions/publishing-packages/publishing-java-packages-with-maven#publishing-packages-to-github-packages +# - name: Set up JDK +# uses: actions/setup-java@v2 +# with: +# java-version: '17' +# distribution: 'adopt' +# - name: Publish to GitHub Packages +# run: mvn deploy +# env: +# GITHUB_TOKEN: ${{ secrets.PACKAGE_ACCESS_TOKEN }} +# if: ${{ steps.chkvrsn.outputs.exists == 'false' }} \ No newline at end of file diff --git a/deploy.sh b/deploy.sh new file mode 100644 index 0000000..ae0493f --- /dev/null +++ b/deploy.sh @@ -0,0 +1,48 @@ +#!/bin/bash + +JAR_FILE=target/*.jar +REMOTE_DIRECTORY=/opt/gamedoora/ +REMOTE_JAR_FILE=gamedoora-aggregation-proxy.jar + +echo $SSH_USERNAME +echo $SSH_HOST + +# connect to the Server instance and set up the remote directory + sshpass -p $SSH_PASS ssh -o StrictHostKeyChecking=no "$SSH_USERNAME@$SSH_HOST" " + if [ -d $REMOTE_DIRECTORY ]; then + cd $REMOTE_DIRECTORY + if [ -f $REMOTE_JAR_FILE ]; then + rm -f $REMOTE_JAR_FILE + fi + else + mkdir -p $REMOTE_DIRECTORY + fi" + +#COPY SYSTEMD INTO LOCAL +DEST_PATH="/usr/lib/systemd/system/" +echo "=====Copying files=========" +pwd +ls +sshpass -p $SSH_PASS scp -o StrictHostKeyChecking=no ./gamedoora-aggregation-proxy.service "$SSH_USERNAME@$SSH_HOST:$DEST_PATH" +echo "===========================" +echo "==Stopping service=======" +# Stop the service +sshpass -p $SSH_PASS ssh -o StrictHostKeyChecking=no "$SSH_USERNAME@$SSH_HOST" 'sudo systemctl daemon-reload; sudo systemctl stop gamedoora-aggregation-proxy' +echo "=========================" + +echo "=====Copying jars=========" + + # copy the new JAR file to the remote directory and rename it + +sshpass -p $SSH_PASS scp -v -o StrictHostKeyChecking=no $JAR_FILE "$SSH_USERNAME@$SSH_HOST:$REMOTE_DIRECTORY/$REMOTE_JAR_FILE" +echo "==========================" +echo "==Starting service=======" +sshpass -p $SSH_PASS ssh "$SSH_USERNAME@$SSH_HOST" 'chown -R gamedoora:gamedoora /opt/gamedoora; chmod ug+rwx /opt/gamedoora/*.jar; systemctl restart gamedoora-aggregation-proxy; systemctl is-active --quiet gamedoora-aggregation-proxy && echo Service is running' +echo "=========================" +# # Check the exit status of the previous command and set an output variable accordingly + +if [ $? -eq 0 ]; then + echo "::set-output name=status::success" +else + echo "::set-output name=status::failure" +fi diff --git a/gamedoora-aggregation-proxy.service b/gamedoora-aggregation-proxy.service new file mode 100644 index 0000000..a37faa8 --- /dev/null +++ b/gamedoora-aggregation-proxy.service @@ -0,0 +1,11 @@ +[Unit] +Description=gamedoora-aggregation-proxy +After=syslog.target gamedoora-config-server.service + +[Service] +User=gamedoora +ExecStart=/opt/gamedoora/gamedoora-aggregation-proxy.jar +SuccessExitStatus=143 +Environment="CONFIG_SERVER=http://localhost:8888" +[Install] +WantedBy=multi-user.target diff --git a/pom.xml b/pom.xml index 1830ed5..d6a88c8 100644 --- a/pom.xml +++ b/pom.xml @@ -46,7 +46,7 @@ com.gamedoora gamedoora-model - 0.2.1 + 0.2.2 org.springframework.boot @@ -92,11 +92,13 @@ + gamedoora-aggregation-proxy org.springframework.boot spring-boot-maven-plugin + true org.projectlombok @@ -107,5 +109,23 @@ + + + + github + GitHub gamedoora Apache Maven Packages for user services + https://maven.pkg.github.com/gamedoora/gamedoora-user-services + + + + + + + + github + GitHub gamedoora Apache Maven Packages for model + https://maven.pkg.github.com/gamedoora/gamedoora-model + + diff --git a/src/main/resources/application.properties b/src/main/resources/application.properties index f55d0f5..3ac8cdf 100644 --- a/src/main/resources/application.properties +++ b/src/main/resources/application.properties @@ -1,2 +1,3 @@ spring.application.name=aggregationproxy +server.port=8090 spring.config.import=optional:configserver:${CONFIG_SERVER}