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

Update for new maintainer #1

Merged
merged 1 commit into from
Aug 9, 2023
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
389 changes: 389 additions & 0 deletions .github/workflows/ci.yml
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
Loading