ci: set up local politigraph for staging build #169
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: Build and deploy to staging | |
| on: | |
| push: | |
| branches: ['main', '**/main'] | |
| paths-ignore: | |
| - '**/README.md' | |
| - '**/CONTRIBUTING.md' | |
| - '.github/ISSUE_TEMPLATE/**' | |
| - '.github/workflows/production.yml' | |
| - '.github/workflows/update-ranking.yml' | |
| workflow_dispatch: | |
| jobs: | |
| build: | |
| runs-on: ubuntu-latest | |
| steps: | |
| - name: Set artifact name | |
| run: | | |
| ARTIFACT=${{ github.ref_name }} | |
| ARTIFACT=build-${ARTIFACT/\//-} | |
| echo "ARTIFACT=${ARTIFACT}" >> $GITHUB_ENV | |
| echo "Set artifact name as ${ARTIFACT}" | |
| - name: Checkout repository | |
| uses: actions/checkout@v4 | |
| - name: Setup Node.js | |
| uses: actions/setup-node@v4 | |
| with: | |
| node-version: 22 | |
| cache: 'yarn' | |
| - name: Install dependencies | |
| run: yarn install | |
| - name: Test | |
| run: yarn test | |
| - name: Set up rsync | |
| uses: GuillaumeFalourd/[email protected] | |
| with: | |
| ssh_key: ${{ secrets.SSH_KEY }} | |
| - name: Register Politigraph host | |
| run: ssh-keyscan ${{ secrets.POLITIGRAPH_SSH_HOST }} > ~/.ssh/known_hosts | |
| - name: Pull latest Politigraph snapshot | |
| run: rsync -azvP bot@${{ secrets.POLITIGRAPH_SSH_HOST }}:${{ secrets.POLITIGRAPH_SSH_PATH }}/* ./politigraph | |
| - name: Load Politigraph image | |
| run: docker load --input ./politigraph/politigraph-image.tar.gz | |
| - name: Start Politigraph services | |
| run: cd politigraph && docker compose -f compose.server.yml up -d neo4j nuxt && cd .. | |
| - name: Build static site | |
| run: yarn build | |
| env: | |
| POLITIGRAPH_GRAPHQL_URL: http://localhost:3000/graphql | |
| - name: Stop Politigraph services | |
| run: cd politigraph && docker compose -f compose.server.yml down && cd .. | |
| - name: Build Histoire | |
| continue-on-error: true | |
| run: yarn story:build | |
| - name: Upload build artifact | |
| uses: actions/upload-artifact@v4 | |
| with: | |
| name: ${{ env.ARTIFACT }} | |
| path: build/* | |
| if-no-files-found: error | |
| retention-days: ${{ github.ref_name == 'main' && 7 || 1 }} | |
| overwrite: true | |
| deploy-to-staging: | |
| runs-on: ubuntu-latest | |
| needs: build | |
| steps: | |
| - name: Set artifact name | |
| run: | | |
| ARTIFACT=${{ github.ref_name }} | |
| ARTIFACT=build-${ARTIFACT/\//-} | |
| echo "ARTIFACT=${ARTIFACT}" >> $GITHUB_ENV | |
| echo "Set artifact name as ${ARTIFACT}" | |
| - name: Download build artifact | |
| uses: actions/download-artifact@v4 | |
| with: | |
| name: ${{ env.ARTIFACT }} | |
| - name: Publish to Cloudflare Pages | |
| uses: cloudflare/wrangler-action@v3 | |
| with: | |
| apiToken: ${{ secrets.CLOUDFLARE_API_TOKEN }} | |
| accountId: ${{ secrets.CLOUDFLARE_ACCOUNT_ID }} | |
| command: pages deploy ./ --project-name=parliament-watch --branch=${{ github.ref_name }} |