diff --git a/.github/workflows/docker-build.yml b/.github/workflows/docker-build.yml new file mode 100644 index 00000000..552586e9 --- /dev/null +++ b/.github/workflows/docker-build.yml @@ -0,0 +1,154 @@ +name: Docker Build and Push + +on: + push: + branches: [ "feature/ci" ] # or your default branch + 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 \ No newline at end of file diff --git a/.gitignore b/.gitignore index 9748b176..426be6f4 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,5 @@ +.secrets + # Based on https://raw.githubusercontent.com/github/gitignore/main/Node.gitignore packages/sdk/profileId.txt packages/sdk/test.ts