name: Web Deployment on: workflow_dispatch: {} workflow_call: inputs: develop-environments: type: string description: An optional list of dev environments to deploy to. default: '["dev"]' release-environments: type: string description: An optional list of release environments to deploy to. default: '["prod"]' pull_request: branches: - main types: - opened - reopened - synchronize - ready_for_review push: branches: - main paths: - web/** jobs: determine-workflow: runs-on: 'ubuntu-latest' outputs: workflow_type: ${{ steps.workflow.outputs.workflow_type }} workflow_envs: ${{ steps.workflow.outputs.workflow_envs }} release_type: ${{ steps.workflow.outputs.release_type }} steps: - name: Determine Workflow id: workflow shell: bash run: | event=${{ github.event_name }} workflow_type='dev'; workflow_envs='${{ inputs.develop-environments }}' if [[ $event == 'workflow_dispatch' && ${{ github.ref_name }}' == 'main' ]]; then workflow_type='release'; workflow_envs='${{ inputs.release-environments }}' fi echo "workflow_type=$workflow_type" >> $GITHUB_OUTPUT echo "workflow_envs=$workflow_envs" >> $GITHUB_OUTPUT echo "Running #workflow_type pipeline in environments: $workflow_envs" >> $GITHUB_STEP_SUMMARY build: environment: dev needs: determine-workflow runs-on: 'ubuntu-latest' permissions: contents: read packages: write steps: - uses: actions/checkout@v4 - name: Login to Docker uses: docker/login-action@v3 with: registry: docker.io username: ${{ secrets.DOCKERHUB_USER }} password: ${{ secrets.DOCKERHUB_TOKEN }} - name: Docker Build Backend run: docker build -f web/Dockerfile -t john4064/shiftsync:latest_web ./web --build-arg TEST=${{ secrets.TEST }} - name: Docker Push Backend run: docker push john4064/shiftsync:latest_web deploy: environment: dev needs: build if: always() && needs.build.result == 'success' && ${{ needs.determine-workflow.outputs.workflow_type }} == 'release' runs-on: 'ubuntu-latest' permissions: contents: read packages: write steps: - name: Deploy to Coolify run: | curl --request GET '${{ secrets.COOLIFY_WEBHOOK }}' --header 'Authorization: Bearer ${{ secrets.COOLIFY_TOKEN }}'