Skip to content

Commit 241267a

Browse files
authored
Add CI/CD (#116)
* Try CI/CD * Update .gitignore to exclude package-lock.json and add package-lock.json for dependency management * update package lock * try to fix nightly * remove redunant build
1 parent 61e0f40 commit 241267a

File tree

7 files changed

+5789
-20
lines changed

7 files changed

+5789
-20
lines changed

.eslintrc.yml

Lines changed: 0 additions & 19 deletions
This file was deleted.

.github/workflows/ci-cd.yml

Lines changed: 155 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,155 @@
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

.gitignore

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
11
node_modules/
22
build/
33
dist/
4-
package-lock.json
54
tsc/

bun.lock

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
"": {
55
"name": "tosdr_browser_extension",
66
"devDependencies": {
7+
"@eslint/js": "^9.31.0",
78
"@types/chrome": "^0.1.0",
89
"@types/node": "^24.0.14",
910
"@typescript-eslint/eslint-plugin": "^8.37.0",

eslint.config.js

Lines changed: 59 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,59 @@
1+
import js from '@eslint/js';
2+
import typescript from '@typescript-eslint/eslint-plugin';
3+
import typescriptParser from '@typescript-eslint/parser';
4+
5+
export default [
6+
js.configs.recommended,
7+
{
8+
languageOptions: {
9+
ecmaVersion: 'latest',
10+
sourceType: 'module',
11+
globals: {
12+
// Browser globals
13+
console: 'readonly',
14+
document: 'readonly',
15+
window: 'readonly',
16+
navigator: 'readonly',
17+
fetch: 'readonly',
18+
atob: 'readonly',
19+
btoa: 'readonly',
20+
setTimeout: 'readonly',
21+
setInterval: 'readonly',
22+
clearTimeout: 'readonly',
23+
clearInterval: 'readonly',
24+
// Browser extension globals
25+
browser: 'readonly',
26+
chrome: 'readonly',
27+
webextensions: 'readonly',
28+
// Node.js globals
29+
process: 'readonly',
30+
node: 'readonly',
31+
// Additional globals
32+
global: 'readonly',
33+
Buffer: 'readonly',
34+
__dirname: 'readonly',
35+
__filename: 'readonly',
36+
},
37+
},
38+
plugins: {
39+
'@typescript-eslint': typescript,
40+
},
41+
rules: {
42+
...typescript.configs.recommended.rules,
43+
// Disable some overly strict rules for browser extensions
44+
'@typescript-eslint/no-explicit-any': 'warn',
45+
},
46+
},
47+
{
48+
files: ['**/*.ts'],
49+
languageOptions: {
50+
parser: typescriptParser,
51+
parserOptions: {
52+
project: './tsconfig.json',
53+
},
54+
},
55+
},
56+
{
57+
ignores: ['dist/*', 'build/*', 'src/scripts/dist/*', 'tsc/*'],
58+
},
59+
];

0 commit comments

Comments
 (0)