diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index e181dbd4..58d59b8b 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -3,6 +3,9 @@ on: push: branches: - master + tags: + - v* + permissions: write-all jobs: @@ -33,16 +36,30 @@ jobs: pnpm install pnpm prepare --${{ matrix.arch }} - name: Build - env: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} run: pnpm build:win --${{ matrix.arch }} - - name: Upload Artifacts uses: actions/upload-artifact@v4 with: name: Windows ${{ matrix.arch }} path: dist/*.exe if-no-files-found: error + - name: Publish Release + if: startsWith(github.ref, 'refs/tags/v') + uses: softprops/action-gh-release@v2 + with: + files: | + dist/*.exe + dist/*.blockmap + token: ${{ secrets.GITHUB_TOKEN }} + - name: Merge Yaml + if: startsWith(github.ref, 'refs/tags/v') + run: pnpm updater latest.yml + - name: Publish Release + if: startsWith(github.ref, 'refs/tags/v') + uses: softprops/action-gh-release@v2 + with: + files: dist/latest.yml + token: ${{ secrets.GITHUB_TOKEN }} linux: strategy: @@ -70,10 +87,7 @@ jobs: pnpm install pnpm prepare --${{ matrix.arch }} - name: Build - env: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} run: pnpm build:linux --${{ matrix.arch }} - - name: Upload Artifacts uses: actions/upload-artifact@v4 with: @@ -82,6 +96,29 @@ jobs: dist/*.deb dist/*.rpm if-no-files-found: error + - name: Publish Release + if: startsWith(github.ref, 'refs/tags/v') + uses: softprops/action-gh-release@v2 + with: + files: | + dist/*.deb + dist/*.rpm + dist/*.blockmap + token: ${{ secrets.GITHUB_TOKEN }} + - name: Merge Yaml + if: startsWith(github.ref, 'refs/tags/v') && matrix.arch == 'x64' + run: pnpm updater latest-linux.yml + - name: Merge Yaml + if: startsWith(github.ref, 'refs/tags/v') && matrix.arch == 'arm64' + run: pnpm updater latest-linux-arm64.yml + - name: Publish Release + if: startsWith(github.ref, 'refs/tags/v') + uses: softprops/action-gh-release@v2 + with: + files: | + dist/latest-linux.yml + dist/latest-linux-arm64.yml + token: ${{ secrets.GITHUB_TOKEN }} macos: strategy: @@ -119,3 +156,21 @@ jobs: name: MacOS ${{ matrix.arch }} path: dist/*.dmg if-no-files-found: error + - name: Publish Release + if: startsWith(github.ref, 'refs/tags/v') + uses: softprops/action-gh-release@v2 + with: + files: | + dist/*.dmg + dist/*.zip + dist/*.blockmap + token: ${{ secrets.GITHUB_TOKEN }} + - name: Merge Yaml + if: startsWith(github.ref, 'refs/tags/v') + run: pnpm updater latest-mac.yml + - name: Publish Release + if: startsWith(github.ref, 'refs/tags/v') + uses: softprops/action-gh-release@v2 + with: + files: dist/latest-mac.yml + token: ${{ secrets.GITHUB_TOKEN }} diff --git a/electron-builder.yml b/electron-builder.yml index 58a0a406..631b4936 100644 --- a/electron-builder.yml +++ b/electron-builder.yml @@ -54,7 +54,4 @@ linux: category: Utility artifactName: ${name}-linux-${version}-${arch}.${ext} npmRebuild: false -publish: - provider: github - owner: pompurin404 - repo: mihomo-party +publish: [] diff --git a/package.json b/package.json index 3887f259..7d11d0d9 100644 --- a/package.json +++ b/package.json @@ -12,6 +12,7 @@ "typecheck:web": "tsc --noEmit -p tsconfig.web.json --composite false", "typecheck": "npm run typecheck:node && npm run typecheck:web", "prepare": "node scripts/prepare.mjs", + "updater": "node scripts/updater.mjs", "dev": "electron-vite dev", "postinstall": "electron-builder install-app-deps", "build:win": "electron-vite build && electron-builder --win", diff --git a/scripts/updater.mjs b/scripts/updater.mjs new file mode 100644 index 00000000..72161e0c --- /dev/null +++ b/scripts/updater.mjs @@ -0,0 +1,32 @@ +/* eslint-disable @typescript-eslint/explicit-function-return-type */ +import axios from 'axios' +import yaml from 'yaml' +import fs from 'fs' + +let file = 'latest.yml' +if (process.argv.slice(2).length !== 0) { + file = process.argv.slice(2)[0] +} + +async function check() { + try { + const res = await axios.get( + `https://github.com/pompurin404/mihomo-party/releases/latest/download/${file}`, + { + headers: { 'Content-Type': 'application/octet-stream' } + } + ) + const remoteData = yaml.parse(res.data) + const currentData = yaml.parse(fs.readFileSync(`dist/${file}`, 'utf8')) + remoteData.files.push(...currentData.files) + remoteData.releaseDate = `${new Date().toISOString()}` + fs.writeFileSync(`dist/${file}`, yaml.stringify(remoteData)) + } catch (error) { + return + } +} + +check().catch((error) => { + console.error(error) + process.exit(0) +})