|
71 | 71 |
|
72 | 72 | - name: Build Windows app and installer |
73 | 73 | shell: pwsh |
74 | | - run: wails build -clean -nsis -platform windows/amd64 |
| 74 | + env: |
| 75 | + SUBSCRIPTION_ENCRYPT_KEY: ${{ secrets.SUBSCRIPTION_ENCRYPT_KEY }} |
| 76 | + run: | |
| 77 | + $key = $env:SUBSCRIPTION_ENCRYPT_KEY |
| 78 | + if ($key) { |
| 79 | + wails build -clean -nsis -platform windows/amd64 -ldflags "-X resultproxy-wails/internal/proxy.subscriptionEncryptKey=$key" |
| 80 | + } else { |
| 81 | + Write-Warning "Secret SUBSCRIPTION_ENCRYPT_KEY not set — building without decryption key" |
| 82 | + wails build -clean -nsis -platform windows/amd64 |
| 83 | + } |
75 | 84 |
|
76 | 85 | - name: Validate Windows artifacts |
77 | 86 | shell: pwsh |
@@ -114,18 +123,47 @@ jobs: |
114 | 123 | - name: Parse update.json and format Release Data |
115 | 124 | id: prepare_release |
116 | 125 | run: | |
117 | | - node -e " |
| 126 | + cat > prepare_release.cjs <<'NODE_EOF' |
118 | 127 | const fs = require('fs'); |
119 | 128 | const update = JSON.parse(fs.readFileSync('update.json', 'utf8')); |
120 | | - let notesText = update.releaseNotes.replace(/\. /g, '.\n-'); |
121 | | - if (!notesText.startsWith('-')) notesText = '-' + notesText; |
122 | | - if (notesText.endsWith('-')) notesText = notesText.slice(0, -1); |
123 | | - const title = String(update.releaseTitle || '').trim() || 'Bug Fixes & Improvements'; |
124 | | - const releaseBody = 'Что нового в версии ' + update.version + '?\n\n' + notesText + '\n\n🌐 Официальный сайт: ' + new URL(update.downloadUrl).hostname; |
| 129 | +
|
| 130 | + const pickLang = (v, lang) => { |
| 131 | + if (v == null) return ''; |
| 132 | + if (typeof v === 'string') return v; |
| 133 | + return v[lang] || v.ru || v.en || Object.values(v)[0] || ''; |
| 134 | + }; |
| 135 | +
|
| 136 | + const formatBullets = (text) => { |
| 137 | + const t = String(text || '').trim(); |
| 138 | + if (!t) return ''; |
| 139 | + let out = t.replace(/\. /g, '.\n-'); |
| 140 | + if (!out.startsWith('-')) out = '-' + out; |
| 141 | + if (out.endsWith('-')) out = out.slice(0, -1); |
| 142 | + return out; |
| 143 | + }; |
| 144 | +
|
| 145 | + const ruNotes = formatBullets(pickLang(update.releaseNotes, 'ru')); |
| 146 | + const enNotes = formatBullets(pickLang(update.releaseNotes, 'en')); |
| 147 | + const ruTitle = pickLang(update.releaseTitle, 'ru').trim() || 'Bug Fixes & Improvements'; |
| 148 | + const enTitle = pickLang(update.releaseTitle, 'en').trim() || ruTitle; |
| 149 | + const host = new URL(update.downloadUrl).hostname; |
| 150 | +
|
| 151 | + const sections = []; |
| 152 | + if (ruNotes) { |
| 153 | + sections.push(`Что нового в версии ${update.version}?\n\n${ruNotes}\n\n🌐 Официальный сайт: ${host}`); |
| 154 | + } |
| 155 | + if (enNotes && enNotes !== ruNotes) { |
| 156 | + sections.push(`What's new in version ${update.version}?\n\n${enNotes}\n\n🌐 Official website: ${host}`); |
| 157 | + } |
| 158 | + const releaseBody = sections.join('\n\n---\n\n'); |
125 | 159 | fs.writeFileSync('RELEASE_BODY.txt', releaseBody); |
126 | | - const fsOut = require('fs'); |
127 | | - fsOut.appendFileSync(process.env.GITHUB_OUTPUT, 'release_name=ResultV v' + update.version + ' - ' + title + '\n'); |
128 | | - " |
| 160 | +
|
| 161 | + const releaseName = enTitle && enTitle !== ruTitle |
| 162 | + ? `ResultV v${update.version} - ${ruTitle} / ${enTitle}` |
| 163 | + : `ResultV v${update.version} - ${ruTitle}`; |
| 164 | + fs.appendFileSync(process.env.GITHUB_OUTPUT, `release_name=${releaseName}\n`); |
| 165 | + NODE_EOF |
| 166 | + node prepare_release.cjs |
129 | 167 |
|
130 | 168 | - name: Download all workflow assets |
131 | 169 | uses: actions/download-artifact@v4 |
|
0 commit comments