Skip to content

Release CLI

Release CLI #5

Workflow file for this run

name: Release CLI
on:
push:
tags:
- "v*"
workflow_dispatch:
jobs:
build-macos:
runs-on: macos-latest
steps:
- name: Checkout code
uses: actions/checkout@v2
- name: Set up Rust
uses: actions-rs/toolchain@v1
with:
toolchain: stable
profile: minimal
override: true
- name: Install dependencies
run: |
brew install ffmpeg
- name: Build with Metal feature
run: |
cargo build --release --features metal
- name: Create deployment package
run: |
VERSION=${GITHUB_REF#refs/tags/v}
tar -czf screenpipe-${VERSION}-x86_64-apple-darwin.tar.gz -C target/release screenpipe
- name: Calculate SHA256
run: |
echo "MAC_SHA256=$(shasum -a 256 screenpipe-*.tar.gz | cut -d ' ' -f 1)" >> $GITHUB_ENV
- name: Update Homebrew Formula
run: |
VERSION=${GITHUB_REF#refs/tags/v}
sed -i '' "s/version \".*\"/version \"$VERSION\"/" Formula/screenpipe.rb
sed -i '' "s/sha256 \".*\"/sha256 \"${{ env.MAC_SHA256 }}\"/" Formula/screenpipe.rb
sed -i '' "s/v[0-9.]*\/screenpipe-[0-9.]*-x86_64-apple-darwin/v$VERSION\/screenpipe-$VERSION-x86_64-apple-darwin/" Formula/screenpipe.rb
- name: Commit and push Homebrew Formula changes
env:
GH_TOKEN: ${{ secrets.PAT }}
run: |
git config user.name github-actions
git config user.email [email protected]
git add Formula/screenpipe.rb
git commit -m "chore: update brew to version ${GITHUB_REF#refs/tags/v}"
git push
- name: Upload Artifact
uses: actions/upload-artifact@v2
with:
name: screenpipe-macos
path: screenpipe-*.tar.gz
build-ubuntu:
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v2
- name: Install dependencies
run: |
sudo apt-get update
sudo apt-get install -y libavformat-dev libavfilter-dev libavdevice-dev ffmpeg libasound2-dev libgdk3-dev
- name: Set up Rust
uses: actions-rs/toolchain@v1
with:
toolchain: stable
profile: minimal
override: true
- name: Build with RPATH
run: |
export PKG_CONFIG_PATH="/usr/lib/x86_64-linux-gnu/pkgconfig:$PKG_CONFIG_PATH"
export RUSTFLAGS="-C link-arg=-Wl,-rpath,\$ORIGIN/lib"
cargo build --release
- name: Copy FFmpeg libraries
run: |
mkdir -p target/release/lib
cp /usr/lib/x86_64-linux-gnu/libavcodec.so* target/release/lib/
cp /usr/lib/x86_64-linux-gnu/libavformat.so* target/release/lib/
cp /usr/lib/x86_64-linux-gnu/libavutil.so* target/release/lib/
cp /usr/lib/x86_64-linux-gnu/libswresample.so* target/release/lib/
cp /usr/lib/x86_64-linux-gnu/libswscale.so* target/release/lib/
cp /usr/lib/x86_64-linux-gnu/libavfilter.so* target/release/lib/
cp /usr/lib/x86_64-linux-gnu/libavdevice.so* target/release/lib/
- name: Create deployment package
run: |
mkdir -p screenpipe-linux
cp target/release/screenpipe screenpipe-linux/screenpipe
cp -r target/release/lib screenpipe-linux/
chmod +x screenpipe-linux/screenpipe
tar -czvf screenpipe-linux.tar.gz screenpipe-linux
- name: Upload Artifact
uses: actions/upload-artifact@v2
with:
name: screenpipe-linux
path: screenpipe-linux.tar.gz
build-windows:
runs-on: windows-latest
steps:
- name: Checkout code
uses: actions/checkout@v2
- name: Set up Rust
uses: actions-rs/toolchain@v1
with:
toolchain: stable
profile: minimal
override: true
- name: Install FFmpeg
run: |
choco install ffmpeg
- name: Build release
run: |
cargo build --release
- name: Download FFmpeg
run: |
$ProgressPreference = 'SilentlyContinue'
Invoke-WebRequest -Uri "https://github.com/BtbN/FFmpeg-Builds/releases/download/latest/ffmpeg-master-latest-win64-gpl.zip" -OutFile "ffmpeg.zip"
Expand-Archive -Path "ffmpeg.zip" -DestinationPath "ffmpeg"
Move-Item -Path "ffmpeg\ffmpeg-master-latest-win64-gpl\bin\*" -Destination "target\release\"
- name: Create deployment package
run: |
$VERSION = $env:GITHUB_REF -replace 'refs/tags/v', ''
Compress-Archive -Path target\release\screenpipe.exe, target\release\ffmpeg.exe, target\release\ffprobe.exe -DestinationPath screenpipe-$VERSION-x86_64-pc-windows-msvc.zip
- name: Upload Artifact
uses: actions/upload-artifact@v2
with:
name: screenpipe-windows
path: screenpipe-*.zip
release:
runs-on: ubuntu-latest
needs: [build-ubuntu, build-macos, build-windows]
steps:
- name: Checkout code
uses: actions/checkout@v2
- name: Download Artifacts
uses: actions/download-artifact@v2
with:
name: screenpipe-linux
- name: Download macOS Artifact
uses: actions/download-artifact@v2
with:
name: screenpipe-macos
- name: Download Windows Artifact
uses: actions/download-artifact@v2
with:
name: screenpipe-windows
- name: Set Version
shell: bash
run: |
echo "VERSION=${GITHUB_REF_NAME#v}" >> $GITHUB_ENV
echo "RELEASE_VERSION=$(echo ${GITHUB_REF_NAME} | cut -f1 -d-)" >> $GITHUB_ENV
- name: Create or update Release
env:
GH_TOKEN: ${{ secrets.PAT }}
run: |
gh release create ${{ env.RELEASE_VERSION }} --title ${{ env.RELEASE_VERSION }} --generate-notes
gh release upload ${{ env.RELEASE_VERSION }} screenpipe-linux.tar.gz
gh release upload ${{ env.RELEASE_VERSION }} screenpipe-macos.tar.gz
gh release upload ${{ env.RELEASE_VERSION }} screenpipe-windows.zip