on: push: branches: - '*' pull_request: types: [opened, synchronize, reopened] branches: - main name: Docker Scan, Lint, & Deploy via Compose jobs: sonarqube: name: SonarQube Scanning & Quality Gate runs-on: ubuntu-latest steps: - name: Checking out uses: actions/checkout@v4 with: fetch-depth: 0 - name: SonarQube Scan id: sonarqube-scan uses: SonarSource/sonarqube-scan-action@v4.1.0 env: SONAR_HOST_URL: ${{ secrets.SONARQUBE_HOST }} SONAR_TOKEN: ${{ secrets.SONARQUBE_TOKEN }} - name: SonarQube Quality Gate Check id: quality-gate uses: SonarSource/sonarqube-quality-gate-action@v1.1.0 env: SONAR_HOST_URL: ${{ secrets.SONARQUBE_HOST }} SONAR_TOKEN: ${{ secrets.SONARQUBE_TOKEN }} docker-compose-dry-run: name: Dry Run Docker Compose runs-on: ubuntu-latest needs: quality-gate if: ${{ steps.quality-gate.outputs.quality-gate-status }} == 'PASSED' steps: - name: Checking out uses: actions/checkout@v4 with: fetch-depth: 0 - name: Generate ephemeral env run: | echo "${{ secrets.RINOA_DOCKER_ENV }}" > ./.env - name: Validate Docker Compose Configuration id: docker-lint run: | docker compose config --no-interpolate --quiet --dry-run EXIT_CODE=$? if [ $? -ne 0 ]; then echo "Docker Compose configuration validation failed." exit 1 else echo "Docker Compose configuration is valid." fi echo "::set-output name=exit_code::$EXIT_CODE" - name: Merge PR in Gitea needs: docker-lint if: steps.docker-lint.outputs.exit_code == 0 uses: prasiman/gocurl@v1 if: ${{ github.event.pull_request.merged == false }} # Only merge if PR is not already merged with: method: "POST" url: "${{ secrets.RINOA_GITEA_SERVER }}/api/v1/repos/${{ github.repository_owner }}/${{ github.event.repository.name }}/pulls/${{ github.event.pull_request.number }}/merge" headers: > Authorization: token "${{ secrets.BOT_GITEA_TOKEN }} Content-Type: application/json body: | { "Do": "merge" } deploy-changes: name: Merge and Deploy Changes runs-on: ubuntu-latest needs: docker-lint if: steps.docker-lint.outputs.exit_code == 0 steps: - name: Checkout Code uses: actions/checkout@v4 - name: Git Merge & Push uses: morbalint/git-merge-action@v1.1.0 with: target: 'main' source: ${{ gitea.event.pull_request.head.ref }} dry-run: true - name: Deploy Docker Compose Changes uses: 5eqn/docker-compose-remote-action@v0.0.7 with: ssh_host: 192.168.1.254 ssh_user: gitea-deploy ssh_private_key: ${{ secrets.DEPLOY_PRIVATE_SSH_KEY }} ssh_host_public_key: ${{ secrets.DEPLOY_PUBLIC_SSH_KEY }} docker_env: $ {{ secrets.RINOA_DOCKER_ENV }} docker_args: -d --remove-orphans --build --dry-run