diff --git a/.github/workflows/deployement.yml b/.github/workflows/deployement.yml new file mode 100644 index 0000000..2cdfaf3 --- /dev/null +++ b/.github/workflows/deployement.yml @@ -0,0 +1,61 @@ +name: Deploy to production + +on: + workflow_run: + workflows: + - Docker Image CI + types: + - completed + +jobs: + deploy: + # ne déploie que si le build a réussi + if: ${{ github.event.workflow_run.conclusion == 'success' }} + + runs-on: ubuntu-latest + environment: production + + steps: + - name: Deploy to production server + uses: appleboy/ssh-action@v1.0.3 + with: + host: ${{ secrets.PROD_SSH_HOST }} + username: ${{ secrets.PROD_SSH_USER }} + key: ${{ secrets.PROD_SSH_KEY }} + script: | + set -e + cd /root/AperiSolve + + # update code + git pull + + # create .env + cat < .env + MAX_CONTENT_LENGTH=${{ vars.MAX_CONTENT_LENGTH }} + MAX_PENDING_TIME=${{ vars.MAX_PENDING_TIME }} + MAX_STORE_TIME=${{ vars.MAX_STORE_TIME }} + CLEAR_AT_RESTART=${{ vars.CLEAR_AT_RESTART }} + SKIP_IHDR_FILL=${{ vars.SKIP_IHDR_FILL }} + + FLASK_DEBUG=${{ vars.FLASK_DEBUG }} + FLASK_ENV=${{ vars.FLASK_ENV }} + + RQ_DASHBOARD_REDIS_URL=${{ secrets.REDIS_URL }} + + POSTGRES_USER=${{ secrets.POSTGRES_USER }} + POSTGRES_PASSWORD=${{ secrets.POSTGRES_PASSWORD }} + POSTGRES_DB=${{ secrets.POSTGRES_DB }} + DB_URI=${{ secrets.DATABASE_URL }} + + SENTRY_DSN=${{ secrets.SENTRY_DSN }} + SENTRY_TRACES_SAMPLE_RATE=${{ secrets.SENTRY_TRACES_SAMPLE_RATE }} + SENTRY_PROFILES_SAMPLE_RATE=${{ secrets.SENTRY_PROFILES_SAMPLE_RATE }} + SENTRY_RELEASE=${{ secrets.SENTRY_RELEASE }} + SENTRY_ENVIRONMENT=${{ secrets.SENTRY_ENVIRONMENT }} + EOF + + # Pull images and deploy + docker compose pull + docker compose down + docker compose up -d + docker image prune -f diff --git a/.github/workflows/releases.yml b/.github/workflows/releases.yml index 6d780f8..561cabc 100644 --- a/.github/workflows/releases.yml +++ b/.github/workflows/releases.yml @@ -10,22 +10,24 @@ jobs: docker-releases: runs-on: ubuntu-latest + if: startsWith(github.ref, 'refs/tags/') && (github.ref_name == 'main' || github.ref_name == 'prod') + steps: - name: Get release version run: echo "RELEASE_VERSION=${GITHUB_REF#refs/tags/}" >> $GITHUB_ENV - + - name: downcase username run: echo "lower_actor=${GITHUB_ACTOR,,}" >> $GITHUB_ENV - name: Checkout uses: actions/checkout@v4 - + - name: Set up QEMU uses: docker/setup-qemu-action@v3 - + - name: Set up Docker Buildx uses: docker/setup-buildx-action@v3 - + - name: Login to GitHub Container Registry uses: docker/login-action@v3 with: @@ -33,12 +35,21 @@ jobs: username: ${{ github.actor }} password: ${{ secrets.GITHUB_TOKEN }} + - name: Determine latest tag + run: | + if [[ "${GITHUB_REF_NAME}" == "main" ]]; then + echo "LATEST_TAG=latest" >> $GITHUB_ENV + elif [[ "${GITHUB_REF_NAME}" == "prod" ]]; then + echo "LATEST_TAG=latest-prod" >> $GITHUB_ENV + else + echo "LATEST_TAG=" >> $GITHUB_ENV + fi + - name: Build and push Docker images uses: docker/build-push-action@v6.9.0 with: context: ./ push: true tags: | - ghcr.io/${{ env.lower_actor }}/aperisolve:latest - ghcr.io/${{ env.lower_actor }}/aperisolve:${{ env.RELEASE_VERSION }} - \ No newline at end of file + ghcr.io/${{ env.lower_actor }}/aperisolve:${{ env.RELEASE_VERSION }} + ghcr.io/${{ env.lower_actor }}/aperisolve:${{ env.LATEST_TAG }}