Skip to content

Commit d7af742

Browse files
authored
Merge pull request ajayyy#2337 from mini-bomba/port-dearrow-autoupdate
Port dearrow autoupdate & source maps
2 parents c22d1b5 + e63a677 commit d7af742

File tree

5 files changed

+178
-20
lines changed

5 files changed

+178
-20
lines changed

.github/workflows/release.yml

Lines changed: 131 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,8 @@ jobs:
1212

1313
steps:
1414
# Initialization
15-
- uses: actions/checkout@v4
15+
- name: Checkout release branch w/submodules
16+
uses: actions/checkout@v5
1617
with:
1718
submodules: recursive
1819
- uses: actions/setup-node@v4
@@ -34,12 +35,27 @@ jobs:
3435
path: ../builds/SourceCodeUseThisOne.zip
3536
repo-token: ${{ secrets.GITHUB_TOKEN }}
3637

38+
- name: Checkout source maps branch
39+
uses: actions/checkout@v5
40+
with:
41+
path: source-maps
42+
ref: source-maps
43+
- name: Set up committer info
44+
run: |
45+
git config --global user.name "github-actions[bot]"
46+
git config --global user.email "41898282+github-actions[bot]@users.noreply.github.com"
3747
- run: npm ci
3848

3949
# Create Firefox artifacts
4050
- name: Create Firefox artifacts
41-
run: npm run build:firefox
51+
run: npm run build:firefox -- --env ghpSourceMaps
4252
- run: mkdir ./builds
53+
- name: Move Firefox source maps to source map repo
54+
run: |
55+
VERSION=`jq -r '.version' ./dist/manifest.json`
56+
mkdir -p "./source-maps/firefox/$VERSION/"
57+
mv -v ./dist/**/*.js.map "./source-maps/firefox/$VERSION/"
58+
cp -v ./dist/**/*.js.LICENSE.txt "./source-maps/firefox/$VERSION/"
4359
- name: Zip Artifacts
4460
run: cd ./dist ; zip -r ../builds/FirefoxExtension.zip *
4561
- name: Upload FirefoxExtension to release
@@ -52,7 +68,13 @@ jobs:
5268

5369
# Create Chrome artifacts
5470
- name: Create Chrome artifacts
55-
run: npm run build:chrome
71+
run: npm run build:chrome -- --env ghpSourceMaps
72+
- name: Move Chrome source maps to source map repo
73+
run: |
74+
VERSION=`jq -r '.version' ./dist/manifest.json`
75+
mkdir -p "./source-maps/chrome/$VERSION/"
76+
mv -v ./dist/**/*.js.map "./source-maps/chrome/$VERSION/"
77+
cp -v ./dist/**/*.js.LICENSE.txt "./source-maps/chrome/$VERSION/"
5678
- name: Zip Artifacts
5779
run: cd ./dist ; zip -r ../builds/ChromeExtension.zip *
5880
- name: Upload ChromeExtension to release
@@ -67,7 +89,13 @@ jobs:
6789
- name: Clear dist for Edge
6890
run: rm -rf ./dist
6991
- name: Create Edge artifacts
70-
run: npm run build:edge
92+
run: npm run build:edge -- --env ghpSourceMaps
93+
- name: Move Edge source maps to source map repo
94+
run: |
95+
VERSION=`jq -r '.version' ./dist/manifest.json`
96+
mkdir -p "./source-maps/edge/$VERSION/"
97+
mv -v ./dist/**/*.js.map "./source-maps/edge/$VERSION/"
98+
cp -v ./dist/**/*.js.LICENSE.txt "./source-maps/edge/$VERSION/"
7199
- name: Zip Artifacts
72100
run: cd ./dist ; zip -r ../builds/EdgeExtension.zip *
73101
- name: Upload EdgeExtension to release
@@ -80,7 +108,13 @@ jobs:
80108

81109
# Create Safari artifacts
82110
- name: Create Safari artifacts
83-
run: npm run build:safari
111+
run: npm run build:safari -- --env ghpSourceMaps
112+
- name: Move Safari source maps to source map repo
113+
run: |
114+
VERSION=`jq -r '.version' ./dist/manifest.json`
115+
mkdir -p "./source-maps/safari/$VERSION/"
116+
mv -v ./dist/**/*.js.map "./source-maps/safari/$VERSION/"
117+
cp -v ./dist/**/*.js.LICENSE.txt "./source-maps/safari/$VERSION/"
84118
- name: Zip Artifacts
85119
run: cd ./dist ; zip -r ../builds/SafariExtension.zip *
86120
- name: Upload SafariExtension to release
@@ -93,7 +127,13 @@ jobs:
93127

94128
# Create Beta artifacts (Builds with the name changed to beta)
95129
- name: Create Chrome Beta artifacts
96-
run: npm run build:chrome -- --env stream=beta
130+
run: npm run build:chrome -- --env stream=beta --env ghpSourceMaps
131+
- name: Move Chrome Beta source maps to source map repo
132+
run: |
133+
VERSION=`jq -r '.version' ./dist/manifest.json`
134+
mkdir -p "./source-maps/chrome-beta/$VERSION/"
135+
mv -v ./dist/**/*.js.map "./source-maps/chrome-beta/$VERSION/"
136+
cp -v ./dist/**/*.js.LICENSE.txt "./source-maps/chrome-beta/$VERSION/"
97137
- name: Zip Artifacts
98138
run: cd ./dist ; zip -r ../builds/ChromeExtensionBeta.zip *
99139
- name: Upload ChromeExtensionBeta to release
@@ -106,11 +146,17 @@ jobs:
106146

107147
# Firefox Beta
108148
- name: Create Firefox Beta artifacts
109-
run: npm run build:firefox -- --env stream=beta
149+
run: npm run build:firefox -- --env stream=beta --env autoupdate --env ghpSourceMaps
110150
- uses: actions/upload-artifact@v4
111151
with:
112152
name: FirefoxExtensionBeta
113153
path: dist
154+
- name: Move Firefox Beta source maps to source map repo
155+
run: |
156+
VERSION=`jq -r '.version' ./dist/manifest.json`
157+
mkdir -p "./source-maps/firefox-beta/$VERSION/"
158+
mv -v ./dist/**/*.js.map "./source-maps/firefox-beta/$VERSION/"
159+
cp -v ./dist/**/*.js.LICENSE.txt "./source-maps/firefox-beta/$VERSION/"
114160
- name: Zip Artifacts
115161
run: cd ./dist ; zip -r ../builds/FirefoxExtensionBeta.zip *
116162

@@ -120,10 +166,8 @@ jobs:
120166
env:
121167
WEB_EXT_API_KEY: ${{ secrets.WEB_EXT_API_KEY }}
122168
WEB_EXT_API_SECRET: ${{ secrets.WEB_EXT_API_SECRET }}
123-
- name: Install rename
124-
run: sudo apt-get install rename
125169
- name: Rename signed file
126-
run: cd ./web-ext-artifacts ; rename 's/.*/FirefoxSignedInstaller.xpi/' *
170+
run: mv ./web-ext-artifacts/* ./web-ext-artifacts/FirefoxSignedInstaller.xpi
127171
- uses: actions/upload-artifact@v4
128172
with:
129173
name: FirefoxExtensionSigned.xpi
@@ -137,3 +181,80 @@ jobs:
137181
path: ./web-ext-artifacts/FirefoxSignedInstaller.xpi
138182
repo-token: ${{ secrets.GITHUB_TOKEN }}
139183

184+
- name: Commit & push new source maps
185+
if: always()
186+
run: |
187+
VERSION=`jq -r '.version' ./dist/manifest.json`
188+
cd ./source-maps
189+
git add .
190+
git commit -m "Publish source maps for version $VERSION"
191+
git push
192+
193+
- name: Prepare new github pages deployment
194+
shell: python
195+
run: |
196+
from pathlib import Path
197+
import json
198+
import shutil
199+
import os
200+
201+
# config stuff
202+
installer_name = "FirefoxSignedInstaller.xpi"
203+
owner, repo_name = os.environ["GITHUB_REPOSITORY"].split("/")
204+
owner = owner.lower()
205+
206+
# create the github paged dir
207+
ghp_dir = Path("./github-pages")
208+
ghp_dir.mkdir(parents=True, exist_ok=True)
209+
210+
# move in the installer
211+
Path("./web-ext-artifacts", installer_name).rename(ghp_dir / installer_name)
212+
213+
# read manifest.json and extract parameters
214+
with open("./dist/manifest.json") as f:
215+
manifest = json.load(f)
216+
current_version = manifest["version"]
217+
ext_id = manifest["browser_specific_settings"]["gecko"]["id"]
218+
219+
# generate updates file
220+
updates = {
221+
"addons": {
222+
ext_id: {
223+
"updates": [
224+
{
225+
"version": current_version,
226+
# param doesn't actually matter, it's just a cachebuster
227+
"update_link": f"https://{owner}.github.io/{repo_name}/{installer_name}?v={current_version}",
228+
},
229+
],
230+
},
231+
},
232+
}
233+
(ghp_dir / "updates.json").write_text(json.dumps(updates))
234+
235+
# copy in source maps
236+
def only_sourcemaps(cur, ls):
237+
if '/' in cur:
238+
return []
239+
return set(ls) - {"chrome", "chrome-beta", "edge", "firefox", "firefox-beta", "safari"}
240+
shutil.copytree("source-maps", ghp_dir, ignore=only_sourcemaps, dirs_exist_ok=True)
241+
242+
- name: Upload new github pages deployment
243+
uses: actions/upload-pages-artifact@v3
244+
with:
245+
path: ./github-pages
246+
247+
deploy-ghp:
248+
name: Deploy to github pages
249+
needs: build
250+
permissions:
251+
id-token: write
252+
pages: write
253+
environment:
254+
name: github-pages
255+
url: ${{ steps.deployment.outputs.page_url }}
256+
runs-on: ubuntu-latest
257+
steps:
258+
- name: Deploy
259+
id: deployment
260+
uses: actions/deploy-pages@v4

tsconfig-production.json

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
"noImplicitAny": false,
66
"noImplicitReturns": true,
77
"noFallthroughCasesInSwitch": true,
8-
"sourceMap": false,
8+
"sourceMap": true,
99
"outDir": "dist/js",
1010
"noEmitOnError": false,
1111
"typeRoots": [ "node_modules/@types" ],
@@ -20,4 +20,4 @@
2020
"include": [
2121
"src/**/*"
2222
]
23-
}
23+
}

webpack/webpack.common.js

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -189,7 +189,8 @@ module.exports = env => {
189189
new BuildManifest({
190190
browser: env.browser,
191191
pretty: env.mode === "production",
192-
stream: env.stream
192+
stream: env.stream,
193+
autoupdate: env.autoupdate,
193194
}),
194195
new configDiffPlugin()
195196
],
@@ -200,4 +201,4 @@ module.exports = env => {
200201
}
201202

202203
};
203-
};
204+
};

webpack/webpack.manifest.js

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -23,10 +23,13 @@ const schema = {
2323
pretty: {
2424
type: 'boolean'
2525
},
26-
steam: {
26+
stream: {
2727
type: 'string'
28+
},
29+
autoupdate: {
30+
type: 'boolean',
2831
}
29-
}
32+
}
3033
};
3134

3235
class BuildManifest {
@@ -39,6 +42,7 @@ class BuildManifest {
3942
apply() {
4043
const distFolder = path.resolve(__dirname, "../dist/");
4144
const distManifestFile = path.resolve(distFolder, "manifest.json");
45+
const [owner, repo_name] = (process.env.GITHUB_REPOSITORY ?? "ajayyy/SponsorBlock").split("/");
4246

4347
// Add missing manifest elements
4448
if (this.options.browser.toLowerCase() === "firefox") {
@@ -62,6 +66,10 @@ class BuildManifest {
6266
}
6367
}
6468

69+
if (this.options.autoupdate === true && this.options.browser.toLowerCase() === "firefox") {
70+
manifest.browser_specific_settings.gecko.update_url = `https://${owner.toLowerCase()}.github.io/${repo_name}/updates.json`;
71+
}
72+
6573
let result = JSON.stringify(manifest);
6674
if (this.options.pretty) result = JSON.stringify(manifest, null, 2);
6775

@@ -86,4 +94,4 @@ function mergeObjects(object1, object2) {
8694
}
8795
}
8896

89-
module.exports = BuildManifest;
97+
module.exports = BuildManifest;

webpack/webpack.prod.js

Lines changed: 31 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,40 @@
11
/* eslint-disable @typescript-eslint/no-var-requires */
2+
const { SourceMapDevToolPlugin } = require('webpack');
23
const { merge } = require('webpack-merge');
34
const common = require('./webpack.common.js');
45

5-
module.exports = env => {
6+
async function createGHPSourceMapURL(env) {
7+
const manifest = require("../manifest/manifest.json");
8+
const version = manifest.version;
9+
const [owner, repo_name] = (process.env.GITHUB_REPOSITORY ?? "ajayyy/SponsorBlock").split("/");
10+
const ghpUrl = `https://${owner.toLowerCase()}.github.io/${repo_name}/${env.browser}${env.stream === "beta" ? "-beta" : ""}/${version}/`;
11+
// make a request to the url and check if we got redirected
12+
// firefox doesn't seem to like getting redirected on a source map request
13+
try {
14+
const resp = await fetch(ghpUrl);
15+
return resp.url;
16+
} catch {
17+
return ghpUrl;
18+
}
19+
}
20+
21+
module.exports = async env => {
622
let mode = "production";
723
env.mode = mode;
824

925
return merge(common(env), {
10-
mode
26+
mode,
27+
...(env.ghpSourceMaps
28+
? {
29+
devtool: false,
30+
plugins: [new SourceMapDevToolPlugin({
31+
publicPath: await createGHPSourceMapURL(env),
32+
filename: '[file].map[query]',
33+
})],
34+
}
35+
: {
36+
devtool: "source-map",
37+
}
38+
),
1139
});
12-
};
40+
};

0 commit comments

Comments
 (0)