From cd57f34c364545793742169bf2d9287a5ca44dfe Mon Sep 17 00:00:00 2001 From: Amit Haridas Date: Mon, 8 Jun 2026 06:48:00 +0530 Subject: [PATCH] ci(release): publish latest.yml on all platforms, mirror to ConcreteInfo --- .github/workflows/release.yml | 21 +++++++++++--- package.json | 3 +- scripts/publish-concreteinfo.js | 49 +++++++++++++++++++++++++++++++++ 3 files changed, 68 insertions(+), 5 deletions(-) create mode 100644 scripts/publish-concreteinfo.js diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 5a5eb25..5117d71 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -29,7 +29,7 @@ jobs: run: npm test - name: Build Linux packages - run: npm run build:linux-ci -- --publish=never + run: npm run build:linux-ci -- --publish=always - name: Upload Linux artifacts uses: actions/upload-artifact@v4 @@ -77,13 +77,13 @@ jobs: env: CSC_LINK: code-signing-cert.pfx CSC_KEY_PASSWORD: ${{ secrets.CSC_KEY_PASSWORD }} - run: npm run build:win-signed -- --publish=never + run: npm run build:win-signed -- --publish=always - name: Build Windows packages (unsigned) if: ${{ env.CERT_AVAILABLE != 'true' }} env: CSC_IDENTITY_AUTO_DISCOVERY: 'false' - run: npm run build:win-unsigned -- --publish=never + run: npm run build:win-unsigned -- --publish=always - name: Upload Windows artifacts uses: actions/upload-artifact@v4 @@ -117,7 +117,7 @@ jobs: - name: Build macOS packages (unsigned) env: CSC_IDENTITY_AUTO_DISCOVERY: 'false' - run: npm run build:mac -- --publish=never + run: npm run build:mac -- --publish=always - name: Upload macOS artifacts uses: actions/upload-artifact@v4 @@ -161,3 +161,16 @@ jobs: with: generate_release_notes: true files: dist/* + + - name: Mirror artifacts to ConcreteInfo update feed + if: env.CONCRETEINFO_DEPLOY_HOOK != '' + env: + CONCRETEINFO_DEPLOY_HOOK: ${{ secrets.CONCRETEINFO_DEPLOY_HOOK }} + run: | + curl -fsSL -X POST \ + -H "Authorization: Bearer ${{ secrets.CONCRETEINFO_DEPLOY_HOOK }}" \ + -F "version=${GITHUB_REF_NAME#v}" \ + -F "artifacts=@dist/latest-mac.yml" \ + -F "artifacts=@dist/latest-linux.yml" \ + -F "artifacts=@dist/latest-windows.yml" \ + https://updates.concreteinfo.co.in/api/v1/ingest diff --git a/package.json b/package.json index 40ec35f..c8ec532 100644 --- a/package.json +++ b/package.json @@ -33,7 +33,8 @@ "dist:all": "electron-builder -mwl", "download-tools": "node scripts/download-tools.js", "generate-icons": "node scripts/generate-icons.js", - "build:icon-icns": "node scripts/build-icon-icns.js" + "build:icon-icns": "node scripts/build-icon-icns.js", + "publish:concreteinfo": "node scripts/publish-concreteinfo.js" }, "keywords": [ "markdown", diff --git a/scripts/publish-concreteinfo.js b/scripts/publish-concreteinfo.js new file mode 100644 index 0000000..e26fc64 --- /dev/null +++ b/scripts/publish-concreteinfo.js @@ -0,0 +1,49 @@ +#!/usr/bin/env node +const fs = require('fs'); +const path = require('path'); + +const version = process.argv[2] || require('../package.json').version; +const hook = process.env.CONCRETEINFO_DEPLOY_HOOK; +if (!hook) { + console.error('CONCRETEINFO_DEPLOY_HOOK not set'); + process.exit(1); +} + +const candidates = [ + 'latest-mac.yml', + 'latest-linux.yml', + 'latest-windows.yml', + `MarkdownConverter-${version}.dmg`, + `markdown-converter_${version}_amd64.deb`, + `MarkdownConverter-Setup-${version}.exe`, +]; + +const dist = path.resolve(__dirname, '..', 'dist'); +for (const f of candidates) { + if (!fs.existsSync(path.join(dist, f))) { + console.error(`missing ${f} — run electron-builder first`); + process.exit(1); + } +} + +const form = new FormData(); +form.append('version', version); +for (const f of candidates) { + if (fs.existsSync(path.join(dist, f))) { + form.append('artifacts', fs.createReadStream(path.join(dist, f)), f); + } +} + +fetch('https://updates.concreteinfo.co.in/api/v1/ingest', { + method: 'POST', + headers: { Authorization: `Bearer ${hook}` }, + body: form, +}) + .then((r) => { + console.log('ingest status', r.status); + process.exit(r.ok ? 0 : 1); + }) + .catch((e) => { + console.error('ingest failed:', e); + process.exit(1); + }); \ No newline at end of file