Skip to content

Workflow file for this run

name: Main Server CI/CD
on:
pull_request:
branches: [ "main-cicd-test" ]
types: [ "closed" ]
permissions:
contents: read
jobs:
check-branch:
if: contains(github.head_ref, 'release')
runs-on: ubuntu-latest
steps:
- name: Check branch
run: |
echo 'Passed the check to see if it was a release branch'
check-merged:
needs: check-branch
if: github.event.pull_request.merged == true
runs-on: ubuntu-latest
steps:
- name: Check merged
run: |
echo 'The PR was merged'
extract-version:
needs: check-merged
runs-on: ubuntu-latest
outputs:
version: ${{ steps.extract-version.outputs.version }}
steps:
- name: checkout
uses: actions/checkout@v4
with:
ref: ${{ env.GITHUB_SHA }}
- name: extract version
id: extract-version
run: |
echo "version=$(echo "$(git show -s --format=%s)" | egrep -o '[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}')" >> "$GITHUB_OUTPUT"
build:
needs: extract-version
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v4
with:
submodules: true
token: ${{ secrets.TOKEN }}
- name: Setup JDK 11
uses: actions/setup-java@v3
with:
java-version: '11'
distribution: 'temurin'
- name: Setup Docker
run: docker compose up -d
- name: Grant execute permission
run: chmod +x ./gradlew
- name: Build with Gradle
run: ./gradlew clean build -x test
- name: Test with Gradle
run: ./gradlew test
deploy:
needs: [build, extract-version]
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v4
with:
submodules: true
token: ${{ secrets.TOKEN }}
- name: Docker build & push
run: |
./gradlew bootjar
docker login -u ${{ secrets.DOCKER_USERNAME }} -p ${{ secrets.DOCKER_PASSWORD }}
docker build -f Dockerfile-prod -t ${{ secrets.DOCKER_USERNAME }}/${{ secrets.DOCKER_PROD_IMAGE }}:${{ needs.extract-version.outputs.version }} .
docker push ${{ secrets.DOCKER_USERNAME }}/${{ secrets.DOCKER_PROD_IMAGE }}:${{ needs.extract-version.outputs.version }}
- name: Deploy
uses: appleboy/ssh-action@v1.0.0
with:
host: ${{ secrets.PROD_SERVER_HOST }}
port: ${{ secrets.PROD_SERVER_PORT }}
username: ${{ secrets.PROD_SERVER_USERNAME }}
password: ${{ secrets.PROD_SERVER_PASSWORD }}
debug: true
script: |
docker pull ${{ secrets.DOCKER_USERNAME }}/${{ secrets.DOCKER_PROD_IMAGE }}:${{ needs.extract-version.outputs.version }}
docker stop ${{ secrets.CONTAINER_NAME }}
docker rm ${{ secrets.CONTAINER_NAME }}
docker run --name=${{ secrets.CONTAINER_NAME }} -d -p 8080-8082:8080-8082 -v $HOME/logs:/logs ${{ secrets.DOCKER_USERNAME }}/${{ secrets.DOCKER_PROD_IMAGE }}:${{ needs.extract-version.outputs.version }}
docker container prune -f
docker image prune -f
create-release:
needs: [deploy, extract-version]
runs-on: ubuntu-latest
permissions:
contents: write
steps:
- name: create release
uses: ncipollo/release-action@v1.13.0
with:
tag: ${{ needs.extract-version.outputs.version }}
name: ${{ needs.extract-version.outputs.version }}