1414
1515 publish :
1616 name : Publish
17- runs-on : ubuntu -latest
17+ runs-on : macos -latest
1818 needs : ci
1919 steps :
2020 - name : Checkout Repo
3939 - name : Build
4040 run : bun run build
4141
42- - name : Setup Node.js for NPM
43- uses : actions/setup-node@v4
44- with :
45- node-version : ' 18'
46- registry-url : ' https://registry.npmjs.org'
47-
4842 - name : Create Release Pull Request or Publish to NPM
4943 id : changesets
5044 uses : changesets/action@v1
5347 version : bun run version
5448 commit : " chore: release package"
5549 title : " chore: release package"
50+ createGithubReleases : true
5651 env :
5752 GITHUB_TOKEN : ${{ secrets.GITHUB_TOKEN }}
58- NODE_AUTH_TOKEN : ${{ secrets.NPM_AUTH_TOKEN }}
53+ NODE_AUTH_TOKEN : ${{ secrets.NPM_AUTH_TOKEN }}
54+
55+ - name : Get version
56+ if : steps.changesets.outputs.published == 'true'
57+ run : echo "VERSION=$(node -p "require('./package.json').version")" >> $GITHUB_ENV
58+
59+ - name : Build executables
60+ if : steps.changesets.outputs.published == 'true'
61+ run : |
62+ # macOS (Intel)
63+ bun build src/cli.ts --compile --outfile dependency-optimizer-macos-x64
64+ # macOS (Apple Silicon)
65+ bun build src/cli.ts --compile --outfile dependency-optimizer-macos-arm64 --target=bun-darwin-arm64
66+ # Linux
67+ bun build src/cli.ts --compile --outfile dependency-optimizer-linux-x64 --target=bun-linux-x64
68+ # Windows
69+ bun build src/cli.ts --compile --outfile dependency-optimizer-windows-x64.exe --target=bun-windows-x64
70+
71+ - name : Upload executables to release
72+ if : steps.changesets.outputs.published == 'true'
73+ uses : actions/github-script@v7
74+ with :
75+ script : |
76+ const fs = require('fs');
77+ const { Octokit } = require('@octokit/rest');
78+ const octokit = new Octokit({ auth: process.env.GITHUB_TOKEN });
79+ const tag = `v${process.env.VERSION}`;
80+ const release = await octokit.repos.getReleaseByTag({
81+ owner: context.repo.owner,
82+ repo: context.repo.repo,
83+ tag: tag
84+ });
85+
86+ const executables = [
87+ { name: 'dependency-optimizer-macos-x64', path: 'dependency-optimizer-macos-x64' },
88+ { name: 'dependency-optimizer-macos-arm64', path: 'dependency-optimizer-macos-arm64' },
89+ { name: 'dependency-optimizer-linux-x64', path: 'dependency-optimizer-linux-x64' },
90+ { name: 'dependency-optimizer-windows-x64.exe', path: 'dependency-optimizer-windows-x64.exe' }
91+ ];
92+
93+ for (const exe of executables) {
94+ if (fs.existsSync(exe.path)) {
95+ const file = fs.readFileSync(exe.path);
96+ await octokit.repos.uploadReleaseAsset({
97+ owner: context.repo.owner,
98+ repo: context.repo.repo,
99+ release_id: release.data.id,
100+ name: exe.name,
101+ data: file
102+ });
103+ }
104+ }
0 commit comments