1+ name : CI/CD Pipeline
2+
3+ on :
4+ push :
5+ branches : [ master, develop ]
6+ pull_request :
7+ branches : [ master ]
8+ release :
9+ types : [ published ]
10+
11+ jobs :
12+ # Job for linting and type checking
13+ lint :
14+ name : Lint and Type Check
15+ runs-on : ubuntu-latest
16+
17+ steps :
18+ - name : Checkout code
19+ uses : actions/checkout@v4
20+
21+ - name : Setup Node.js
22+ uses : actions/setup-node@v4
23+ with :
24+ node-version : ' 20'
25+ cache : ' npm'
26+
27+ - name : Install dependencies
28+ run : npm ci
29+
30+ - name : Run type check
31+ run : npm run type-check
32+
33+ - name : Run linting
34+ run : npm run lint
35+
36+
37+
38+ # Job for creating nightly builds
39+ nightly :
40+ name : Create Nightly Build
41+ runs-on : ubuntu-latest
42+ needs : lint
43+ if : github.event_name == 'push' && github.ref == 'refs/heads/master'
44+
45+ steps :
46+ - name : Checkout code
47+ uses : actions/checkout@v4
48+
49+ - name : Setup Node.js
50+ uses : actions/setup-node@v4
51+ with :
52+ node-version : ' 20'
53+ cache : ' npm'
54+
55+ - name : Install dependencies
56+ run : npm ci
57+
58+ - name : Build extensions
59+ run : npm run build
60+
61+ - name : Create Chrome extension zip
62+ run : |
63+ cd dist/chrome
64+ zip -r ../../tosdr-chrome-nightly.zip .
65+
66+ - name : Create Firefox extension zip
67+ run : |
68+ cd dist/firefox
69+ zip -r ../../tosdr-firefox-nightly.zip .
70+
71+ - name : Upload nightly builds
72+ uses : actions/upload-artifact@v4
73+ with :
74+ name : nightly-builds
75+ path : |
76+ tosdr-chrome-nightly.zip
77+ tosdr-firefox-nightly.zip
78+ retention-days : 7
79+
80+ # Job for creating release builds
81+ release :
82+ name : Create Release Build
83+ runs-on : ubuntu-latest
84+ needs : lint
85+ if : github.event_name == 'release'
86+
87+ steps :
88+ - name : Checkout code
89+ uses : actions/checkout@v4
90+
91+ - name : Setup Node.js
92+ uses : actions/setup-node@v4
93+ with :
94+ node-version : ' 20'
95+ cache : ' npm'
96+
97+ - name : Install dependencies
98+ run : npm ci
99+
100+ - name : Build extensions
101+ run : npm run build
102+
103+ - name : Create Chrome extension zip
104+ run : |
105+ cd dist/chrome
106+ zip -r ../../tosdr-chrome-v${{ github.event.release.tag_name }}.zip .
107+
108+ - name : Create Firefox extension zip
109+ run : |
110+ cd dist/firefox
111+ zip -r ../../tosdr-firefox-v${{ github.event.release.tag_name }}.zip .
112+
113+ - name : Upload release builds
114+ uses : actions/upload-artifact@v4
115+ with :
116+ name : release-builds
117+ path : |
118+ tosdr-chrome-v${{ github.event.release.tag_name }}.zip
119+ tosdr-firefox-v${{ github.event.release.tag_name }}.zip
120+ retention-days : 90
121+
122+ # Job for publishing release assets
123+ publish-release :
124+ name : Publish Release Assets
125+ runs-on : ubuntu-latest
126+ needs : release
127+ if : github.event_name == 'release'
128+ permissions :
129+ contents : write
130+
131+ steps :
132+ - name : Download release artifacts
133+ uses : actions/download-artifact@v4
134+ with :
135+ name : release-builds
136+
137+ - name : Upload Chrome extension to release
138+ uses : actions/upload-release-asset@v1
139+ env :
140+ GITHUB_TOKEN : ${{ secrets.GITHUB_TOKEN }}
141+ with :
142+ upload_url : ${{ github.event.release.upload_url }}
143+ asset_path : ./tosdr-chrome-v${{ github.event.release.tag_name }}.zip
144+ asset_name : tosdr-chrome-v${{ github.event.release.tag_name }}.zip
145+ asset_content_type : application/zip
146+
147+ - name : Upload Firefox extension to release
148+ uses : actions/upload-release-asset@v1
149+ env :
150+ GITHUB_TOKEN : ${{ secrets.GITHUB_TOKEN }}
151+ with :
152+ upload_url : ${{ github.event.release.upload_url }}
153+ asset_path : ./tosdr-firefox-v${{ github.event.release.tag_name }}.zip
154+ asset_name : tosdr-firefox-v${{ github.event.release.tag_name }}.zip
155+ asset_content_type : application/zip
0 commit comments