Skip to content

Setup CI for opensvm-dioxus #11

Setup CI for opensvm-dioxus

Setup CI for opensvm-dioxus #11

Workflow file for this run

name: CI/CD Pipeline
on:
push:
branches: [main]
tags: ['v*']
pull_request:
branches: [main]
env:
CARGO_TERM_COLOR: always
RUST_BACKTRACE: 1
jobs:
build-and-test:
name: Build & Test
runs-on: ${{ matrix.os }}
strategy:
fail-fast: false
matrix:
os: [ubuntu-22.04, macos-latest, windows-latest]
include:
- os: ubuntu-22.04
target: wasm32-unknown-unknown
platform: web
- os: macos-latest
target: x86_64-apple-darwin
platform: desktop
- os: windows-latest
target: x86_64-pc-windows-msvc
platform: desktop
steps:
- name: Checkout repository
uses: actions/checkout@v4
- name: Install Rust toolchain
uses: dtolnay/rust-toolchain@stable
with:
targets: ${{ matrix.target }}
- name: Cache dependencies
uses: actions/cache@v4
with:
path: |
~/.cargo/registry
~/.cargo/git
opensvm-dioxus/target
key: ${{ runner.os }}-cargo-${{ hashFiles('**/Cargo.lock') }}
restore-keys: ${{ runner.os }}-cargo-
- name: Add WASM target
if: ${{ matrix.platform == 'web' }}
run: rustup target add wasm32-unknown-unknown
- name: Install Linux dependencies
if: ${{ matrix.os == 'ubuntu-22.04' }}
run: |
sudo apt-get update
sudo apt-get install -y libgtk-3-dev libwebkit2gtk-4.0-dev libappindicator3-dev librsvg2-dev patchelf pkg-config libssl-dev
- name: Install wasm-bindgen-cli
if: ${{ matrix.platform == 'web' }}
run: cargo install wasm-bindgen-cli
- name: Build for Web
if: ${{ matrix.platform == 'web' }}
run: |
cd opensvm-dioxus
cargo build --target wasm32-unknown-unknown --features web --release
- name: Build for Desktop (macOS/Linux)
if: ${{ matrix.platform == 'desktop' && matrix.os != 'windows-latest' }}
run: |
cd opensvm-dioxus
RUSTFLAGS="-C target-cpu=native" cargo build --features desktop --release
shell: bash
- name: Build for Desktop (Windows)
if: ${{ matrix.platform == 'desktop' && matrix.os == 'windows-latest' }}
run: |
cd opensvm-dioxus
$env:RUSTFLAGS="-C target-cpu=native"
cargo build --features desktop --release
shell: pwsh
- name: Run tests
run: |
cd opensvm-dioxus
cargo test --all-features
- name: Upload artifacts
uses: actions/upload-artifact@v4
with:
name: opensvm-dioxus-${{ matrix.os }}-${{ matrix.platform }}
path: |
opensvm-dioxus/target/*/release/opensvm-dioxus*
opensvm-dioxus/target/release/opensvm-dioxus*
release:
name: Create Release
needs: build-and-test
if: startsWith(github.ref, 'refs/tags/v')
runs-on: ubuntu-22.04
steps:
- name: Checkout repository
uses: actions/checkout@v4
- name: Download all artifacts
uses: actions/download-artifact@v4
with:
path: artifacts
- name: Prepare release assets
run: |
mkdir -p release-assets
# Web (WASM)
if [ -d "artifacts/opensvm-dioxus-ubuntu-22.04-web" ]; then
cd artifacts/opensvm-dioxus-ubuntu-22.04-web
zip -r ../release-assets/opensvm-dioxus-web.zip .
cd ..
fi
# macOS
if [ -d "artifacts/opensvm-dioxus-macos-latest-desktop" ]; then
cd artifacts/opensvm-dioxus-macos-latest-desktop
zip -r ../release-assets/opensvm-dioxus-macos.zip .
cd ..
fi
# Windows
if [ -d "artifacts/opensvm-dioxus-windows-latest-desktop" ]; then
cd artifacts/opensvm-dioxus-windows-latest-desktop
zip -r ../release-assets/opensvm-dioxus-windows.zip .
cd ..
fi
# Android
if [ -d "artifacts/opensvm-dioxus-android" ]; then
cd artifacts/opensvm-dioxus-android
zip -r ../release-assets/opensvm-dioxus-android.zip .
cd ..
fi
shell: bash
- name: Create GitHub Release
id: create_release
uses: softprops/action-gh-release@v1
with:
files: release-assets/*
draft: false
prerelease: false
generate_release_notes: true
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
homebrew:
name: Update Homebrew Formula
needs: release
if: startsWith(github.ref, 'refs/tags/v')
runs-on: macos-latest
steps:
- name: Checkout repository
uses: actions/checkout@v4
- name: Set up Git
run: |
git config --global user.name "GitHub Actions"
git config --global user.email "[email protected]"
- name: Download macOS artifact
uses: actions/download-artifact@v4
with:
name: opensvm-dioxus-macos-latest-desktop
path: macos-artifact
- name: Create Homebrew Formula
run: |
VERSION=${GITHUB_REF#refs/tags/v}
DOWNLOAD_URL="https://github.com/${{ github.repository }}/releases/download/v${VERSION}/opensvm-dioxus-macos.zip"
# Wait for release to be available
sleep 30
# Calculate SHA256 of the released asset
curl -L -o opensvm-dioxus-macos.zip "$DOWNLOAD_URL" || exit 1
SHA256=$(shasum -a 256 opensvm-dioxus-macos.zip | awk '{print $1}')
# Create formula directory if it doesn't exist
mkdir -p Formula
# Create or update formula file
cat > Formula/opensvm-dioxus.rb << EOF
class OpensvmDioxus < Formula
desc "OpenSVM Dioxus application for Solana blockchain ecosystem"
homepage "https://github.com/${{ github.repository }}"
url "$DOWNLOAD_URL"
sha256 "$SHA256"
version "$VERSION"
def install
libexec.install Dir["*"]
bin.install_symlink libexec/"opensvm-dioxus"
end
end
EOF
# Create a new branch for the formula update
git checkout -b update-homebrew-formula-v$VERSION
# Commit and push changes
git add Formula/opensvm-dioxus.rb
git commit -m "Update Homebrew formula to v$VERSION"
git push origin update-homebrew-formula-v$VERSION
# Create pull request using GitHub CLI
gh pr create --title "Update Homebrew formula to v$VERSION" --body "Updates the Homebrew formula for opensvm-dioxus to version $VERSION" --base main --head update-homebrew-formula-v$VERSION
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
android-build:
name: Build Android
runs-on: ubuntu-22.04
if: github.event_name == 'push'
steps:
- name: Checkout repository
uses: actions/checkout@v4
- name: Set up JDK 17
uses: actions/setup-java@v4
with:
distribution: 'temurin'
java-version: '17'
- name: Install Rust toolchain
uses: dtolnay/rust-toolchain@stable
with:
targets: aarch64-linux-android
- name: Install Android SDK
uses: android-actions/setup-android@v3
- name: Cache dependencies
uses: actions/cache@v4
with:
path: |
~/.cargo/registry
~/.cargo/git
opensvm-dioxus/target
key: android-cargo-${{ hashFiles('**/Cargo.lock') }}
restore-keys: android-cargo-
- name: Build for Android
run: |
cd opensvm-dioxus
RUSTFLAGS="-C opt-level=3 -C lto=thin" cargo build --target aarch64-linux-android --features android --release
- name: Upload Android artifact
uses: actions/upload-artifact@v4
with:
name: opensvm-dioxus-android
path: opensvm-dioxus/target/aarch64-linux-android/release/opensvm-dioxus