mirror of
https://github.com/zellij-org/zellij.git
synced 2026-11-15 08:17:20 +00:00
* feat: allow renaming sessions from session mode * rustfmt * fix tests * manually download protoc * add pr
478 lines
18 KiB
YAML
478 lines
18 KiB
YAML
name: Release
|
|
on:
|
|
push:
|
|
tags:
|
|
- 'v*.*.*'
|
|
workflow_dispatch:
|
|
|
|
jobs:
|
|
create-release:
|
|
runs-on: ubuntu-latest
|
|
outputs:
|
|
upload_url: ${{ steps.create_release.outputs.upload_url }}
|
|
steps:
|
|
- name: create_release
|
|
id: create_release
|
|
uses: actions/create-release@v1
|
|
env:
|
|
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
|
with:
|
|
tag_name: ${{ github.event_name == 'workflow_dispatch' && '' || github.ref }}
|
|
release_name: Release ${{ github.event_name == 'workflow_dispatch' && 'main' || github.ref }}
|
|
draft: true
|
|
prerelease: false
|
|
|
|
desktop-files:
|
|
needs: create-release
|
|
name: desktop-files
|
|
runs-on: ubuntu-latest
|
|
steps:
|
|
- name: Checkout repository
|
|
uses: actions/checkout@v3
|
|
|
|
- name: Create desktop files archive
|
|
run: |
|
|
share="desktop-files/share"
|
|
mkdir -p "$share/applications" "$share/metainfo"
|
|
cp assets/dev.zellij.Zellij.desktop "$share/applications/"
|
|
cp assets/dev.zellij.Zellij.metainfo.xml "$share/metainfo/"
|
|
for size in 128 256 512; do
|
|
mkdir -p "$share/icons/hicolor/${size}x${size}/apps"
|
|
cp "zellij-utils/assets/icons/logo${size}.png" "$share/icons/hicolor/${size}x${size}/apps/dev.zellij.Zellij.png"
|
|
done
|
|
tar cvzf zellij-desktop-files.tar.gz -C desktop-files share
|
|
sha256sum zellij-desktop-files.tar.gz > zellij-desktop-files.sha256sum
|
|
|
|
- name: Upload desktop files archive
|
|
uses: actions/upload-release-asset@v1.0.2
|
|
env:
|
|
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
|
with:
|
|
upload_url: ${{ needs.create-release.outputs.upload_url }}
|
|
asset_path: zellij-desktop-files.tar.gz
|
|
asset_name: zellij-desktop-files.tar.gz
|
|
asset_content_type: application/octet-stream
|
|
|
|
- name: Upload desktop files checksum
|
|
uses: actions/upload-release-asset@v1.0.2
|
|
env:
|
|
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
|
with:
|
|
upload_url: ${{ needs.create-release.outputs.upload_url }}
|
|
asset_path: zellij-desktop-files.sha256sum
|
|
asset_name: zellij-desktop-files.sha256sum
|
|
asset_content_type: text/plain
|
|
|
|
build-release-normal:
|
|
needs: create-release
|
|
name: build-release-normal
|
|
runs-on: ${{ matrix.os }}
|
|
env:
|
|
RUST_BACKTRACE: 1
|
|
strategy:
|
|
fail-fast: false
|
|
matrix:
|
|
build:
|
|
- linux musl x64
|
|
- linux musl aarch64
|
|
#- linux musl riscv64
|
|
- macos x64
|
|
- macos aarch64
|
|
- windows x64
|
|
include:
|
|
- build: linux musl x64
|
|
os: ubuntu-latest
|
|
target: x86_64-unknown-linux-musl
|
|
- build: linux musl aarch64
|
|
os: ubuntu-latest
|
|
target: aarch64-unknown-linux-musl
|
|
# - build: linux musl riscv64
|
|
# os: ubuntu-latest
|
|
# target: riscv64gc-unknown-linux-musl
|
|
- build: macos x64
|
|
os: macos-latest
|
|
target: x86_64-apple-darwin
|
|
- build: macos aarch64
|
|
os: macos-latest
|
|
target: aarch64-apple-darwin
|
|
- build: windows x64
|
|
os: windows-latest
|
|
target: x86_64-pc-windows-msvc
|
|
steps:
|
|
- name: Set release tag (Unix)
|
|
if: runner.os != 'Windows'
|
|
run: |
|
|
if [ "$GITHUB_EVENT_NAME" == 'workflow_dispatch' ]; then
|
|
echo "RELEASE_TAG=main" >> "$GITHUB_ENV"
|
|
else
|
|
echo "RELEASE_TAG=${GITHUB_REF#refs/tags/}" >> "$GITHUB_ENV"
|
|
fi
|
|
|
|
- name: Set release tag (Windows)
|
|
if: runner.os == 'Windows'
|
|
run: |
|
|
if ($env:GITHUB_EVENT_NAME -eq 'workflow_dispatch') {
|
|
echo "RELEASE_TAG=main" >> $env:GITHUB_ENV
|
|
} else {
|
|
$tag = $env:GITHUB_REF -replace '^refs/tags/', ''
|
|
echo "RELEASE_TAG=$tag" >> $env:GITHUB_ENV
|
|
}
|
|
|
|
- name: Checkout repository
|
|
uses: actions/checkout@v3
|
|
|
|
- name: Install Protoc
|
|
shell: bash
|
|
run: |
|
|
case "${{ runner.os }}" in
|
|
Linux) asset=protoc-23.4-linux-x86_64.zip ;;
|
|
macOS) asset=protoc-23.4-osx-universal_binary.zip ;;
|
|
Windows) asset=protoc-23.4-win64.zip ;;
|
|
esac
|
|
curl -sSfL -o "$RUNNER_TEMP/protoc.zip" "https://github.com/protocolbuffers/protobuf/releases/download/v23.4/$asset"
|
|
unzip -q -o "$RUNNER_TEMP/protoc.zip" -d "$RUNNER_TEMP/protoc"
|
|
echo "$RUNNER_TEMP/protoc/bin" >> "$GITHUB_PATH"
|
|
|
|
- name: Install musl-tools
|
|
if: matrix.os == 'ubuntu-latest'
|
|
run: sudo apt-get install -y --no-install-recommends musl-tools
|
|
|
|
- name: Install Rust
|
|
uses: actions-rust-lang/setup-rust-toolchain@v1
|
|
with:
|
|
target: "${{ matrix.target }},wasm32-wasip1"
|
|
cache: false
|
|
rustflags: ""
|
|
|
|
- name: Install NASM (Windows)
|
|
if: runner.os == 'Windows'
|
|
uses: ilammy/setup-nasm@v1
|
|
|
|
- name: Build release binary (cross-compiled)
|
|
if: matrix.build != 'windows x64'
|
|
run: cargo xtask ci cross ${{ matrix.target }}
|
|
|
|
- name: Build release binary (Windows native)
|
|
if: matrix.build == 'windows x64'
|
|
env:
|
|
RUSTFLAGS: "-C target-feature=+crt-static"
|
|
run: cargo xtask ci build-release
|
|
|
|
- name: Create artifact (Unix)
|
|
if: runner.os != 'Windows'
|
|
id: make-artifact-unix
|
|
run: |
|
|
asset_name="zellij-${{ matrix.target }}.tar.gz"
|
|
tar cvzf "${asset_name}" -C "target/${{ matrix.target }}/release" zellij
|
|
echo "asset_name=${asset_name}" >> "$GITHUB_OUTPUT"
|
|
|
|
- name: Create artifact (Windows)
|
|
if: runner.os == 'Windows'
|
|
id: make-artifact-windows
|
|
run: |
|
|
$asset_name = "zellij-${{ matrix.target }}.zip"
|
|
Compress-Archive -Path "target/release/zellij.exe", "target/release/zellij-window.exe" -DestinationPath $asset_name
|
|
echo "asset_name=$asset_name" >> $env:GITHUB_OUTPUT
|
|
|
|
- name: Create checksum (Unix)
|
|
if: runner.os != 'Windows'
|
|
id: make-checksum-unix
|
|
run: |
|
|
checksum_name="zellij-${{ matrix.target }}.sha256sum"
|
|
if [[ "$RUNNER_OS" != "macOS" ]]; then
|
|
sha256sum "target/${{ matrix.target }}/release/zellij" > "${checksum_name}"
|
|
else
|
|
shasum -a 256 "target/${{ matrix.target }}/release/zellij" > "${checksum_name}"
|
|
fi
|
|
echo "checksum_name=${checksum_name}" >> "$GITHUB_OUTPUT"
|
|
|
|
- name: Create checksum (Windows)
|
|
if: runner.os == 'Windows'
|
|
id: make-checksum-windows
|
|
run: |
|
|
$checksum_name = "zellij-${{ matrix.target }}.sha256sum"
|
|
$lines = foreach ($file in "target/release/zellij.exe", "target/release/zellij-window.exe") {
|
|
$hash = (Get-FileHash $file -Algorithm SHA256).Hash.ToLower()
|
|
"$hash $file"
|
|
}
|
|
$lines | Out-File -Encoding ascii $checksum_name
|
|
echo "checksum_name=$checksum_name" >> $env:GITHUB_OUTPUT
|
|
|
|
- name: Upload release archive
|
|
uses: actions/upload-release-asset@v1.0.2
|
|
env:
|
|
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
|
with:
|
|
upload_url: ${{ needs.create-release.outputs.upload_url }}
|
|
asset_path: ${{ steps.make-artifact-unix.outputs.asset_name || steps.make-artifact-windows.outputs.asset_name }}
|
|
asset_name: ${{ runner.os == 'Windows' && format('zellij-{0}.zip', matrix.target) || format('zellij-{0}.tar.gz', matrix.target) }}
|
|
asset_content_type: application/octet-stream
|
|
|
|
- name: Upload checksum
|
|
uses: actions/upload-release-asset@v1.0.2
|
|
env:
|
|
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
|
with:
|
|
upload_url: ${{ needs.create-release.outputs.upload_url }}
|
|
asset_path: ${{ steps.make-checksum-unix.outputs.checksum_name || steps.make-checksum-windows.outputs.checksum_name }}
|
|
asset_name: zellij-${{matrix.target}}.sha256sum
|
|
asset_content_type: text/plain
|
|
|
|
# ===== Windows MSI installer =====
|
|
- name: Install WiX v6
|
|
if: runner.os == 'Windows'
|
|
run: dotnet tool install --global wix --version 6.0.2
|
|
|
|
- name: Add WiX UI extension
|
|
if: runner.os == 'Windows'
|
|
run: wix extension add WixToolset.UI.wixext/6.0.2
|
|
|
|
- name: Build MSI installer
|
|
if: runner.os == 'Windows'
|
|
run: |
|
|
$version = (Select-String -Path Cargo.toml -Pattern '^version\s*=\s*"(.+)"' | Select-Object -First 1).Matches.Groups[1].Value
|
|
New-Item -ItemType Directory -Force -Path target\wix
|
|
wix build wix\main.wxs wix\Zellij.wxl `
|
|
-d Version=$version `
|
|
-arch x64 `
|
|
-ext WixToolset.UI.wixext `
|
|
-o target\wix\zellij-x86_64-pc-windows-msvc-installer.msi
|
|
|
|
- name: Create MSI checksum
|
|
if: runner.os == 'Windows'
|
|
id: make-checksum-msi
|
|
run: |
|
|
$checksum_name = "zellij-${{ matrix.target }}-installer.sha256sum"
|
|
$hash = (Get-FileHash "target\wix\zellij-${{ matrix.target }}-installer.msi" -Algorithm SHA256).Hash.ToLower()
|
|
"$hash zellij-${{ matrix.target }}-installer.msi" | Out-File -Encoding ascii $checksum_name
|
|
echo "checksum_name=$checksum_name" >> $env:GITHUB_OUTPUT
|
|
|
|
- name: Upload MSI installer
|
|
if: runner.os == 'Windows'
|
|
uses: actions/upload-release-asset@v1.0.2
|
|
env:
|
|
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
|
with:
|
|
upload_url: ${{ needs.create-release.outputs.upload_url }}
|
|
asset_path: target\wix\zellij-${{ matrix.target }}-installer.msi
|
|
asset_name: zellij-${{ matrix.target }}-installer.msi
|
|
asset_content_type: application/octet-stream
|
|
|
|
- name: Upload MSI checksum
|
|
if: runner.os == 'Windows'
|
|
uses: actions/upload-release-asset@v1.0.2
|
|
env:
|
|
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
|
with:
|
|
upload_url: ${{ needs.create-release.outputs.upload_url }}
|
|
asset_path: ${{ steps.make-checksum-msi.outputs.checksum_name }}
|
|
asset_name: zellij-${{ matrix.target }}-installer.sha256sum
|
|
asset_content_type: text/plain
|
|
|
|
build-release-noweb:
|
|
needs: create-release
|
|
name: build-release-noweb
|
|
runs-on: ${{ matrix.os }}
|
|
env:
|
|
RUST_BACKTRACE: 1
|
|
strategy:
|
|
fail-fast: false
|
|
matrix:
|
|
build:
|
|
- linux musl x64
|
|
- linux musl aarch64
|
|
#- linux musl riscv64
|
|
- macos x64
|
|
- macos aarch64
|
|
- windows x64
|
|
include:
|
|
- build: linux musl x64
|
|
os: ubuntu-latest
|
|
target: x86_64-unknown-linux-musl
|
|
- build: linux musl aarch64
|
|
os: ubuntu-latest
|
|
target: aarch64-unknown-linux-musl
|
|
# - build: linux musl riscv64
|
|
# os: ubuntu-latest
|
|
# target: riscv64gc-unknown-linux-musl
|
|
- build: macos x64
|
|
os: macos-latest
|
|
target: x86_64-apple-darwin
|
|
- build: macos aarch64
|
|
os: macos-latest
|
|
target: aarch64-apple-darwin
|
|
- build: windows x64
|
|
os: windows-latest
|
|
target: x86_64-pc-windows-msvc
|
|
steps:
|
|
- name: Set release tag (Unix)
|
|
if: runner.os != 'Windows'
|
|
run: |
|
|
if [ "$GITHUB_EVENT_NAME" == 'workflow_dispatch' ]; then
|
|
echo "RELEASE_TAG=main" >> "$GITHUB_ENV"
|
|
else
|
|
echo "RELEASE_TAG=${GITHUB_REF#refs/tags/}" >> "$GITHUB_ENV"
|
|
fi
|
|
|
|
- name: Set release tag (Windows)
|
|
if: runner.os == 'Windows'
|
|
run: |
|
|
if ($env:GITHUB_EVENT_NAME -eq 'workflow_dispatch') {
|
|
echo "RELEASE_TAG=main" >> $env:GITHUB_ENV
|
|
} else {
|
|
$tag = $env:GITHUB_REF -replace '^refs/tags/', ''
|
|
echo "RELEASE_TAG=$tag" >> $env:GITHUB_ENV
|
|
}
|
|
|
|
- name: Checkout repository
|
|
uses: actions/checkout@v3
|
|
|
|
- name: Install Protoc
|
|
shell: bash
|
|
run: |
|
|
case "${{ runner.os }}" in
|
|
Linux) asset=protoc-23.4-linux-x86_64.zip ;;
|
|
macOS) asset=protoc-23.4-osx-universal_binary.zip ;;
|
|
Windows) asset=protoc-23.4-win64.zip ;;
|
|
esac
|
|
curl -sSfL -o "$RUNNER_TEMP/protoc.zip" "https://github.com/protocolbuffers/protobuf/releases/download/v23.4/$asset"
|
|
unzip -q -o "$RUNNER_TEMP/protoc.zip" -d "$RUNNER_TEMP/protoc"
|
|
echo "$RUNNER_TEMP/protoc/bin" >> "$GITHUB_PATH"
|
|
|
|
- name: Install musl-tools
|
|
if: matrix.os == 'ubuntu-latest'
|
|
run: sudo apt-get install -y --no-install-recommends musl-tools
|
|
|
|
- name: Install Rust
|
|
uses: actions-rust-lang/setup-rust-toolchain@v1
|
|
with:
|
|
target: "${{ matrix.target }},wasm32-wasip1"
|
|
cache: false
|
|
rustflags: ""
|
|
|
|
- name: Install NASM (Windows)
|
|
if: runner.os == 'Windows'
|
|
uses: ilammy/setup-nasm@v1
|
|
|
|
- name: Build release binary (cross-compiled, no-web)
|
|
if: matrix.build != 'windows x64'
|
|
run: cargo xtask ci cross ${{ matrix.target }} --no-web
|
|
|
|
- name: Build release binary (Windows native, no-web)
|
|
if: matrix.build == 'windows x64'
|
|
env:
|
|
RUSTFLAGS: "-C target-feature=+crt-static"
|
|
run: cargo xtask ci build-release --no-web
|
|
|
|
- name: Create artifact (Unix)
|
|
if: runner.os != 'Windows'
|
|
id: make-artifact-unix
|
|
run: |
|
|
asset_name="zellij-no-web-${{ matrix.target }}.tar.gz"
|
|
tar cvzf "${asset_name}" -C "target/${{ matrix.target }}/release" zellij
|
|
echo "asset_name=${asset_name}" >> "$GITHUB_OUTPUT"
|
|
|
|
- name: Create artifact (Windows)
|
|
if: runner.os == 'Windows'
|
|
id: make-artifact-windows
|
|
run: |
|
|
$asset_name = "zellij-no-web-${{ matrix.target }}.zip"
|
|
Compress-Archive -Path "target/release/zellij.exe", "target/release/zellij-window.exe" -DestinationPath $asset_name
|
|
echo "asset_name=$asset_name" >> $env:GITHUB_OUTPUT
|
|
|
|
- name: Create checksum (Unix)
|
|
if: runner.os != 'Windows'
|
|
id: make-checksum-unix
|
|
run: |
|
|
checksum_name="zellij-no-web-${{ matrix.target }}.sha256sum"
|
|
if [[ "$RUNNER_OS" != "macOS" ]]; then
|
|
sha256sum "target/${{ matrix.target }}/release/zellij" > "${checksum_name}"
|
|
else
|
|
shasum -a 256 "target/${{ matrix.target }}/release/zellij" > "${checksum_name}"
|
|
fi
|
|
echo "checksum_name=${checksum_name}" >> "$GITHUB_OUTPUT"
|
|
|
|
- name: Create checksum (Windows)
|
|
if: runner.os == 'Windows'
|
|
id: make-checksum-windows
|
|
run: |
|
|
$checksum_name = "zellij-no-web-${{ matrix.target }}.sha256sum"
|
|
$lines = foreach ($file in "target/release/zellij.exe", "target/release/zellij-window.exe") {
|
|
$hash = (Get-FileHash $file -Algorithm SHA256).Hash.ToLower()
|
|
"$hash $file"
|
|
}
|
|
$lines | Out-File -Encoding ascii $checksum_name
|
|
echo "checksum_name=$checksum_name" >> $env:GITHUB_OUTPUT
|
|
|
|
- name: Upload release archive
|
|
uses: actions/upload-release-asset@v1.0.2
|
|
env:
|
|
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
|
with:
|
|
upload_url: ${{ needs.create-release.outputs.upload_url }}
|
|
asset_path: ${{ steps.make-artifact-unix.outputs.asset_name || steps.make-artifact-windows.outputs.asset_name }}
|
|
asset_name: ${{ runner.os == 'Windows' && format('zellij-no-web-{0}.zip', matrix.target) || format('zellij-no-web-{0}.tar.gz', matrix.target) }}
|
|
asset_content_type: application/octet-stream
|
|
|
|
- name: Upload checksum
|
|
uses: actions/upload-release-asset@v1.0.2
|
|
env:
|
|
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
|
with:
|
|
upload_url: ${{ needs.create-release.outputs.upload_url }}
|
|
asset_path: ${{ steps.make-checksum-unix.outputs.checksum_name || steps.make-checksum-windows.outputs.checksum_name }}
|
|
asset_name: zellij-no-web-${{matrix.target}}.sha256sum
|
|
asset_content_type: text/plain
|
|
|
|
# ===== Windows MSI installer (no-web) =====
|
|
- name: Install WiX v6
|
|
if: runner.os == 'Windows'
|
|
run: dotnet tool install --global wix --version 6.0.2
|
|
|
|
- name: Add WiX UI extension
|
|
if: runner.os == 'Windows'
|
|
run: wix extension add WixToolset.UI.wixext/6.0.2
|
|
|
|
- name: Build MSI installer (no-web)
|
|
if: runner.os == 'Windows'
|
|
run: |
|
|
$version = (Select-String -Path Cargo.toml -Pattern '^version\s*=\s*"(.+)"' | Select-Object -First 1).Matches.Groups[1].Value
|
|
New-Item -ItemType Directory -Force -Path target\wix
|
|
wix build wix\main.wxs wix\Zellij.wxl `
|
|
-d Version=$version `
|
|
-arch x64 `
|
|
-ext WixToolset.UI.wixext `
|
|
-o target\wix\zellij-no-web-${{ matrix.target }}-installer.msi
|
|
|
|
- name: Create MSI checksum (no-web)
|
|
if: runner.os == 'Windows'
|
|
id: make-checksum-msi
|
|
run: |
|
|
$checksum_name = "zellij-no-web-${{ matrix.target }}-installer.sha256sum"
|
|
$hash = (Get-FileHash "target\wix\zellij-no-web-${{ matrix.target }}-installer.msi" -Algorithm SHA256).Hash.ToLower()
|
|
"$hash zellij-no-web-${{ matrix.target }}-installer.msi" | Out-File -Encoding ascii $checksum_name
|
|
echo "checksum_name=$checksum_name" >> $env:GITHUB_OUTPUT
|
|
|
|
- name: Upload MSI installer (no-web)
|
|
if: runner.os == 'Windows'
|
|
uses: actions/upload-release-asset@v1.0.2
|
|
env:
|
|
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
|
with:
|
|
upload_url: ${{ needs.create-release.outputs.upload_url }}
|
|
asset_path: target\wix\zellij-no-web-${{ matrix.target }}-installer.msi
|
|
asset_name: zellij-no-web-${{ matrix.target }}-installer.msi
|
|
asset_content_type: application/octet-stream
|
|
|
|
- name: Upload MSI checksum (no-web)
|
|
if: runner.os == 'Windows'
|
|
uses: actions/upload-release-asset@v1.0.2
|
|
env:
|
|
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
|
with:
|
|
upload_url: ${{ needs.create-release.outputs.upload_url }}
|
|
asset_path: ${{ steps.make-checksum-msi.outputs.checksum_name }}
|
|
asset_name: zellij-no-web-${{ matrix.target }}-installer.sha256sum
|
|
asset_content_type: text/plain
|
|
|