Dev #27
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: Docker CICD | |
| on: | |
| push: | |
| branches: [main, dev] | |
| pull_request: | |
| branches: [main, dev] | |
| jobs: | |
| build: | |
| name: Build & Test | |
| runs-on: ubuntu-latest | |
| steps: | |
| - uses: actions/checkout@v4 | |
| - name: Install Rust toolchain | |
| uses: dtolnay/rust-toolchain@stable | |
| with: | |
| components: rustfmt, clippy | |
| - name: Cache Rust dependencies | |
| uses: Swatinem/rust-cache@v2 | |
| - name: Generate Secret Key | |
| run: head -c16 /dev/urandom > src/secret.key | |
| - name: Check | |
| run: cargo check | |
| - name: Format check | |
| run: cargo fmt --all -- --check | |
| - name: Clippy | |
| run: cargo clippy -- -D warnings | |
| - name: Test | |
| run: cargo test | |
| - name: Build release | |
| run: cargo build --release | |
| - name: Build frontend | |
| working-directory: ./web | |
| run: | | |
| if [ -f package-lock.json ]; then | |
| npm ci | |
| else | |
| npm install | |
| fi | |
| npm run build | |
| - name: Package app | |
| run: | | |
| mkdir -p app/stackdog/dist | |
| cp target/release/stackdog app/stackdog/ | |
| cp -a web/dist/. app/stackdog/ | |
| cp docker/prod/Dockerfile app/Dockerfile | |
| touch app/.env | |
| tar -czf app.tar.gz -C app . | |
| - name: Upload build artifact | |
| uses: actions/upload-artifact@v4 | |
| with: | |
| name: app-archive | |
| path: app.tar.gz | |
| retention-days: 1 | |
| docker: | |
| name: Docker Build & Push | |
| runs-on: ubuntu-latest | |
| needs: build | |
| steps: | |
| - name: Download build artifact | |
| uses: actions/download-artifact@v4 | |
| with: | |
| name: app-archive | |
| - name: Extract archive | |
| run: tar -xzf app.tar.gz | |
| - name: Set up Docker Buildx | |
| uses: docker/setup-buildx-action@v3 | |
| - name: Login to Docker Hub | |
| uses: docker/login-action@v3 | |
| with: | |
| username: ${{ secrets.DOCKER_USERNAME }} | |
| password: ${{ secrets.DOCKER_PASSWORD }} | |
| - name: Build and push | |
| uses: docker/build-push-action@v6 | |
| with: | |
| context: . | |
| push: true | |
| tags: trydirect/stackdog:latest |