diff --git a/.github/workflows/deploy.yaml b/.github/workflows/deploy.yaml new file mode 100644 index 000000000..e54e89b31 --- /dev/null +++ b/.github/workflows/deploy.yaml @@ -0,0 +1,80 @@ +name: Automatic Deployment + +on: + push: + branches: + - dev +concurrency: + group: ${{ github.workflow }}-${{ github.ref }} + cancel-in-progress: true + +jobs: + environment: + name: ๐ŸŒ Setup Environment + runs-on: [self-hosted] + outputs: + target: ${{ steps.dev.outputs.target || steps.staging.outputs.target }} + steps: + - name: ๐Ÿ› ๏ธ Set Development Environment + id: dev + if: ${{github.ref_name == 'dev'}} + run: | + echo "target=dev" >> $GITHUB_OUTPUT + - name: ๐Ÿš€ Set Staging Environment + id: staging + if: ${{github.ref_name == 'staging'}} + run: | + echo "target=staging" >> $GITHUB_OUTPUT + + build-base-image: + name: ๐Ÿ—๏ธ Build Base Image + runs-on: [self-hosted, dev] + needs: [environment] + steps: + - name: ๐Ÿ” Checkout + uses: actions/checkout@v4 + + - name: ๐Ÿณ Build Docker Image + run: docker build -t edr-${{needs.environment.outputs.target}} . + + deploy-service: + name: ${{ matrix.display_name }} + runs-on: [self-hosted, dev] + needs: [build-base-image, environment] + strategy: + fail-fast: false + matrix: + include: + - service: freight-api + env_file: .env.freight-api + display_name: ๐Ÿšš Deploy Freight API Service + - service: passenger-api + env_file: .env.passenger-api + display_name: ๐Ÿง‘โ€๐Ÿฆฒ Deploy Passenger API Service + + steps: + - name: ๐Ÿ” Checkout + uses: actions/checkout@v4 + + - name: ๐Ÿ“‹ Copy ${{ matrix.service }} Environment + run: cp ~/environment/edr/${{needs.environment.outputs.target}}/${{ matrix.env_file }} .env + + - name: ๐Ÿš€ Start ${{ matrix.service }} Service + run: docker compose --project-name="edr-${{needs.environment.outputs.target}}" up -d --force-recreate ${{ matrix.service }} --build + + cleanup: + name: ๐Ÿงน Cleanup Docker Resources + runs-on: [self-hosted] + needs: + - deploy-service + if: always() # Run even if previous jobs fail + steps: + - name: ๐Ÿ—‘๏ธ Remove unused Docker resources + run: | + echo "๐Ÿงน Cleaning up Docker resources..." + # Remove all stopped containers + docker container prune -f + # Remove unused images (both dangling and unreferenced) + docker image prune -a -f + + echo "โœ… Docker cleanup completed!" diff --git a/docker-compose.yaml b/docker-compose.yaml new file mode 100644 index 000000000..aa9ec58e2 --- /dev/null +++ b/docker-compose.yaml @@ -0,0 +1,21 @@ +services: + freight-api: + build: + context: . + dockerfile: ./Dockerfile + target: freight-api + env_file: + - .env + ports: + - ${PORT}:${PORT} + restart: unless-stopped + passenger-api: + build: + context: . + dockerfile: ./Dockerfile + target: passenger-api + env_file: + - .env + ports: + - ${PORT}:${PORT} + restart: unless-stopped