diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml new file mode 100644 index 0000000..368f26a --- /dev/null +++ b/.github/workflows/release.yml @@ -0,0 +1,105 @@ +name: Build and Release Electron App + +on: + push: + branches: + - master + pull_request: + branches: + - master + +jobs: + build-macos: + runs-on: macos-latest + steps: + - name: Check out code + uses: actions/checkout@v2 + - name: Set up Node.js + uses: actions/setup-node@v2 + with: + node-version: '20.8.1' + - name: Install dependencies + run: yarn install + - name: Build Electron app for macOS + env: + GH_TOKEN: ${{ secrets.GH_TOKEN }} + run: yarn dist --mac + - name: Upload macOS build artifacts + uses: actions/upload-artifact@v2 + with: + name: electron-app-macos + path: dist/*.dmg + + build-windows: + runs-on: windows-latest + steps: + - name: Check out code + uses: actions/checkout@v2 + - name: Set up Node.js + uses: actions/setup-node@v2 + with: + node-version: '20.8.1' + - name: Install dependencies + run: yarn install + - name: Build Electron app for Windows + env: + GH_TOKEN: ${{ secrets.GH_TOKEN }} + run: yarn dist --win + - name: Upload Windows build artifacts + uses: actions/upload-artifact@v2 + with: + name: electron-app-windows + path: dist/*.exe + + build-linux: + runs-on: ubuntu-latest + steps: + - name: Check out code + uses: actions/checkout@v2 + - name: Set up Node.js + uses: actions/setup-node@v2 + with: + node-version: '20.8.1' + - name: Install dependencies + run: yarn install + - name: Build Electron app for Linux + env: + GH_TOKEN: ${{ secrets.GH_TOKEN }} + run: yarn dist --linux + - name: Upload Linux build artifacts + uses: actions/upload-artifact@v2 + with: + name: electron-app-linux + path: dist/*.AppImage + + release: + needs: [build-macos, build-windows, build-linux] + runs-on: ubuntu-latest + steps: + - name: Check out code + uses: actions/checkout@v2 + - name: Set up Node.js + uses: actions/setup-node@v3 + with: + node-version: '20.8.1' + - name: Clear npm cache + run: npm cache clean --force + - name: Download macOS build artifacts + uses: actions/download-artifact@v2 + with: + name: electron-app-macos + path: dist/macos + - name: Download Windows build artifacts + uses: actions/download-artifact@v2 + with: + name: electron-app-windows + path: dist/windows + - name: Download Linux build artifacts + uses: actions/download-artifact@v2 + with: + name: electron-app-linux + path: dist/linux + - name: Run semantic-release + env: + GITHUB_TOKEN: ${{ secrets.GH_TOKEN }} + run: yarn release diff --git a/package.json b/package.json index acc362c..f9028b4 100644 --- a/package.json +++ b/package.json @@ -9,7 +9,8 @@ "start": "npx serve@latest out", "lint": "next lint", "electron": "electron .", - "dist": "yarn build && electron-builder" + "dist": "yarn build && electron-builder", + "release": "npx -p semantic-release -p @semantic-release/git -p @semantic-release/changelog -p @semantic-release/exec semantic-release" }, "build": { "appId": "org.casbin.editor", @@ -30,6 +31,14 @@ "identity": null, "hardenedRuntime": false }, + "linux": { + "target": [ + "AppImage", + "deb" + ], + "category": "Utility", + "maintainer": "org.casbin.editor" + }, "win": { "target": "nsis" }, @@ -38,6 +47,34 @@ "allowToChangeInstallationDirectory": true } }, + "release": { + "branches": [ + "master" + ], + "plugins": [ + "@semantic-release/commit-analyzer", + "@semantic-release/release-notes-generator", + [ + "@semantic-release/github", + { + "assets": [ + { + "path": "dist/macos/*.dmg", + "label": "macOS" + }, + { + "path": "dist/windows/*.exe", + "label": "Windows" + }, + { + "path": "dist/linux/*.AppImage", + "label": "Linux" + } + ] + } + ] + ] + }, "dependencies": { "@codemirror/autocomplete": "^6.12.0", "@codemirror/lang-javascript": "^6.2.1",