diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml new file mode 100644 index 0000000..f9df16b --- /dev/null +++ b/.github/workflows/ci.yml @@ -0,0 +1,48 @@ +name: CI + +on: + workflow_dispatch: + push: + branches: + - v6 + pull_request: + merge_group: + +jobs: + test: + strategy: + matrix: + include: + - os: ubuntu-22.04 + target: x86_64-unknown-linux-gnu + # - os: ubuntu-22.04 + # target: x86_64-unknown-linux-musl + # - os: ubuntu-22.04 + # target: aarch64-unknown-linux-gnu + # - os: ubuntu-22.04 + # target: aarch64-unknown-linux-musl + - os: macos-14 + target: x86_64-apple-darwin + - os: macos-14 + target: aarch64-apple-darwin + - os: windows-2022 + target: x86_64-pc-windows-msvc + - os: windows-2022 + target: x86_64-pc-windows-gnu + runs-on: ${{ matrix.os }} + steps: + - uses: actions/checkout@v3 + - name: Install Rust stable + uses: dtolnay/rust-toolchain@stable + with: + targets: ${{ matrix.target }} + components: clippy,rustfmt + - uses: Swatinem/rust-cache@v2 + with: + prefix-key: ${{ matrix.os }}-${{ matrix.target }}-rust + cache-targets: true + cache-on-failure: false + - name: Install native dependencies + if: runner.os == 'Linux' + run: sudo apt update -y && sudo apt install -y libasound2-dev binutils-aarch64-linux-gnu gcc-aarch64-linux-gnu + - run: cargo test --verbose --target ${{ matrix.target }} diff --git a/.github/workflows/pypi.yml b/.github/workflows/pypi.yml index 0f70712..ec508b7 100644 --- a/.github/workflows/pypi.yml +++ b/.github/workflows/pypi.yml @@ -1,9 +1,14 @@ -name: Build and Publish to PyPI +name: Python Wheel on: push: + branches: + - v6 tags: - v[0-9]+.* - test-release.* + workflow_dispatch: + pull_request: + merge_group: jobs: windows-build: @@ -13,12 +18,9 @@ jobs: runs-on: "windows-latest" steps: - uses: actions/checkout@v3 - - name: Install latests stable Rust - uses: actions-rs/toolchain@v1 - with: - toolchain: stable - override: true - - uses: actions/setup-python@v4 + - name: Install Rust stable + uses: dtolnay/rust-toolchain@stable + - uses: actions/setup-python@v5 with: python-version: ${{ matrix.pyversion }} architecture: x64 @@ -40,47 +42,52 @@ jobs: - name: Install wheel run: pip install aspeak --no-index --find-links dist --no-deps --force-reinstall - name: Save Artifacts - uses: actions/upload-artifact@v3 + uses: actions/upload-artifact@v4 with: - name: wheels + name: wheels-windows-x86_64 path: dist macos-build: strategy: matrix: - pyversion: ["3.11"] - runs-on: "macos-latest" + include: + - pyversion: "3.11" + runner: macos-13 + arch: "x86_64" + abbr-arch: x64 + - pyversion: "3.11" + runner: macos-14 + arch: "aarch64" + abbr-arch: arm64 + runs-on: ${{ matrix.runner }} steps: - uses: actions/checkout@v3 - - name: Install latests stable Rust - uses: actions-rs/toolchain@v1 - with: - toolchain: stable - override: true - - uses: actions/setup-python@v4 + - name: Install Rust stable + uses: dtolnay/rust-toolchain@stable + - uses: actions/setup-python@v5 with: python-version: ${{ matrix.pyversion }} - architecture: x64 + architecture: ${{ matrix.abbr-arch }} - name: Build Wheel (PyO3 Binding) uses: messense/maturin-action@v1 with: - target: x86_64 + target: ${{ matrix.arch }} command: build args: --release --strip -F python --bindings pyo3 --interpreter python --manifest-path Cargo.toml --out dist-pyo3 - name: Build Wheel (Bin Binding) uses: messense/maturin-action@v1 with: - target: x86_64 + target: ${{ matrix.arch }} command: build args: --release --strip -F binary --bindings bin --interpreter python --manifest-path Cargo.toml --out dist-bin - name: Merge Wheels run: bash merge-wheel.bash - name: Install wheel - run: pip install aspeak --no-index --find-links dist --no-deps --force-reinstall + run: pip install --no-index ./dist/aspeak-*.whl --no-deps --force-reinstall - name: Save Artifacts - uses: actions/upload-artifact@v3 + uses: actions/upload-artifact@v4 with: - name: wheels + name: wheels-macos-${{ matrix.arch }} path: dist # linux-build: @@ -96,7 +103,7 @@ jobs: # with: # toolchain: stable # override: true - # - uses: actions/setup-python@v4 + # - uses: actions/setup-python@v5 # with: # python-version: ${{ matrix.pyversion }} # architecture: x64 @@ -124,7 +131,7 @@ jobs: # - name: Install wheel # run: pip install aspeak --no-index --find-links dist --no-deps --force-reinstall # - name: Save Artifacts - # uses: actions/upload-artifact@v3 + # uses: actions/upload-artifact@v4 # with: # name: wheels # path: dist @@ -135,10 +142,11 @@ jobs: if: "startsWith(github.ref, 'refs/tags/')" steps: - name: Download Artifacts - uses: actions/download-artifact@v3 + uses: actions/download-artifact@v4 with: - name: wheels + pattern: wheels-* path: dist + merge-multiple: true - name: Publish Wheels uses: pypa/gh-action-pypi-publish@release/v1 with: diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index f2bafc3..464870a 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -33,9 +33,9 @@ jobs: # target: aarch64-unknown-linux-gnu # - os: ubuntu-22.04 # target: aarch64-unknown-linux-musl - - os: macos-12 + - os: macos-14 target: x86_64-apple-darwin - - os: macos-12 + - os: macos-14 target: aarch64-apple-darwin - os: windows-2022 target: x86_64-pc-windows-msvc @@ -44,9 +44,10 @@ jobs: runs-on: ${{ matrix.os }} steps: - uses: actions/checkout@v3 - - uses: actions-rs/toolchain@v1 + - name: Install Rust stable + uses: dtolnay/rust-toolchain@stable with: - toolchain: stable + targets: ${{ matrix.target }} - uses: Swatinem/rust-cache@v2 with: prefix-key: ${{ matrix.os }}-${{ matrix.target }}-rust