name: Build and Deploy on: push: branches: [ "main" ] pull_request: branches: [ "main" ] jobs: build: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - name: Set up Go uses: actions/setup-go@v4 with: go-version: '1.24' - name: Build run: go build -v ./... deploy: runs-on: ubuntu-latest needs: build if: github.event_name == 'push' && github.ref == 'refs/heads/main' env: IMAGE_URL: "" APP_SERVER: ${{ secrets.APP_SERVER }} APP_NAME: ${{ secrets.APP_NAME }} APP_TOKEN: ${{ secrets.APP_TOKEN }} steps: - name: Check out repository uses: actions/checkout@v4 - name: Set up Docker Buildx uses: docker/setup-buildx-action@v3 - name: Login to Container Registry uses: docker/login-action@v3 with: registry: ghcr.io username: ${{ github.repository_owner }} password: ${{ secrets.GITHUB_TOKEN }} - name: Preset Image Name id: set_image_url run: | IMAGE_URL=$(echo ghcr.io/${{ github.repository_owner }}/${{ github.event.repository.name }}:$(echo ${{ github.sha }} | cut -c1-7) | tr '[:upper:]' '[:lower:]') echo "IMAGE_URL=$IMAGE_URL" >> $GITHUB_ENV echo "image_url=$IMAGE_URL" >> $GITHUB_OUTPUT - name: Build and push Docker Image uses: docker/build-push-action@v5 with: context: . file: ./Dockerfile push: true platforms: linux/arm64/v8 tags: ${{ steps.set_image_url.outputs.image_url }} - name: Deploy Image to Server uses: caprover/deploy-from-github@v1.1.2 with: server: ${{ env.APP_SERVER }} app: ${{ env.APP_NAME }} token: ${{ env.APP_TOKEN }} image: ${{ steps.set_image_url.outputs.image_url }}