Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add release static builds for Linux (and macOS?) #5515

Merged
merged 16 commits into from
Nov 24, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
312 changes: 286 additions & 26 deletions .github/workflows/release.yml
Original file line number Diff line number Diff line change
Expand Up @@ -6,11 +6,15 @@ on:
name:
description: 'Version name (default is ref name)'

env:
# $VERSION is used by release scripts
VERSION: ${{ github.event.inputs.name || github.ref_name }}

jobs:
build-scrcpy-server:
test-scrcpy-server:
runs-on: ubuntu-latest
env:
GRADLE: gradle # use native gradle instead of ./gradlew in release.mk
GRADLE: gradle # use native gradle instead of ./gradlew in scripts
steps:
- name: Checkout code
uses: actions/checkout@v4
Expand All @@ -22,16 +26,45 @@ jobs:
java-version: '17'

- name: Test scrcpy-server
run: make -f release.mk test-server
run: release/test_server.sh

build-scrcpy-server:
runs-on: ubuntu-latest
env:
GRADLE: gradle # use native gradle instead of ./gradlew in scripts
steps:
- name: Checkout code
uses: actions/checkout@v4

- name: Setup JDK
uses: actions/setup-java@v4
with:
distribution: 'zulu'
java-version: '17'

- name: Build scrcpy-server
run: make -f release.mk build-server
run: release/build_server.sh

- name: Upload scrcpy-server artifact
uses: actions/upload-artifact@v4
with:
name: scrcpy-server
path: build-server/server/scrcpy-server
path: release/work/build-server/server/scrcpy-server

test-build-scrcpy-server-without-gradle:
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v4

- name: Setup JDK
uses: actions/setup-java@v4
with:
distribution: 'zulu'
java-version: '17'

- name: Build scrcpy-server without gradle
run: server/build_without_gradle.sh

test-client:
runs-on: ubuntu-latest
Expand All @@ -46,13 +79,38 @@ jobs:
libsdl2-dev libavcodec-dev libavdevice-dev libavformat-dev \
libavutil-dev libswresample-dev libusb-1.0-0 libusb-1.0-0-dev

- name: Build
- name: Test
run: release/test_client.sh

build-linux:
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v4

- name: Install dependencies
run: |
meson setup d -Db_sanitize=address,undefined
sudo apt update
sudo apt install -y meson ninja-build nasm ffmpeg libsdl2-2.0-0 \
libsdl2-dev libavcodec-dev libavdevice-dev libavformat-dev \
libavutil-dev libswresample-dev libusb-1.0-0 libusb-1.0-0-dev

- name: Test
- name: Build linux
run: release/build_linux.sh

# upload-artifact does not preserve permissions
- name: Tar
run: |
meson test -Cd
cd release/work/build-linux
mkdir dist-tar
cd dist-tar
tar -C .. -cvf dist.tar.gz dist/

- name: Upload build-linux artifact
uses: actions/upload-artifact@v4
with:
name: build-linux-intermediate
path: release/work/build-linux/dist-tar/

build-win32:
runs-on: ubuntu-latest
Expand All @@ -71,14 +129,22 @@ jobs:
- name: Workaround for old meson version run by Github Actions
run: sed -i 's/^pkg-config/pkgconfig/' cross_win32.txt

- name: Build scrcpy win32
run: make -f release.mk build-win32
- name: Build win32
run: release/build_windows.sh 32

# upload-artifact does not preserve permissions
- name: Tar
run: |
cd release/work/build-win32
mkdir dist-tar
cd dist-tar
tar -C .. -cvf dist.tar.gz dist/

- name: Upload build-win32 artifact
uses: actions/upload-artifact@v4
with:
name: build-win32-intermediate
path: build-win32/dist/
path: release/work/build-win32/dist-tar/

build-win64:
runs-on: ubuntu-latest
Expand All @@ -97,24 +163,92 @@ jobs:
- name: Workaround for old meson version run by Github Actions
run: sed -i 's/^pkg-config/pkgconfig/' cross_win64.txt

- name: Build scrcpy win64
run: make -f release.mk build-win64
- name: Build win64
run: release/build_windows.sh 64

# upload-artifact does not preserve permissions
- name: Tar
run: |
cd release/work/build-win64
mkdir dist-tar
cd dist-tar
tar -C .. -cvf dist.tar.gz dist/

- name: Upload build-win64 artifact
uses: actions/upload-artifact@v4
with:
name: build-win64-intermediate
path: build-win64/dist/
path: release/work/build-win64/dist-tar/

build-macos:
runs-on: macos-latest
steps:
- name: Checkout code
uses: actions/checkout@v4

- name: Install dependencies
run: |
brew install meson ninja nasm libiconv zlib automake autoconf \
libtool

- name: Build macOS
run: release/build_macos.sh

package:
# upload-artifact does not preserve permissions
- name: Tar
run: |
cd release/work/build-macos
mkdir dist-tar
cd dist-tar
tar -C .. -cvf dist.tar.gz dist/

- name: Upload build-macos artifact
uses: actions/upload-artifact@v4
with:
name: build-macos-intermediate
path: release/work/build-macos/dist-tar/

package-linux:
needs:
- build-scrcpy-server
- build-linux
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v4

- name: Download scrcpy-server
uses: actions/download-artifact@v4
with:
name: scrcpy-server
path: release/work/build-server/server/

- name: Download build-linux
uses: actions/download-artifact@v4
with:
name: build-linux-intermediate
path: release/work/build-linux/dist-tar/

# upload-artifact does not preserve permissions
- name: Detar
run: |
cd release/work/build-linux
tar xf dist-tar/dist.tar.gz

- name: Package linux
run: release/package_client.sh linux tar.gz

- name: Upload linux release
uses: actions/upload-artifact@v4
with:
name: release-linux
path: release/output/

package-win32:
needs:
- build-scrcpy-server
- build-win32
- build-win64
runs-on: ubuntu-latest
env:
# $VERSION is used by release.mk
VERSION: ${{ github.event.inputs.name || github.ref_name }}
steps:
- name: Checkout code
uses: actions/checkout@v4
Expand All @@ -123,25 +257,151 @@ jobs:
uses: actions/download-artifact@v4
with:
name: scrcpy-server
path: build-server/server/
path: release/work/build-server/server/

- name: Download build-win32
uses: actions/download-artifact@v4
with:
name: build-win32-intermediate
path: build-win32/dist/
path: release/work/build-win32/dist-tar/

# upload-artifact does not preserve permissions
- name: Detar
run: |
cd release/work/build-win32
tar xf dist-tar/dist.tar.gz

- name: Package win32
run: release/package_client.sh win32 zip

- name: Upload win32 release
uses: actions/upload-artifact@v4
with:
name: release-win32
path: release/output/

package-win64:
needs:
- build-scrcpy-server
- build-win64
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v4

- name: Download scrcpy-server
uses: actions/download-artifact@v4
with:
name: scrcpy-server
path: release/work/build-server/server/

- name: Download build-win64
uses: actions/download-artifact@v4
with:
name: build-win64-intermediate
path: build-win64/dist/
path: release/work/build-win64/dist-tar/

# upload-artifact does not preserve permissions
- name: Detar
run: |
cd release/work/build-win64
tar xf dist-tar/dist.tar.gz

- name: Package win64
run: release/package_client.sh win64 zip

- name: Upload win64 release
uses: actions/upload-artifact@v4
with:
name: release-win64
path: release/output

package-macos:
needs:
- build-scrcpy-server
- build-macos
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v4

- name: Download scrcpy-server
uses: actions/download-artifact@v4
with:
name: scrcpy-server
path: release/work/build-server/server/

- name: Download build-macos
uses: actions/download-artifact@v4
with:
name: build-macos-intermediate
path: release/work/build-macos/dist-tar/

# upload-artifact does not preserve permissions
- name: Detar
run: |
cd release/work/build-macos
tar xf dist-tar/dist.tar.gz

- name: Package macos
run: release/package_client.sh macos tar.gz

- name: Upload macos release
uses: actions/upload-artifact@v4
with:
name: release-macos
path: release/output/

release:
needs:
- build-scrcpy-server
- package-linux
- package-win32
- package-win64
- package-macos
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v4

- name: Download scrcpy-server
uses: actions/download-artifact@v4
with:
name: scrcpy-server
path: release/work/build-server/server/

- name: Download release-linux
uses: actions/download-artifact@v4
with:
name: release-linux
path: release/output/

- name: Download release-win32
uses: actions/download-artifact@v4
with:
name: release-win32
path: release/output/

- name: Download release-win64
uses: actions/download-artifact@v4
with:
name: release-win64
path: release/output/

- name: Download release-macos
uses: actions/download-artifact@v4
with:
name: release-macos
path: release/output/

- name: Package server
run: release/package_server.sh

- name: Package
run: make -f release.mk package
- name: Generate checksums
run: release/generate_checksums.sh

- name: Upload release artifact
uses: actions/upload-artifact@v4
with:
name: scrcpy-release-${{ env.VERSION }}
path: release-${{ env.VERSION }}
path: release/output
Loading