Merge pull request #4 from luigi311/matrix3 #41
Workflow file for this run
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
name: CI | |
on: | |
workflow_dispatch: | |
pull_request: | |
paths-ignore: | |
- .gitignore | |
- "*.md" | |
- ".github/screenshots/**" | |
push: | |
paths-ignore: | |
- .gitignore | |
- "*.md" | |
- ".github/screenshots/**" | |
env: | |
TRUNK_VERSION: 0.16.0 | |
RUST_TOOLCHAIN: 1.71.1 | |
DART_SDK_VERSION: 3.0.7 | |
DART_SASS_VERSION: 1.62.1 | |
jobs: | |
test: | |
runs-on: ${{ matrix.os }} | |
strategy: | |
matrix: | |
os: | |
- ubuntu-latest | |
- macos-latest | |
- windows-latest | |
steps: | |
- uses: actions/checkout@v3 | |
- run: mkdir crates/tanoshi-web/dist | |
- name: Install deps (ubuntu) | |
if: ${{ matrix.os == 'ubuntu-latest' }} | |
run: sudo apt update && sudo apt upgrade -y && sudo apt install -y libssl-dev libarchive-dev build-essential cmake llvm clang libicu-dev nettle-dev libacl1-dev liblzma-dev libzstd-dev liblz4-dev libbz2-dev zlib1g-dev libxml2-dev lsb-release wget software-properties-common libwebkit2gtk-4.0-dev curl libgtk-3-dev libappindicator3-dev patchelf librsvg2-dev libpango1.0-dev | |
- name: Install deps (macos) | |
if: ${{ matrix.os == 'macos-latest' }} | |
run: brew install icu4c libarchive bzip2 lz4 zlib expat llvm@13 libiconv | |
- id: cache-vcpkg | |
name: Cache vcpkg (windows) | |
uses: actions/cache@v3 | |
if: ${{ matrix.os == 'windows-latest' }} | |
with: | |
path: "C:/vcpkg/installed" | |
key: vcpkg-${{ matrix.os }}- | |
restore-keys: | | |
vcpkg-${{ matrix.os }}- | |
- name: Install deps (windows) | |
if: ${{ matrix.os == 'windows-latest' }} | |
run: | | |
vcpkg integrate install | |
vcpkg install --only-downloads libarchive:x64-windows-static-md | |
vcpkg install libarchive:x64-windows-static-md | |
- name: Install LLVM and Clang (ubuntu) | |
if: ${{ matrix.os == 'ubuntu-latest' }} | |
uses: KyleMayes/install-llvm-action@v1 | |
with: | |
version: 13.0 | |
- name: Install LLVM and Clang (windows) | |
if: ${{ matrix.os == 'windows-latest' }} | |
run: | | |
Invoke-WebRequest -Uri https://github.com/llvm/llvm-project/releases/download/llvmorg-13.0.0/LLVM-13.0.0-win64.exe -OutFile LLVM-13.0.0-win64.exe | |
7z x .\LLVM-13.0.0-win64.exe -aoa -o'C:\Program Files\LLVM' | |
- uses: dtolnay/rust-toolchain@stable | |
with: | |
toolchain: ${{ env.RUST_TOOLCHAIN }} | |
- uses: Swatinem/rust-cache@v2 | |
- name: Test (ubuntu) | |
if: ${{ matrix.os == 'ubuntu-latest' }} | |
env: | |
RUSTFLAGS: "-Clink-arg=-Wl,--allow-multiple-definition" | |
run: cargo test | |
- name: Test (macos) | |
if: ${{ matrix.os == 'macos-latest' }} | |
env: | |
PKG_CONFIG_PATH: /usr/local/opt/icu4c/lib/pkgconfig:/usr/local/opt/libarchive/lib/pkgconfig:/usr/local/opt/zlib/lib/pkgconfig:/usr/local/opt/expat/lib/pkgconfig | |
run: cargo test | |
- name: Test (windows) | |
if: ${{ matrix.os == 'windows-latest' }} | |
env: | |
LIBCLANG_PATH: C:\Program Files\LLVM\bin | |
run: cargo test | |
build-web: | |
runs-on: ubuntu-latest | |
steps: | |
- uses: actions/checkout@v3 | |
- uses: dtolnay/rust-toolchain@stable | |
with: | |
toolchain: ${{ env.RUST_TOOLCHAIN }} | |
target: wasm32-unknown-unknown | |
- uses: Swatinem/rust-cache@v2 | |
- name: Build tanoshi-web | |
run: | | |
export DART_ARCH="linux-x64" && \ | |
curl -s "https://storage.googleapis.com/dart-archive/channels/stable/release/${{ env.DART_SDK_VERSION }}/sdk/dartsdk-${DART_ARCH}-release.zip" -o "dartsdk-${DART_ARCH}-release.zip" && \ | |
unzip "dartsdk-${DART_ARCH}-release.zip" | |
export PATH="$PATH:$(pwd)/dart-sdk/bin" | |
curl -sL "https://github.com/sass/dart-sass/archive/refs/tags/${{ env.DART_SASS_VERSION }}.zip" -o "${{ env.DART_SASS_VERSION }}.zip" && \ | |
unzip "${{ env.DART_SASS_VERSION }}.zip" && \ | |
cd "dart-sass-${{ env.DART_SASS_VERSION }}" && \ | |
dart pub get && \ | |
dart compile exe bin/sass.dart -o ${{ github.workspace }}/dart-sdk/bin/sass -Dversion="${{ env.DART_SASS_VERSION }}" | |
cd ${{ github.workspace }} | |
cargo install trunk --version ${{ env.TRUNK_VERSION }} --locked | |
cd crates/tanoshi-web && trunk build --release | |
- name: Upload tanoshi-web | |
uses: actions/upload-artifact@v3 | |
with: | |
name: tanoshi-web | |
path: crates/tanoshi-web/dist | |
build-desktop: | |
runs-on: ${{ matrix.os }} | |
needs: | |
- build-web | |
strategy: | |
fail-fast: false | |
matrix: | |
os: | |
- ubuntu-latest | |
- macos-latest | |
- windows-latest | |
steps: | |
- uses: actions/checkout@v3 | |
- name: Download dist | |
uses: actions/download-artifact@v3 | |
with: | |
name: tanoshi-web | |
path: crates/tanoshi-web/dist | |
- uses: dtolnay/rust-toolchain@stable | |
with: | |
toolchain: ${{ env.RUST_TOOLCHAIN }} | |
- uses: Swatinem/rust-cache@v2 | |
- name: Install tauri-cli | |
run: cargo install tauri-cli --version ^1.0.0-rc --locked | |
- name: Install deps | |
if: ${{ matrix.os == 'ubuntu-latest' }} | |
run: sudo apt update && sudo apt upgrade -y && sudo apt install -y libssl-dev libarchive-dev build-essential cmake llvm clang libicu-dev nettle-dev libacl1-dev liblzma-dev libzstd-dev liblz4-dev libbz2-dev zlib1g-dev libxml2-dev lsb-release wget software-properties-common libwebkit2gtk-4.0-dev curl libgtk-3-dev libappindicator3-dev patchelf librsvg2-dev libpango1.0-dev | |
- name: Install deps | |
if: ${{ matrix.os == 'macos-latest' }} | |
run: brew install icu4c libarchive bzip2 lz4 zlib expat llvm@13 libiconv | |
- name: Install LLVM and Clang | |
if: ${{ matrix.os == 'ubuntu-latest' }} | |
uses: KyleMayes/install-llvm-action@v1 | |
with: | |
version: 13.0 | |
- name: Install LLVM and Clang | |
if: ${{ matrix.os == 'windows-latest' }} | |
run: | | |
Invoke-WebRequest -Uri https://github.com/llvm/llvm-project/releases/download/llvmorg-13.0.0/LLVM-13.0.0-win64.exe -OutFile LLVM-13.0.0-win64.exe | |
7z x .\LLVM-13.0.0-win64.exe -aoa -o'C:\Program Files\LLVM' | |
- name: Cache vcpkg | |
uses: actions/cache@v3 | |
if: ${{ matrix.os == 'windows-latest' }} | |
with: | |
path: "C:/vcpkg/installed" | |
key: vcpkg-${{ matrix.os }}- | |
restore-keys: | | |
vcpkg-${{ matrix.os }}- | |
- name: Install deps | |
if: ${{ matrix.os == 'windows-latest' }} | |
run: | | |
vcpkg integrate install | |
vcpkg install --only-downloads libarchive:x64-windows-static-md | |
vcpkg install libarchive:x64-windows-static-md | |
- name: Build tanoshi (ubuntu) | |
if: ${{ matrix.os == 'ubuntu-latest' }} | |
env: | |
RUSTFLAGS: "-Clink-arg=-Wl,--allow-multiple-definition" | |
run: | | |
cd crates/tanoshi | |
cargo tauri build | |
- name: Build tanoshi (macos) | |
if: ${{ matrix.os == 'macos-latest' }} | |
env: | |
PKG_CONFIG_PATH: /usr/local/opt/icu4c/lib/pkgconfig:/usr/local/opt/libarchive/lib/pkgconfig:/usr/local/opt/zlib/lib/pkgconfig:/usr/local/opt/expat/lib/pkgconfig | |
run: | | |
cd crates/tanoshi | |
cargo tauri build | |
- name: Build tanoshi (windows) | |
if: ${{ matrix.os == 'windows-latest' }} | |
run: | | |
cd crates/tanoshi | |
cargo tauri build | |
- name: Move files (linux/macOS) | |
if: ${{ matrix.os == 'ubuntu-latest' || matrix.os == 'macos-latest' }} | |
run: | | |
mkdir -p builds | |
find target/release/bundle/ -type f \( -name "*.deb" -o -name "*.AppImage" -o -name "*.dmg" \) -print0 | | |
while IFS= read -r -d '' file; do | |
mv "$file" ${{ github.workspace }}/builds/ | |
done | |
- name: Move files (windows) | |
if: ${{ matrix.os == 'windows-latest' }} | |
run: | | |
mkdir -p builds | |
mv target/release/bundle/msi/*.msi ${{ github.workspace }}/builds/ | |
- name: Upload dist | |
uses: actions/upload-artifact@v3 | |
with: | |
name: tanoshi-desktop | |
path: ${{ github.workspace }}/builds/ | |
- name: Upload binaries to GitHub Releases | |
if: startsWith(github.ref, 'refs/tags/') | |
uses: svenstaro/upload-release-action@v2 | |
with: | |
repo_token: ${{ secrets.GITHUB_TOKEN }} | |
file: ${{ github.workspace }}/builds/* | |
tag: ${{ github.ref }} | |
file_glob: true | |
overwrite: true | |
build-cli: | |
runs-on: ubuntu-latest | |
steps: | |
- uses: actions/checkout@v3 | |
- name: Install deps | |
run: sudo apt update && sudo apt upgrade -y && sudo apt install -y libssl-dev libarchive-dev build-essential cmake libicu-dev nettle-dev libacl1-dev liblzma-dev libzstd-dev liblz4-dev libbz2-dev zlib1g-dev libxml2-dev lsb-release wget software-properties-common libwebkit2gtk-4.0-dev curl libgtk-3-dev libappindicator3-dev patchelf librsvg2-dev libpango1.0-dev | |
- name: Install LLVM and Clang | |
uses: KyleMayes/install-llvm-action@v1 | |
with: | |
version: "13.0" | |
- name: Install rust | |
uses: dtolnay/rust-toolchain@stable | |
with: | |
toolchain: ${{ env.RUST_TOOLCHAIN }} | |
- name: Build tanoshi-cli | |
env: | |
RUSTFLAGS: "-Clink-arg=-Wl,--allow-multiple-definition" | |
LLVM_SYS_130_PREFIX: ${{ env.LLVM_PATH }} | |
run: | | |
cargo build -p tanoshi-cli --release | |
- name: Copy artifact | |
run: | | |
mkdir ${{ github.workspace }}/artifact/ | |
cp ${{ github.workspace }}/target/release/tanoshi-cli ${{ github.workspace }}/artifact/ | |
- name: Upload artifact | |
uses: actions/upload-artifact@v3 | |
with: | |
name: tanoshi-cli | |
path: ${{ github.workspace }}/artifact/tanoshi-cli | |
- name: Upload binaries to GitHub Releases | |
if: startsWith(github.ref, 'refs/tags/') | |
uses: svenstaro/upload-release-action@v2 | |
with: | |
repo_token: ${{ secrets.GITHUB_TOKEN }} | |
file: target/release/tanoshi-cli | |
asset_name: tanoshi-cli | |
tag: ${{ github.ref }} | |
build-docker: | |
runs-on: ubuntu-latest | |
needs: | |
- test | |
- build-web | |
strategy: | |
fail-fast: false | |
matrix: | |
include: | |
- dockerfile: Dockerfile | |
variant: slim | |
steps: | |
- name: Checkout | |
uses: actions/checkout@v3 | |
- name: Docker meta | |
id: docker_meta | |
uses: docker/metadata-action@v4 | |
with: | |
images: | | |
${{ secrets.DOCKER_USERNAME }}/tanoshi,enable=${{ secrets.DOCKER_USERNAME != '' }} | |
tags: | | |
type=raw,value=latest,enable=${{ matrix.variant == 'slim' && github.ref_name == github.event.repository.default_branch }} | |
type=raw,value=dev,enable=${{ matrix.variant == 'slim' && github.ref_name == 'dev' }} | |
type=raw,value=latest,suffix=-${{ matrix.variant }},enable={{ is_default_branch }} | |
type=ref,event=branch,suffix=-${{ matrix.variant }} | |
type=ref,event=pr,suffix=-${{ matrix.variant }} | |
type=semver,pattern={{ version }},suffix=-${{ matrix.variant }} | |
type=semver,pattern={{ major }}.{{ minor }},suffix=-${{ matrix.variant }} | |
type=sha,suffix=-${{ matrix.variant }} | |
- name: Set up Docker Buildx | |
id: buildx | |
uses: docker/setup-buildx-action@v2 | |
- name: Append arm64 node to buildx | |
id: arm64 | |
env: | |
SSH_ARM64_HOST: ${{ secrets.SSH_ARM64_HOST }} | |
SSH_ARM64_PORT: ${{ secrets.SSH_ARM64_PORT }} | |
if: "${{ env.SSH_ARM64_HOST != '' }}" | |
run: | | |
mkdir -p ~/.ssh | |
chmod 700 ~/.ssh | |
echo "${{ secrets.SSH_PRIVATE_KEY }}" > ~/.ssh/id_rsa | |
chmod 600 ~/.ssh/id_rsa | |
if [ -z "$SSH_ARM64_PORT" ]; then | |
ssh-keyscan ${{ secrets.SSH_ARM64_HOST }} >> ~/.ssh/known_hosts | |
else | |
ssh-keyscan -p ${{ secrets.SSH_ARM64_PORT }} ${{ secrets.SSH_ARM64_HOST }} >> ~/.ssh/known_hosts | |
fi | |
chmod 644 ~/.ssh/known_hosts | |
if [ -z "$SSH_ARM64_PORT" ]; then | |
docker context create node-arm64 --docker "host=ssh://${{ secrets.SSH_ARM64_USER }}@${{ secrets.SSH_ARM64_HOST }}" | |
else | |
docker context create node-arm64 --docker "host=ssh://${{ secrets.SSH_ARM64_USER }}@${{ secrets.SSH_ARM64_HOST }}:${{ secrets.SSH_ARM64_PORT }}" | |
fi | |
docker buildx create --append --name ${{ steps.buildx.outputs.name }} --platform linux/arm64 node-arm64 | |
- name: Build platforms | |
run: | | |
# If arm64 was successfully appended, then we build for amd64 and arm64 | |
if [ -z "$SSH_ARM64_HOST" ]; then | |
echo "PLATFORMS=linux/amd64,linux/arm64" >> $GITHUB_ENV | |
else | |
echo "PLATFORMS=linux/amd64" >> $GITHUB_ENV | |
fi | |
- name: Login to DockerHub | |
env: | |
DOCKER_USERNAME: ${{ secrets.DOCKER_USERNAME }} | |
if: "${{ env.DOCKER_USERNAME != '' }}" | |
uses: docker/login-action@v2 | |
with: | |
username: ${{ secrets.DOCKER_USERNAME }} | |
password: ${{ secrets.DOCKER_TOKEN }} | |
- name: Build | |
id: build | |
if: "${{ steps.docker_meta.outputs.tags == '' }}" | |
uses: docker/build-push-action@v4 | |
with: | |
context: . | |
file: ${{ matrix.dockerfile }} | |
platforms: ${{ env.PLATFORMS }} | |
push: false | |
tags: tanoshi:action | |
build-args: | | |
BUILD_WEB=false | |
cache-from: type=registry,ref=luigi311/tanoshi:buildcache | |
cache-to: type=registry,ref=luigi311/tanoshi:buildcache,mode=max | |
- name: Build Push | |
id: build_push | |
if: "${{ steps.docker_meta.outputs.tags != '' }}" | |
uses: docker/build-push-action@v4 | |
with: | |
context: . | |
file: ${{ matrix.dockerfile }} | |
platforms: ${{ env.PLATFORMS }} | |
push: true | |
tags: ${{ steps.docker_meta.outputs.tags }} | |
labels: ${{ steps.docker_meta.outputs.labels }} | |
build-args: | | |
BUILD_WEB=false | |
cache-from: type=registry,ref=luigi311/tanoshi:buildcache | |
cache-to: type=registry,ref=luigi311/tanoshi:buildcache,mode=max |