diff --git a/.github/workflows/buildArtifact.yml b/.github/workflows/buildArtifact.yml new file mode 100644 index 0000000..8dbd153 --- /dev/null +++ b/.github/workflows/buildArtifact.yml @@ -0,0 +1,126 @@ +name: 'Artifact Build' + +on: + workflow_dispatch: + push: + branches: + - 'main' + tags: + - '*' + +jobs: + create-release: + runs-on: ubuntu-20.04 + outputs: # Only one of these results will have content + release_id: ${{ steps.create-release.outputs.result }}${{ steps.create-pre-release.outputs.result }} + + steps: + - uses: actions/checkout@v3 + - name: setup node + uses: actions/setup-node@v3 + with: + node-version: 16 + - name: get version + run: echo "PACKAGE_VERSION=$(node -p "require('./package.json').version")" >> $GITHUB_ENV + - name: Set short git commit SHA + run: echo "SHORT_SHA=$(git rev-parse --short ${{ github.sha }})" >> $GITHUB_ENV + - name: create pre-release + if: ${{ !startsWith(github.ref, 'refs/tags/') }} + id: create-pre-release + uses: actions/github-script@v6 + with: + script: | + const { data } = await github.rest.repos.createRelease({ + owner: context.repo.owner, + repo: context.repo.repo, + tag_name: `app-v${process.env.PACKAGE_VERSION}-${process.env.SHORT_SHA}`, + name: `Latent Web Browser v${process.env.PACKAGE_VERSION}-${process.env.SHORT_SHA}`, + body: 'Take a look at the assets to download and install this app.', + draft: true, + prerelease: true, + generate_release_notes: true + }) + + return data.id + - name: create release + if: ${{ startsWith(github.ref, 'refs/tags/') }} + id: create-release + uses: actions/github-script@v6 + with: + script: | + const { data } = await github.rest.repos.createRelease({ + owner: context.repo.owner, + repo: context.repo.repo, + tag_name: `${{ github.ref_name }}`, + name: `Latent Web Browser ${{ github.ref_name }}`, + body: 'Take a look at the assets to download and install this app.', + draft: true, + prerelease: false, + generate_release_notes: true + }) + + return data.id + + build-tauri: + needs: create-release + strategy: + fail-fast: false + matrix: + platform: [macos-latest, ubuntu-20.04, windows-latest] + + runs-on: ${{ matrix.platform }} + steps: + - uses: actions/checkout@v3 + - name: setup node + uses: actions/setup-node@v3 + with: + node-version: 16 + - name: install Rust stable + uses: dtolnay/rust-toolchain@stable + - name: install dependencies (ubuntu only) + if: matrix.platform == 'ubuntu-20.04' + run: | + sudo apt-get update + sudo apt-get install -y libgtk-3-dev libwebkit2gtk-4.0-dev libappindicator3-dev librsvg2-dev patchelf + - name: install app dependencies and build it + run: yarn && yarn build + - uses: tauri-apps/tauri-action@v0 + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + with: + releaseId: ${{ needs.create-release.outputs.release_id }} + + publish-release: + runs-on: ubuntu-20.04 + needs: [create-release, build-tauri] + steps: + - name: publish release + id: publish-release + uses: actions/github-script@v6 + env: + release_id: ${{ needs.create-release.outputs.release_id }} + with: + script: | + github.rest.repos.updateRelease({ + owner: context.repo.owner, + repo: context.repo.repo, + release_id: process.env.release_id, + draft: false, + }) + delete-failed-release: + runs-on: ubuntu-20.04 + needs: [create-release, build-tauri, publish-release] + if: ${{ failure() }} + steps: + - name: delete release + id: delete-release + uses: actions/github-script@v6 + env: + release_id: ${{ needs.create-release.outputs.release_id }} + with: + script: | + github.rest.repos.deleteRelease({ + owner: context.repo.owner, + repo: context.repo.repo, + release_id: process.env.release_id + })