name: Continuous Integration on: workflow_dispatch: {} pull_request: types: [opened, synchronize, reopened] push: branches: [main] jobs: prepare: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - uses: actions/setup-node@v4 with: node-version: '20' - uses: pnpm/action-setup@v4 with: version: 9 - name: Get pnpm store directory id: pnpm-store run: echo "path=$(pnpm store path)" >> "$GITHUB_OUTPUT" - name: Cache pnpm store uses: actions/cache@v4 with: path: ${{ steps.pnpm-store.outputs.path }} key: pnpm-${{ hashFiles('pnpm-lock.yaml') }} - name: Install dependencies run: pnpm install --frozen-lockfile build: needs: prepare runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - uses: actions/setup-node@v4 with: node-version: '20' - uses: pnpm/action-setup@v4 with: version: 9 - name: Get pnpm store directory id: pnpm-store run: echo "path=$(pnpm store path)" >> "$GITHUB_OUTPUT" - name: Restore pnpm store uses: actions/cache@v4 with: path: ${{ steps.pnpm-store.outputs.path }} key: pnpm-${{ hashFiles('pnpm-lock.yaml') }} - name: Install dependencies run: pnpm install --frozen-lockfile - name: Build run: pnpm run build - name: Upload build artifact uses: actions/upload-artifact@v3 with: name: dist path: dist/ retention-days: 1 test: needs: build runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - uses: actions/setup-node@v4 with: node-version: '20' - uses: pnpm/action-setup@v4 with: version: 9 - name: Get pnpm store directory id: pnpm-store run: echo "path=$(pnpm store path)" >> "$GITHUB_OUTPUT" - name: Restore pnpm store uses: actions/cache@v4 with: path: ${{ steps.pnpm-store.outputs.path }} key: pnpm-${{ hashFiles('pnpm-lock.yaml') }} - name: Install dependencies run: pnpm install --frozen-lockfile - name: Lint run: pnpm run lint - name: Unit tests run: pnpm run test deploy: needs: [build, test] if: github.event_name == 'workflow_dispatch' || (github.event_name == 'push' && github.ref == 'refs/heads/main') uses: ./.gitea/workflows/deploy.yaml with: artifact_name: dist environment: production