-
Notifications
You must be signed in to change notification settings - Fork 3
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Signed-off-by: Luigi311 <[email protected]>
- Loading branch information
Showing
19 changed files
with
416 additions
and
607 deletions.
There are no files selected for viewing
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
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,389 @@ | ||
name: test | ||
|
||
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.69.0 | ||
|
||
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: | | ||
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: Upload dist (ubuntu) | ||
uses: actions/upload-artifact@v3 | ||
if: ${{ matrix.os == 'ubuntu-latest' }} | ||
with: | ||
name: tanoshi-desktop | ||
path: | | ||
target/release/bundle/**/*.deb | ||
target/release/bundle/**/*.AppImage | ||
!target/release/bundle/**/linuxdeploy-x86_64.AppImage | ||
- name: Upload dist (macos) | ||
uses: actions/upload-artifact@v3 | ||
if: ${{ matrix.os == 'macos-latest' }} | ||
with: | ||
name: tanoshi-desktop | ||
path: target/release/bundle/**/*.dmg | ||
|
||
- name: Upload dist (windows) | ||
uses: actions/upload-artifact@v3 | ||
if: ${{ matrix.os == 'windows-latest' }} | ||
with: | ||
name: tanoshi-desktop | ||
path: target/release/bundle/**/*.msi | ||
|
||
- 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/bundle/**/* | ||
tag: ${{ github.ref }} | ||
|
||
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 |
Oops, something went wrong.