Update build.yml #30
This file contains hidden or 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, publish and deploy docker | |
| on: | |
| push: | |
| branches: [ 'main' ] | |
| tags: | |
| - 'v*' | |
| env: | |
| REGISTRY: ghcr.io | |
| IMAGE_NAME: ${{ github.repository }} | |
| jobs: | |
| build-and-push-image: | |
| name: Build and push | |
| runs-on: ubuntu-latest | |
| permissions: | |
| contents: read | |
| packages: write | |
| steps: | |
| - name: Checkout repository | |
| uses: actions/checkout@v4 | |
| - name: Log in to the Container registry | |
| uses: docker/login-action@v2 | |
| with: | |
| registry: ${{ env.REGISTRY }} | |
| username: ${{ github.actor }} | |
| password: ${{ secrets.GITHUB_TOKEN }} | |
| - name: Extract metadata (tags, labels) for Docker | |
| id: meta | |
| uses: docker/metadata-action@v4 | |
| with: | |
| images: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }} | |
| tags: | | |
| type=ref,event=tag,enable=${{ startsWith(github.ref, 'refs/tags/v') }} | |
| type=raw,value=latest,enable=${{ startsWith(github.ref, 'refs/tags/v') }} | |
| type=raw,value=test,enable=true | |
| - name: Build and push Docker image | |
| uses: docker/build-push-action@v4 | |
| with: | |
| context: . | |
| push: true | |
| tags: ${{ steps.meta.outputs.tags }} | |
| labels: ${{ steps.meta.outputs.labels }} | |
| deploy-testing: | |
| name: Deploy Testing | |
| needs: build-and-push-image | |
| runs-on: [ self-hosted, Linux, testing ] | |
| environment: | |
| name: Testing | |
| env: | |
| CONTAINER_NAME: com_profcomff_tgbot_mark_test | |
| permissions: | |
| packages: read | |
| steps: | |
| - name: Pull new version | |
| run: docker pull ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}:test | |
| - name: Create env file for migration | |
| run: | | |
| cat > migration.env << 'EOF' | |
| DB_DSN='${{ secrets.DB_DSN }}' | |
| BOT_TOKEN='${{ secrets.BOT_TOKEN }}' | |
| BASE_URL='${{ vars.BASE_URL }}' | |
| WEBHOOK_PATH='${{ vars.WEBHOOK_PATH }}' | |
| QDRANT_API_KEY='${{ secrets.QDRANT_API_KEY }}' | |
| PRIVATE_KEY='${{ secrets.PRIVATE_KEY }}' | |
| SERVICE_ACCOUNT_ID='${{ secrets.SERVICE_ACCOUNT_ID }}' | |
| KEY_ID='${{ secrets.KEY_ID }}' | |
| HOST='${{ vars.HOST }}' | |
| PORT='${{ vars.PORT }}' | |
| EOF | |
| - name: Migrate DB | |
| run: | | |
| docker run --rm --network=web --env-file migration.env \ | |
| --name ${{ env.CONTAINER_NAME }}_migration \ | |
| ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}:test \ | |
| alembic upgrade head | |
| - name: Create env file for container | |
| run: | | |
| cat > container.env << 'EOF' | |
| DB_DSN='${{ secrets.DB_DSN }}' | |
| BOT_TOKEN='${{ secrets.BOT_TOKEN }}' | |
| BASE_URL='${{ vars.BASE_URL }}' | |
| WEBHOOK_PATH='${{ vars.WEBHOOK_PATH }}' | |
| QDRANT_API_KEY='${{ secrets.QDRANT_API_KEY }}' | |
| PRIVATE_KEY='${{ secrets.PRIVATE_KEY }}' | |
| SERVICE_ACCOUNT_ID='${{ secrets.SERVICE_ACCOUNT_ID }}' | |
| KEY_ID='${{ secrets.KEY_ID }}' | |
| HOST='${{ vars.HOST }}' | |
| PORT='${{ vars.PORT }}' | |
| EOF | |
| - name: Run new version | |
| run: | | |
| docker stop ${{ env.CONTAINER_NAME }} || true | |
| docker rm ${{ env.CONTAINER_NAME }} || true | |
| docker run --detach --network=web --restart on-failure:3 \ | |
| --env-file container.env \ | |
| --name ${{ env.CONTAINER_NAME }} \ | |
| ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}:test | |
| deploy-production: | |
| name: Deploy Production | |
| needs: build-and-push-image | |
| if: startsWith(github.ref, 'refs/tags/v') | |
| runs-on: [ self-hosted, Linux, production ] | |
| environment: | |
| name: Production | |
| env: | |
| CONTAINER_NAME: com_profcomff_tgbot_mark | |
| permissions: | |
| packages: read | |
| steps: | |
| - name: Pull new version | |
| run: docker pull ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}:latest | |
| - name: Create env file for migration | |
| run: | | |
| cat > migration.env << 'EOF' | |
| DB_DSN='${{ secrets.DB_DSN }}' | |
| BOT_TOKEN='${{ secrets.BOT_TOKEN }}' | |
| BASE_URL='${{ vars.BASE_URL }}' | |
| WEBHOOK_PATH='${{ vars.WEBHOOK_PATH }}' | |
| QDRANT_API_KEY='${{ secrets.QDRANT_API_KEY }}' | |
| PRIVATE_KEY='${{ secrets.PRIVATE_KEY }}' | |
| SERVICE_ACCOUNT_ID='${{ secrets.SERVICE_ACCOUNT_ID }}' | |
| KEY_ID='${{ secrets.KEY_ID }}' | |
| HOST='${{ vars.HOST }}' | |
| PORT='${{ vars.PORT }}' | |
| EOF | |
| - name: Migrate DB | |
| run: | | |
| docker run --rm --network=web --env-file migration.env \ | |
| --name ${{ env.CONTAINER_NAME }}_migration \ | |
| ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}:latest \ | |
| alembic upgrade head | |
| - name: Create env file for container | |
| run: | | |
| cat > container.env << 'EOF' | |
| DB_DSN='${{ secrets.DB_DSN }}' | |
| BOT_TOKEN='${{ secrets.BOT_TOKEN }}' | |
| BASE_URL='${{ vars.BASE_URL }}' | |
| WEBHOOK_PATH='${{ vars.WEBHOOK_PATH }}' | |
| QDRANT_API_KEY='${{ secrets.QDRANT_API_KEY }}' | |
| PRIVATE_KEY='${{ secrets.PRIVATE_KEY }}' | |
| SERVICE_ACCOUNT_ID='${{ secrets.SERVICE_ACCOUNT_ID }}' | |
| KEY_ID='${{ secrets.KEY_ID }}' | |
| HOST='${{ vars.HOST }}' | |
| PORT='${{ vars.PORT }}' | |
| EOF | |
| - name: Run new version | |
| run: | | |
| docker stop ${{ env.CONTAINER_NAME }} || true | |
| docker rm ${{ env.CONTAINER_NAME }} || true | |
| docker run --detach --network=web --restart always \ | |
| --env-file container.env \ | |
| --name ${{ env.CONTAINER_NAME }} \ | |
| ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}:latest |