name: Docker Build and Push on: push: # branches: [ "main" ] paths: - 'apps/api/**' - 'apps/worker/**' - 'apps/public/**' - 'packages/**' - '!packages/sdks/**' - '**Dockerfile' - '.github/workflows/**' env: repo_owner: 'openpanel-dev' jobs: changes: runs-on: ubuntu-latest outputs: api: ${{ steps.filter.outputs.api }} worker: ${{ steps.filter.outputs.worker }} public: ${{ steps.filter.outputs.public }} steps: - uses: actions/checkout@v4 - uses: dorny/paths-filter@v2 id: filter with: base: 'main' filters: | api: - 'apps/api/**' - 'packages/**' - '.github/workflows/**' worker: - 'apps/worker/**' - 'packages/**' - '.github/workflows/**' public: - 'apps/public/**' - 'packages/**' - '.github/workflows/**' lint-and-test: needs: changes if: ${{ needs.changes.outputs.api == 'true' || needs.changes.outputs.worker == 'true' || needs.changes.outputs.public == 'true' }} runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - name: Setup Node.js uses: actions/setup-node@v4 with: node-version: '20' - name: Install pnpm uses: pnpm/action-setup@v4 - name: Get pnpm store directory shell: bash run: | echo "STORE_PATH=$(pnpm store path --silent)" >> $GITHUB_ENV - name: Setup pnpm cache uses: actions/cache@v3 with: path: ${{ env.STORE_PATH }} key: ${{ runner.os }}-pnpm-store-${{ hashFiles('**/pnpm-lock.yaml') }} restore-keys: | ${{ runner.os }}-pnpm-store- - name: Install dependencies run: pnpm install - name: Codegen run: pnpm codegen # - name: Run Biome # run: pnpm lint - name: Run TypeScript checks run: pnpm typecheck # - name: Run tests # run: pnpm test build-and-push-api: permissions: packages: write needs: [changes, lint-and-test] if: ${{ needs.changes.outputs.api == 'true' }} runs-on: ubuntu-latest steps: - name: Checkout repository uses: actions/checkout@v4 - name: Set up Docker Buildx uses: docker/setup-buildx-action@v3 - name: Log in to GitHub Container Registry uses: docker/login-action@v3 with: registry: ghcr.io username: ${{ github.actor }} password: ${{ secrets.GITHUB_TOKEN }} - name: Build and push Docker image uses: docker/build-push-action@v6 with: context: . file: apps/api/Dockerfile push: true cache-from: type=gha cache-to: type=gha,mode=max tags: | ghcr.io/${{ env.repo_owner }}/api:latest ghcr.io/${{ env.repo_owner }}/api:${{ github.sha }} build-args: | DATABASE_URL=postgresql://dummy:dummy@localhost:5432/dummy build-and-push-worker: permissions: packages: write needs: [changes, lint-and-test] if: ${{ needs.changes.outputs.worker == 'true' }} runs-on: ubuntu-latest steps: - name: Checkout repository uses: actions/checkout@v4 - name: Set up Docker Buildx uses: docker/setup-buildx-action@v3 - name: Log in to GitHub Container Registry uses: docker/login-action@v3 with: registry: ghcr.io username: ${{ github.actor }} password: ${{ secrets.GITHUB_TOKEN }} - name: Build and push Docker image uses: docker/build-push-action@v6 with: context: . file: apps/worker/Dockerfile push: true cache-from: type=gha cache-to: type=gha,mode=max tags: | ghcr.io/${{ env.repo_owner }}/worker:latest ghcr.io/${{ env.repo_owner }}/worker:${{ github.sha }} build-args: | DATABASE_URL=postgresql://dummy:dummy@localhost:5432/dummy