name: Build and Release on: push: branches: - main tags: - 'v*' workflow_dispatch: jobs: build: strategy: matrix: include: - os: ubuntu-latest platform: linux - os: windows-latest platform: win - os: macos-latest platform: mac runs-on: ${{ matrix.os }} steps: - uses: actions/checkout@v4 - uses: actions/setup-node@v4 with: node-version: '22' cache: 'npm' - run: npm ci - name: Build for ${{ matrix.os }} run: npm run build:${{ matrix.platform }} - name: Upload Artifacts for ${{ matrix.os }} uses: actions/upload-artifact@v4 with: name: ${{ matrix.os }}-builds path: | dist/*.exe dist/*.exe.blockmap dist/*.dmg dist/*.zip dist/*.AppImage dist/*.AppImage.blockmap dist/*.deb dist/*.rpm dist/*.pkg.tar.zst dist/latest*.yml release: needs: build runs-on: ubuntu-latest if: | startsWith(github.ref, 'refs/tags/v') steps: - name: Download all artifacts uses: actions/download-artifact@v4 with: path: artifacts merge-multiple: true - name: Display structure of downloaded files run: ls -R artifacts - name: Get version from package.json id: pkg_version run: echo "VERSION=$(node -p "require('./package.json').version")" >> $GITHUB_OUTPUT - name: Create Release uses: softprops/action-gh-release@v2 with: tag_name: ${{ github.ref_type == 'tag' && github.ref_name || format('v{0}.r{1}', steps.pkg_version.outputs.VERSION, github.run_number) }} files: | artifacts/ubuntu-latest-builds/**/* artifacts/windows-latest-builds/**/* artifacts/macos-latest-builds/**/* generate_release_notes: true draft: true prerelease: false # BACKUP # build-linux: # runs-on: ubuntu-latest # steps: # - uses: actions/checkout@v4 # # Not needed anymore due to the removal of Pacman builds # # - name: Install build dependencies # # run: | # # sudo apt-get update # # sudo apt-get install -y libarchive-tools # - uses: actions/setup-node@v4 # with: # node-version: '22' # cache: 'npm' # - run: npm ci # - name: Build Linux Packages # run: | # npx electron-builder --linux --x64 --arm64 --publish never # - uses: actions/upload-artifact@v4 # with: # name: linux-builds # path: | # dist/*.AppImage # dist/*.AppImage.blockmap # dist/*.deb # dist/*.rpm # dist/*.pkg.tar.zst # dist/latest-linux.yml # build-windows: # runs-on: windows-latest # steps: # - uses: actions/checkout@v4 # - uses: actions/setup-node@v4 # with: # node-version: '22' # cache: 'npm' # - run: npm ci # - name: Build Windows Packages # run: npx electron-builder --win --publish never # - uses: actions/upload-artifact@v4 # with: # name: windows-builds # path: | # dist/*.exe # dist/*.exe.blockmap # dist/latest.yml # build-macos: # runs-on: macos-latest # steps: # - uses: actions/checkout@v4 # - uses: actions/setup-node@v4 # with: # node-version: '22' # cache: 'npm' # - run: npm ci # - name: Build macOS Packages # run: npx electron-builder --mac --publish never # - uses: actions/upload-artifact@v4 # with: # name: macos-builds # path: | # dist/*.dmg # dist/*.zip # dist/latest-mac.yml # release: # needs: [build-linux, build-windows, build-macos] # runs-on: ubuntu-latest # if: | # startsWith(github.ref, 'refs/tags/v') || # github.ref == 'refs/heads/release' || # github.event_name == 'workflow_dispatch' # permissions: # contents: write # steps: # # FIX: './package.json' Module Not Found in `Get version` step # - name: Checkout code # uses: actions/checkout@v4 # - name: Download all artifacts # uses: actions/download-artifact@v4 # with: # path: artifacts # - name: Display structure of downloaded files # run: ls -R artifacts # - name: Get version from package.json # id: pkg_version # run: echo "VERSION=$(node -p "require('./package.json').version")" >> $GITHUB_OUTPUT # - name: Create Release # uses: softprops/action-gh-release@v2 # with: # # If it's a tag, use the tag. # tag_name: ${{ github.ref_type == 'tag' && github.ref_name || format('v{0}.r{1}', steps.pkg_version.outputs.VERSION, github.run_number) }} # # If it's the 'release' branch, use 'v2.0.2-beta.r42' # name: ${{ github.ref_type == 'tag' && github.ref_name || format('v{0}-beta.r{1}', steps.pkg_version.outputs.VERSION, github.run_number) }} # files: | # artifacts/linux-builds/**/* # artifacts/windows-builds/**/* # artifacts/macos-builds/**/* # generate_release_notes: true # draft: true # # DYNAMIC FLAGS: Mark as pre-release ONLY IF it's NOT a tag (meaning it's a branch push) # prerelease: ${{ github.ref_type != 'tag' }}