diff --git a/.gitea/workflows/release.yml b/.gitea/workflows/release.yml new file mode 100644 index 0000000..7ae91ab --- /dev/null +++ b/.gitea/workflows/release.yml @@ -0,0 +1,149 @@ +name: Release + +on: + push: + tags: + - 'v*' + +jobs: + build: + name: Build ${{ matrix.target }} + runs-on: ${{ matrix.os }} + strategy: + matrix: + include: + # Linux + - os: ubuntu-latest + target: x86_64-unknown-linux-gnu + artifact_name: owlen-linux-x86_64-gnu + - os: ubuntu-latest + target: x86_64-unknown-linux-musl + artifact_name: owlen-linux-x86_64-musl + - os: ubuntu-latest + target: aarch64-unknown-linux-gnu + artifact_name: owlen-linux-aarch64-gnu + - os: ubuntu-latest + target: aarch64-unknown-linux-musl + artifact_name: owlen-linux-aarch64-musl + - os: ubuntu-latest + target: armv7-unknown-linux-gnueabihf + artifact_name: owlen-linux-armv7-gnu + - os: ubuntu-latest + target: armv7-unknown-linux-musleabihf + artifact_name: owlen-linux-armv7-musl + # Windows + - os: windows-latest + target: x86_64-pc-windows-msvc + artifact_name: owlen-windows-x86_64 + - os: windows-latest + target: aarch64-pc-windows-msvc + artifact_name: owlen-windows-aarch64 + # macOS + - os: macos-latest + target: x86_64-apple-darwin + artifact_name: owlen-macos-x86_64 + - os: macos-latest + target: aarch64-apple-darwin + artifact_name: owlen-macos-aarch64 + + steps: + - name: Checkout code + uses: actions/checkout@v4 + + - name: Install Rust + uses: https://github.com/dtolnay/rust-toolchain@stable + with: + targets: ${{ matrix.target }} + + - name: Install cross-compilation tools (Linux) + if: runner.os == 'Linux' + run: | + sudo apt-get update + sudo apt-get install -y musl-tools gcc-aarch64-linux-gnu gcc-arm-linux-gnueabihf + + - name: Build + shell: bash + run: | + case "${{ matrix.target }}" in + aarch64-unknown-linux-gnu) + export CARGO_TARGET_AARCH64_UNKNOWN_LINUX_GNU_LINKER=aarch64-linux-gnu-gcc + ;; + aarch64-unknown-linux-musl) + export CARGO_TARGET_AARCH64_UNKNOWN_LINUX_MUSL_LINKER=aarch64-linux-gnu-gcc + export CC_aarch64_unknown_linux_musl=aarch64-linux-gnu-gcc + ;; + armv7-unknown-linux-gnueabihf) + export CARGO_TARGET_ARMV7_UNKNOWN_LINUX_GNUEABIHF_LINKER=arm-linux-gnueabihf-gcc + ;; + armv7-unknown-linux-musleabihf) + export CARGO_TARGET_ARMV7_UNKNOWN_LINUX_MUSLEABIHF_LINKER=arm-linux-gnueabihf-gcc + export CC_armv7_unknown_linux_musleabihf=arm-linux-gnueabihf-gcc + ;; + esac + cargo build --release --all-features --target ${{ matrix.target }} + + - name: Package binaries (Unix) + if: runner.os != 'Windows' + run: | + mkdir -p dist + cp target/${{ matrix.target }}/release/owlen dist/owlen + cp target/${{ matrix.target }}/release/owlen-code dist/owlen-code + cd dist + tar czf ${{ matrix.artifact_name }}.tar.gz owlen owlen-code + cd .. + mv dist/${{ matrix.artifact_name }}.tar.gz . + + - name: Package binaries (Windows) + if: runner.os == 'Windows' + shell: bash + run: | + mkdir -p dist + cp target/${{ matrix.target }}/release/owlen.exe dist/owlen.exe + cp target/${{ matrix.target }}/release/owlen-code.exe dist/owlen-code.exe + cd dist + 7z a -tzip ../${{ matrix.artifact_name }}.zip owlen.exe owlen-code.exe + + - name: Upload artifact + uses: actions/upload-artifact@v4 + with: + name: ${{ matrix.artifact_name }} + path: | + ${{ matrix.artifact_name }}.tar.gz + ${{ matrix.artifact_name }}.zip + + release: + name: Create Release + needs: build + runs-on: ubuntu-latest + steps: + - name: Checkout code + uses: actions/checkout@v4 + + - name: Download all artifacts + uses: actions/download-artifact@v4 + with: + path: artifacts + + - name: Create source tarball + run: | + git archive --format=tar.gz --prefix=owlen/ -o owlen-${{ github.ref_name }}.tar.gz ${{ github.ref_name }} + + - name: Generate checksums + shell: bash + run: | + cd artifacts + find . -name "*.tar.gz" -exec mv {} . \; 2>/dev/null || true + find . -name "*.zip" -exec mv {} . \; 2>/dev/null || true + cd .. + mv artifacts/*.tar.gz . 2>/dev/null || true + mv artifacts/*.zip . 2>/dev/null || true + sha256sum *.tar.gz *.zip > checksums.txt 2>/dev/null || sha256sum * > checksums.txt + + - name: Create Release + uses: https://gitea.com/gitea/release-action@main + with: + files: | + *.tar.gz + *.zip + checksums.txt + api_key: ${{ secrets.RELEASE_TOKEN }} diff --git a/PKGBUILD b/PKGBUILD new file mode 100644 index 0000000..e2a13c3 --- /dev/null +++ b/PKGBUILD @@ -0,0 +1,45 @@ +# Maintainer: Owlibou +pkgname=owlen +pkgver=0.1.0 +pkgrel=1 +pkgdesc="Terminal User Interface LLM client for Ollama with chat and code assistance features" +arch=('x86_64' 'aarch64') +url="https://somegit.dev/Owlibou/owlen" +license=('AGPL-3.0-only') +depends=('gcc-libs') +makedepends=('cargo' 'git') +source=("${pkgname}-${pkgver}.tar.gz::https://somegit.dev/Owlibou/owlen/archive/v${pkgver}.tar.gz") +sha256sums=('SKIP') # Update this after first release + +prepare() { + cd "$pkgname" + export RUSTUP_TOOLCHAIN=stable + cargo fetch --locked --target "$(rustc -vV | sed -n 's/host: //p')" +} + +build() { + cd "$pkgname" + export RUSTUP_TOOLCHAIN=stable + export CARGO_TARGET_DIR=target + cargo build --frozen --release --all-features +} + +check() { + cd "$pkgname" + export RUSTUP_TOOLCHAIN=stable + cargo test --frozen --all-features +} + +package() { + cd "$pkgname" + + # Install binaries + install -Dm755 "target/release/owlen" "$pkgdir/usr/bin/owlen" + install -Dm755 "target/release/owlen-code" "$pkgdir/usr/bin/owlen-code" + + # Install license + install -Dm644 LICENSE "$pkgdir/usr/share/licenses/$pkgname/LICENSE" + + # Install documentation + install -Dm644 README.md "$pkgdir/usr/share/doc/$pkgname/README.md" +}