name: Build, Test and Package Release # Pipeline (see aidlc-docs/features/react-frontend/operations/deployment/deployment-instructions.md): # - Runs automatically on every pull request (merge request) as a build/test/lint gate. # - Can also be triggered manually from Gitea Actions, picking the branch/ref to run against. # - The "deploy" job currently only packages dist/ as a downloadable artifact # (no automatic upload to a host yet) and only runs for manual (workflow_dispatch) runs. # Typically run on a `release/*` branch once you've manually created it for a release. # - Uploaded artifacts expire after 1 day (retention-days: 1). # - Gitea Actions has no GitLab/Azure DevOps-style approval gate (a single job with a # "manual" play button inside an already-running pipeline). The closest equivalent is # workflow_dispatch: the deploy job only runs when someone presses "Run workflow" in # the Gitea Actions UI, i.e. a one-click manual approval. on: workflow_dispatch: {} pull_request: types: [opened, synchronize, reopened] jobs: build-and-test: runs-on: ubuntu-latest steps: - name: Checkout uses: actions/checkout@v4 - name: Setup Node.js uses: actions/setup-node@v4 with: node-version: '20' - name: Setup pnpm uses: pnpm/action-setup@v4 with: version: 9 - name: Install dependencies run: pnpm install --frozen-lockfile - name: Lint run: pnpm run lint - name: Unit tests run: pnpm run test - name: Build run: pnpm run build - name: Upload build artifact uses: actions/upload-artifact@v3 with: name: dist path: dist/ retention-days: 1 deploy: needs: build-and-test if: github.event_name == 'workflow_dispatch' runs-on: ubuntu-latest steps: - name: Download build artifact uses: actions/download-artifact@v3 with: name: dist path: dist # Placeholder deploy step: for now this only re-publishes dist/ as a clearly # named, ready-to-download artifact. Once the hosting/upload method (FTP/SFTP/ # other) is finalized, replace this step with the actual upload and this # comment can be removed. - name: Package release artifact uses: actions/upload-artifact@v3 with: name: release-dist path: dist/ retention-days: 1