Deploy #24
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: Deploy | |
| on: | |
| workflow_dispatch: | |
| env: | |
| REGISTRY: ghcr.io | |
| IMAGE_NAME: labsyncro/labsyncro | |
| ORG_USERNAME: ${{ github.actor }} | |
| permissions: | |
| contents: write | |
| pull-requests: write | |
| issues: write | |
| packages: write | |
| jobs: | |
| build: | |
| name: Build Docker Image | |
| runs-on: ubuntu-latest | |
| steps: | |
| - name: Checkout Code | |
| uses: actions/checkout@v4 | |
| - name: Setup Bun | |
| uses: oven-sh/setup-bun@v2 | |
| with: | |
| bun-version: "latest" | |
| - name: Setup Environment Variables | |
| run: | | |
| echo DATABASE_USER=${{ secrets.DATABASE_USER }} >> .env | |
| echo DATABASE_HOST=${{ secrets.DATABASE_HOST }} >> .env | |
| echo DATABASE_NAME=${{ secrets.DATABASE_NAME }} >> .env | |
| echo DATABASE_PASSWORD=${{ secrets.DATABASE_PASSWORD }} >> .env | |
| echo DATABASE_PORT=${{ secrets.DATABASE_PORT }} >> .env | |
| echo JWT_SECRET=${{ secrets.JWT_SECRET }} >> .env | |
| echo GOOGLE_CLIENT_ID=${{ secrets.GOOGLE_CLIENT_ID }} >> .env | |
| echo GOOGLE_CLIENT_SECRET=${{ secrets.GOOGLE_CLIENT_SECRET }} >> .env | |
| echo NODE_ENV=${{ secrets.NODE_ENV }} >> .env | |
| echo AUTH_SECRET=${{ secrets.AUTH_SECRET }} >> .env | |
| echo DATABASE_URL=${{ secrets.DATABASE_URL }} >> .env | |
| echo PRINT_LABELS_ENDPOINT=${{ secrets.PRINT_LABELS_ENDPOINT }} >> .env | |
| echo AUTH_API_BASE_URL=${{ secrets.AUTH_API_BASE_URL }} >> .env | |
| echo CORS_ALLOWED_ORIGIN=${{ secrets.CORS_ALLOWED_ORIGIN }} >> .env | |
| - name: Setup Docker Buildx | |
| uses: docker/setup-buildx-action@v3 | |
| - name: Log into GitHub Container Registry | |
| uses: docker/login-action@v3 | |
| with: | |
| registry: ${{ env.REGISTRY }} | |
| username: ${{ env.ORG_USERNAME }} | |
| password: ${{ secrets.GITHUB_TOKEN }} | |
| - name: Build and Push Docker Image | |
| uses: docker/build-push-action@v6 | |
| with: | |
| context: . | |
| push: true | |
| tags: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}:latest | |
| cache-from: type=gha | |
| cache-to: type=gha,mode=max | |
| deploy: | |
| name: Deploy to VPS | |
| runs-on: ubuntu-latest | |
| needs: [build] | |
| steps: | |
| - name: Deploy Application via SSH | |
| uses: appleboy/ssh-action@master | |
| with: | |
| host: ${{ secrets.VPS_HOST }} | |
| port: ${{ secrets.VPS_PORT }} | |
| username: ${{ secrets.VPS_USERNAME }} | |
| password: ${{ secrets.VPS_PASSWORD }} | |
| script: | | |
| export CR_PAT=${{ secrets.GITHUB_TOKEN }} | |
| echo $CR_PAT | docker login ${{ env.REGISTRY }} -u ${{ env.ORG_USERNAME }} --password-stdin | |
| docker pull ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}:latest | |
| cd labsyncro | |
| curl -s https://raw.githubusercontent.com/LabSyncro/LabSyncro/main/docker-compose.yml -o docker-compose.yml | |
| docker compose stop labsyncro | |
| docker compose rm -f labsyncro | |
| docker compose up -d labsyncro | |
| docker logout ${{ env.REGISTRY }} |