@@ -10,13 +10,30 @@ concurrency:
1010 group : deploy-production
1111 cancel-in-progress : true
1212
13+ # Allow installation of dependencies
1314permissions :
1415 id-token : write
1516 contents : read
1617
1718jobs :
19+ # This job is used to render datasheets, but only if they have changed.
20+ # It's a separate job so we don't have to cleanup the machine afterwards.
21+ render-datasheets :
22+ name : Render Datasheets
23+ runs-on : ubuntu-latest
24+ steps :
25+ - uses : actions/checkout@v4
26+ with :
27+ fetch-depth : 1
28+
29+ - uses : ./.github/actions/generate-datasheets
30+ with :
31+ artifact-name : datasheets
32+ datasheets-path : static/resources/datasheets
33+
1834 build :
19- if : " github.repository == 'arduino/docs-content'"
35+ name : Build and Deploy
36+ needs : render-datasheets
2037 runs-on : ubuntu-latest
2138 environment : production
2239 env :
@@ -27,20 +44,28 @@ jobs:
2744 - uses : actions/checkout@v4
2845 with :
2946 fetch-depth : 1
47+
48+ - name : Cleanup runner disk
49+ uses : ./.github/actions/cleanup-disk # Cleanup machine before starting the build
50+
3051 - uses : actions/setup-node@v4
3152 with :
3253 node-version : 18
3354 cache : " npm"
34- cache-dependency-path : " **/package-lock.json"
55+ cache-dependency-path : " package-lock.json"
56+
57+ - name : Retrieve Datasheets
58+ uses : actions/download-artifact@v4 # Retrieve the datasheets generated in the previous job
59+ with :
60+ name : datasheets
61+ path : static/resources/datasheets
3562
36- - name : Render Datasheets
37- run : cd ${GITHUB_WORKSPACE}/scripts/datasheet-rendering;./render- datasheets.sh
63+ - name : Debug datasheet list
64+ run : ls -lah static/resources/ datasheets
3865
3966 - name : Copy Static Files
4067 run : |
41- mkdir -p static/resources/datasheets static/resources/schematics static/resources/pinouts static/resources/models
42- find ./content/hardware -type f -name "*-schematics.pdf" -exec cp {} ./static/resources/schematics/ \;
43- find ./content/hardware -type f -name "*-datasheet.pdf" -exec cp {} ./static/resources/datasheets/ \;
68+ mkdir -p static/resources/schematics static/resources/pinouts static/resources/models
4469 find ./content/hardware -type f -name "*-full-pinout.pdf" -exec cp {} ./static/resources/pinouts/ \;
4570 find ./content/hardware -type f -name "*-pinout.png" -exec cp {} ./static/resources/pinouts/ \;
4671 find ./content/hardware -type f -name "*-step.zip" -exec cp {} ./static/resources/models/ \;
5479 restore-keys : |
5580 ${{ runner.os }}-cache-gatsby-main
5681
57- - name : Gatsby Public Folder
82+ - name : Gatsby Public Folder cache
5883 uses : actions/cache@v4
5984 id : gatsby-public-folder
6085 with :
@@ -64,37 +89,29 @@ jobs:
6489 ${{ runner.os }}-public-gatsby-main
6590
6691 - run : npm install
92+
6793 - run : npm run build
6894
69- - name : Clean up node_modules
95+ - name : Clean up node_modules # Just to save space
7096 run : rm -rf node_modules
7197
72- - name : Configure AWS credentials from Production account
73- uses : aws- actions/configure-aws-credentials@v4
98+ - name : Deploy to S3
99+ uses : ./.github/ actions/sync-s3
74100 with :
75101 role-to-assume : ${{ secrets.PRODUCTION_IAM_ROLE }}
76- aws-region : us-east-1
77-
78- - name : Sync all cacheable assets
79- run : aws s3 sync --cache-control "public, max-age=31536000, immutable" --include "*.css" --include="*.js" --include="*.gif" --include="*.png" --include="*.svg" --exclude "*.html" --exclude="sw.js" --exclude="*.json" --exclude="*.pdf" --delete public/ s3://${{ secrets.PRODUCTION_BUCKET_NAME }}/
80-
81- - name : Sync all non-cacheable assets
82- # Don't cache any HTML or JSON file: they should always be up-to-dates
83- run : aws s3 sync --cache-control "public, max-age=0, must-revalidate" --include "*.html" --include="sw.js" --include="*.json" --include "*.css" --exclude="*.js" --exclude="*.gif" --exclude="*.png" --exclude="*.svg" --exclude="*.pdf" --delete public/ s3://${{ secrets.PRODUCTION_BUCKET_NAME }}/
84-
85- # - name: Sync PDF
86- # run: aws s3 sync --cache-control "public, max-age=86400, must-revalidate" --include "*.pdf" --exclude="*.js" --exclude="*.gif" --exclude="*.png" --exclude="*.svg" --exclude="*.css" --exclude="*.html" --exclude="*.json" --exclude="sw.json" --delete public/ s3://${{ secrets.PRODUCTION_BUCKET_NAME }}/
87-
88- # - name: Purge cache on CloudFlare
89- # run: |
90- # curl -X POST "https://api.cloudflare.com/client/v4/zones/${{ secrets.CLOUDFLARE_ZONE }}/purge_cache" \
91- # -H "Authorization: Bearer ${{ secrets.CLOUDFLARE_PURGE_API_TOKEN }}" \
92- # -H "Content-Type: application/json" \
93- # --data '{"prefixes":["${{ vars.DATASHEETS_BASE_URL }}"]}'
102+ bucket-name : ${{ secrets.PRODUCTION_BUCKET_NAME }}
94103
95- - name : Sync all cacheable assets
96- run : aws s3 sync --cache-control "public, max-age=31536000, immutable" --include "*.css" --include="*.js" --include="*.gif" --include="*.png" --include="*.svg" --exclude "*.html" --exclude="sw.js" --exclude="*.json" --delete public/ s3://${{ secrets.PRODUCTION_BUCKET_NAME }}/
97-
98- - name : Sync all non-cacheable assets
99- # Don't cache any HTML or JSON file: they should always be up-to-dates
100- run : aws s3 sync --cache-control "public, max-age=0, must-revalidate" --include "*.html" --include="sw.js" --include="*.json" --include "*.css" --exclude="*.js" --exclude="*.gif" --exclude="*.png" --exclude="*.svg" --delete public/ s3://${{ secrets.PRODUCTION_BUCKET_NAME }}/
104+ purge-datasheets :
105+ name : Purge Datasheets cache
106+ needs : build
107+ runs-on : ubuntu-latest
108+ environment : production
109+ steps :
110+ - name : Purge Cloudflare Cache
111+ shell : bash
112+ run : |
113+ echo "Purging Cloudflare cache for prefix: ${{ vars.DATASHEETS_BASE_URL }}, zone: ${{ vars.CLOUDFLARE_ZONE }}"
114+ curl -f -X POST "https://api.cloudflare.com/client/v4/zones/${{ vars.CLOUDFLARE_ZONE }}/purge_cache" \
115+ -H "Authorization: Bearer ${{ secrets.CLOUDFLARE_PURGE_API_TOKEN }}" \
116+ -H "Content-Type: application/json" \
117+ --data '{"prefixes":["${{ vars.DATASHEETS_BASE_URL }}"]}'
0 commit comments