Repository navigation
98 lines (86 loc) · 5.04 KB
/
Copy pathbuild-scriptable-package.yml
File metadata and controls
98 lines (86 loc) · 5.04 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
name: Build Scriptable install package
on:
push:
branches: [Master]
paths:
- 'apps/LockScreenGenerator/LockScreenGenerator.js'
- '.github/scripts/build_scriptable_package.py'
- '.github/workflows/build-scriptable-package.yml'
workflow_dispatch:
permissions:
contents: write
jobs:
build:
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v4
with:
ref: Master
- name: Validate JavaScript syntax
run: |
cp 'apps/LockScreenGenerator/LockScreenGenerator.js' /tmp/LockScreenGenerator.mjs
node --check /tmp/LockScreenGenerator.mjs
- name: Build package
run: python .github/scripts/build_scriptable_package.py
- name: Sync README, website and version metadata
run: python .github/scripts/sync_release_metadata.py
- name: Validate one-source-of-truth release
run: |
python - <<'PY'
import json,re
from pathlib import Path
app=Path('apps/LockScreenGenerator')
src=(app/'LockScreenGenerator.js').read_text(encoding='utf-8')
pkg=json.loads((app/'LockScreenGenerator.scriptable').read_text(encoding='utf-8'))
app_readme=(app/'README.md').read_text(encoding='utf-8')
app_readme_en=(app/'README_EN.md').read_text(encoding='utf-8')
root_readme=Path('README.md').read_text(encoding='utf-8')
root_readme_en=Path('README_EN.md').read_text(encoding='utf-8')
site=Path('assets/js/index-page.js').read_text(encoding='utf-8')
vm=re.search(r'const APP_VERSION\s*=\s*"([^"]+)"',src)
assert vm, 'APP_VERSION missing'
version=vm.group(1)
assert pkg['name']=='LockScreen Generator'
assert pkg['script']==src, '.scriptable does not contain exact LockScreenGenerator.js'
assert json.loads((app/'version.json').read_text(encoding='utf-8'))['version']==version
assert f'VERZE-v{version}-38BDF8' in app_readme, 'CZ app README version mismatch'
assert f'VERSION-v{version}-38BDF8' in app_readme_en, 'EN app README version mismatch'
marker=f'<strong>LockScreen Generator</strong></td><td><code>v{version}</code>'
assert marker in root_readme, 'CZ root README version mismatch'
assert marker in root_readme_en, 'EN root README version mismatch'
assert f"{{name:'LockScreen Generator',version:'{version}'" in site, 'website version mismatch'
assert "install:'./apps/LockScreenGenerator/LockScreenGenerator.scriptable'" in site, 'website install path mismatch'
assert 'https://raw.githubusercontent.com/CaseyCZ/Scriptable/Master/apps/LockScreenGenerator/LockScreenGenerator.js' in src, 'updater is not pinned to Master'
assert 'repr(' not in src, 'Python repr leaked into JavaScript'
assert 'falsewindow.__updateReady' not in src, 'missing WebView statement separator'
assert 'JSON.stringify(PHONE_TEXT.loading)' not in src, 'PHONE_TEXT evaluated in the wrong JS context'
assert 'async function fetchCrypto(settings,value)' in src, 'crypto settings are not passed into fetchCrypto'
assert 'fetchCrypto(settings,settings.cryptoCoins)' in src, 'crypto call does not pass settings'
assert 'const overlayBase64=png.toBase64String()' in src, 'Shortcut overlay Base64 fallback missing'
assert 'Script.setShortcutOutput(overlayBase64)' in src, 'Shortcut overlay Base64 fallback is not returned'
assert 'Data.fromPNG(image)' in src, 'PNG image encoding missing'
assert 'Script.setShortcutOutput(out)' not in src, 'Old temporary file-path output still present'
assert 'wallpaperSource:"shortcut"' in src, 'Shortcut wallpaper mode default missing'
assert 'const BACKGROUND_FILE = "LockScreenGenerator_background.png"' in src, 'Stored wallpaper file missing'
assert 'Array.isArray(args.images)&&args.images.length?args.images[0]:null' in src, 'Shortcut Images input missing'
assert 'Photos.fromLibrary()' in src, 'Generator photo picker missing'
assert 'composeWallpaper(size,background,overlay)' in src, 'Internal wallpaper composition missing'
assert 'Script.setShortcutOutput(path)' in src, 'Finished wallpaper path is not returned to Shortcuts'
assert len(src)>20000
print(f'LockScreen Generator v{version}: package, website and CZ/EN READMEs synchronized')
PY
- name: Commit synchronized release files
run: |
git config user.name "CaseyCZ"
git config user.email "25530709+CaseyCZ@users.noreply.github.com"
git add \
'apps/LockScreenGenerator/LockScreenGenerator.scriptable' \
README.md README_EN.md assets/js/index-page.js \
apps/*/README.md apps/*/README_EN.md apps/*/version.json
if git diff --cached --quiet; then
echo "Release surfaces already synchronized"
exit 0
fi
git commit -m "Sync Scriptable release metadata"
git push origin HEAD:Master