CI/CD Pipeline #13
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: CI/CD Pipeline | |
| on: | |
| push: | |
| branches: [main] | |
| pull_request: | |
| branches: [main] | |
| workflow_dispatch: | |
| inputs: | |
| reason: | |
| description: "Reason for manual trigger" | |
| required: false | |
| default: "Test run" | |
| type: string | |
| schedule: | |
| - cron: "0 0 * * 0" #weekly on Sundays at midnight | |
| permissions: | |
| contents: read | |
| pages: write | |
| id-token: write | |
| concurrency: | |
| group: "pages" | |
| cancel-in-progress: false | |
| jobs: | |
| ci: | |
| name: Continuous Integration | |
| runs-on: ubuntu-latest | |
| steps: | |
| # get the code from the repo | |
| - name: Checkout code | |
| uses: actions/checkout@v6 | |
| - name: Setup Node.js | |
| uses: actions/setup-node@v6 | |
| with: | |
| node-version: "24" | |
| cache: "npm" | |
| - name: Install dependencies | |
| run: npm ci | |
| - name: Run linter | |
| run: npm run lint | |
| - name: Check formatting | |
| run: npm run format:check | |
| - name: Run tests | |
| run: npm test | |
| - name: Build project | |
| run: npm run build | |
| - name: Generate simple log | |
| run: | | |
| mkdir -p logs | |
| echo "CI Pipeline ran at $(date)" > logs/pipeline.log | |
| echo "Tests passed" >> logs/pipeline.log | |
| - name: Generate demo HTML page | |
| run: | | |
| mkdir -p public | |
| cp demo/index.html public/ | |
| cp dist/sum.js public/ | |
| - name: Upload build logs artifact | |
| uses: actions/upload-artifact@v6 | |
| with: | |
| name: build-logs | |
| path: logs/ | |
| retention-days: 30 | |
| - name: Upload demo site artifact | |
| uses: actions/upload-artifact@v6 | |
| with: | |
| name: demo-site | |
| path: public/ | |
| retention-days: 30 | |
| deploy: | |
| name: Deploy to Github Pages | |
| needs: ci | |
| runs-on: ubuntu-latest | |
| if: github.event_name == 'push' && github.ref == 'refs/heads/main' | |
| environment: | |
| name: github-pages | |
| url: ${{steps.deployment.outputs.page_url}} | |
| steps: | |
| - name: Download artifact | |
| uses: actions/download-artifact@v7 | |
| with: | |
| name: demo-site | |
| path: ./public | |
| - name: Upload to Github Pages | |
| uses: actions/upload-pages-artifact@v3 | |
| with: | |
| path: ./public | |
| - name: Deploy to Github Pages | |
| id: deployment | |
| uses: actions/deploy-pages@v4 |