diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 8708ba964..47a1d6b09 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -421,3 +421,35 @@ jobs: override: true - name: Typos check with custom config file uses: crate-ci/typos@master + + cross-check: + runs-on: ${{ matrix.platform.runner }} + strategy: + matrix: + platform: + - runner: ubuntu-20.04 + target: x86_64-unknown-linux-gnu + - runner: ubuntu-20.04 + target: i686-unknown-linux-gnu + - runner: ubuntu-20.04 + target: aarch64-unknown-linux-gnu + - runner: ubuntu-20.04 + target: aarch64-unknown-linux-musl + - runner: ubuntu-20.04 + target: armv7-unknown-linux-musleabihf + - runner: macos-12 + target: aarch64-apple-darwin + - runner: macos-12 + target: x86_64-apple-darwin + fail-fast: false + steps: + - uses: actions/checkout@v3 + - uses: r7kamura/rust-problem-matchers@v1.1.0 + - name: "Add toolchains" + run: rustup target add ${{ matrix.platform.target }} + - name: "Build" + uses: actions-rs/cargo@v1 + with: + use-cross: true + command: check + args: --target ${{ matrix.platform.target }} -p dora-cli diff --git a/.github/workflows/pip-release.yml b/.github/workflows/pip-release.yml index 70cbb21be..1916c0d7a 100644 --- a/.github/workflows/pip-release.yml +++ b/.github/workflows/pip-release.yml @@ -13,46 +13,135 @@ on: types: - "published" workflow_dispatch: + push: + branches: + - main + pull_request: permissions: contents: write jobs: linux: - runs-on: ubuntu-latest + runs-on: ${{ matrix.platform.runner }} strategy: matrix: - target: [x86_64, x86, aarch64] + platform: + - runner: ubuntu-latest + target: x86_64 + - runner: ubuntu-latest + target: x86 + - runner: ubuntu-latest + target: aarch64 + - runner: ubuntu-latest + target: armv7 + # - runner: ubuntu-latest + # target: s390x + # - runner: ubuntu-latest + # target: ppc64le steps: - - uses: actions/checkout@v3 - - uses: actions/setup-python@v4 + - uses: actions/checkout@v4 + - uses: actions/setup-python@v5 with: - python-version: "3.8" - - name: Install dependencies - run: | - pip install patchelf --upgrade + python-version: 3.8 - name: Build wheels uses: PyO3/maturin-action@v1 with: - target: ${{ matrix.target }} + target: ${{ matrix.platform.target }} args: --release --out dist --zig sccache: "true" manylinux: auto working-directory: apis/python/node + - name: Upload wheels + if: github.event_name == 'release' + uses: actions/upload-artifact@v4 + with: + name: wheels-linux-${{ matrix.platform.target }} + path: apis/python/node/dist + - name: Upload to release + if: github.event_name == 'release' + uses: svenstaro/upload-release-action@v2 + with: + repo_token: ${{ secrets.GITHUB_TOKEN }} + file: apis/python/node/dist/* + tag: ${{ github.ref }} + file_glob: true + + musllinux: + runs-on: ${{ matrix.platform.runner }} + strategy: + matrix: + platform: + - runner: ubuntu-latest + target: x86_64 + - runner: ubuntu-latest + target: x86 + - runner: ubuntu-latest + target: aarch64 + steps: + - uses: actions/checkout@v4 + - uses: actions/setup-python@v5 + with: + python-version: 3.8 - name: Build wheels uses: PyO3/maturin-action@v1 with: - target: ${{ matrix.target }} - args: --release --out dist --zig + target: ${{ matrix.platform.target }} + args: --release --out dist sccache: "true" - working-directory: apis/python/node manylinux: musllinux_1_2 + working-directory: apis/python/node + - name: Upload wheels + if: github.event_name == 'release' + uses: actions/upload-artifact@v4 + with: + name: wheels-musllinux-${{ matrix.platform.target }} + path: apis/python/node/dist + - name: Upload to release + if: github.event_name == 'release' + uses: svenstaro/upload-release-action@v2 + with: + repo_token: ${{ secrets.GITHUB_TOKEN }} + file: apis/python/node/dist/* + tag: ${{ github.ref }} + file_glob: true + + musleabi: + runs-on: ubuntu-latest + strategy: + matrix: + platform: + [ + { + target: "armv7-unknown-linux-musleabihf", + image_tag: "armv7-musleabihf", + }, + ] + container: + image: docker://messense/rust-musl-cross:${{ matrix.platform.image_tag }} + env: + CFLAGS_armv7_unknown_linux_musleabihf: "-mfpu=vfpv3-d16" + steps: + - uses: actions/checkout@v4 + - uses: actions/setup-python@v5 + with: + python-version: 3.8 + - name: Build Wheels + uses: PyO3/maturin-action@v1 + with: + target: ${{ matrix.platform.target }} + manylinux: auto + container: off + args: --release -o dist + working-directory: apis/python/node - name: Upload wheels + if: github.event_name == 'release' uses: actions/upload-artifact@v3 with: - name: wheels + name: wheels-musllinux-${{ matrix.platform.target }} path: apis/python/node/dist - name: Upload to release + if: github.event_name == 'release' uses: svenstaro/upload-release-action@v2 with: repo_token: ${{ secrets.GITHUB_TOKEN }} @@ -61,29 +150,33 @@ jobs: file_glob: true windows: - runs-on: windows-latest + runs-on: ${{ matrix.platform.runner }} strategy: matrix: - target: [x64, x86] + platform: + - runner: windows-latest + target: x64 steps: - - uses: actions/checkout@v3 - - uses: actions/setup-python@v4 + - uses: actions/checkout@v4 + - uses: actions/setup-python@v5 with: - python-version: "3.7" - architecture: ${{ matrix.target }} + python-version: 3.8 + architecture: ${{ matrix.platform.target }} - name: Build wheels uses: PyO3/maturin-action@v1 with: - target: ${{ matrix.target }} + target: ${{ matrix.platform.target }} args: --release --out dist sccache: "true" working-directory: apis/python/node - name: Upload wheels - uses: actions/upload-artifact@v3 + if: github.event_name == 'release' + uses: actions/upload-artifact@v4 with: - name: wheels + name: wheels-windows-${{ matrix.platform.target }} path: apis/python/node/dist - name: Upload to release + if: github.event_name == 'release' uses: svenstaro/upload-release-action@v2 with: repo_token: ${{ secrets.GITHUB_TOKEN }} @@ -92,28 +185,34 @@ jobs: file_glob: true macos: - runs-on: macos-latest + runs-on: ${{ matrix.platform.runner }} strategy: matrix: - target: [x86_64, aarch64] + platform: + - runner: macos-12 + target: x86_64 + - runner: macos-14 + target: aarch64 steps: - - uses: actions/checkout@v3 - - uses: actions/setup-python@v4 + - uses: actions/checkout@v4 + - uses: actions/setup-python@v5 with: - python-version: "3.8" + python-version: 3.8 - name: Build wheels uses: PyO3/maturin-action@v1 with: - target: ${{ matrix.target }} + target: ${{ matrix.platform.target }} args: --release --out dist sccache: "true" working-directory: apis/python/node - name: Upload wheels - uses: actions/upload-artifact@v3 + if: github.event_name == 'release' + uses: actions/upload-artifact@v4 with: - name: wheels + name: wheels-macos-${{ matrix.platform.target }} path: apis/python/node/dist - name: Upload to release + if: github.event_name == 'release' uses: svenstaro/upload-release-action@v2 with: repo_token: ${{ secrets.GITHUB_TOKEN }} @@ -132,6 +231,7 @@ jobs: args: --out dist working-directory: apis/python/node - name: Upload sdist + if: github.event_name == 'release' uses: actions/upload-artifact@v3 with: name: wheels @@ -140,16 +240,14 @@ jobs: release: name: Release runs-on: ubuntu-latest - if: "startsWith(github.ref, 'refs/tags/')" - needs: [linux, windows, macos, sdist] + if: github.event_name == 'release' && startsWith(github.ref, 'refs/tags/') + needs: [linux, musllinux, musleabi, windows, macos, sdist] steps: - - uses: actions/download-artifact@v3 - with: - name: wheels + - uses: actions/download-artifact@v4 - name: Publish to PyPI uses: PyO3/maturin-action@v1 env: MATURIN_PYPI_TOKEN: ${{ secrets.PYPI_PASS }} with: command: upload - args: --skip-existing * + args: --non-interactive --skip-existing wheels-*/* diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index f7d747d61..74d3a4fb9 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -83,50 +83,61 @@ jobs: cargo publish -p dora-record --token ${{ secrets.CARGO_REGISTRY_TOKEN }} cargo publish -p dora-rerun --token ${{ secrets.CARGO_REGISTRY_TOKEN }} - windows-release: - name: "Windows Release" - + unix: + runs-on: ${{ matrix.platform.runner }} strategy: matrix: - platform: [windows-2022] + platform: + - runner: ubuntu-20.04 + target: x86_64-unknown-linux-gnu + - runner: ubuntu-20.04 + target: i686-unknown-linux-gnu + - runner: ubuntu-20.04 + target: aarch64-unknown-linux-gnu + - runner: ubuntu-20.04 + target: aarch64-unknown-linux-musl + - runner: ubuntu-20.04 + target: armv7-unknown-linux-musleabihf + - runner: macos-12 + target: aarch64-apple-darwin + - runner: macos-12 + target: x86_64-apple-darwin fail-fast: false - runs-on: ${{ matrix.platform }} - steps: - uses: actions/checkout@v3 - - uses: r7kamura/rust-problem-matchers@v1.1.0 + - name: "Add toolchains" + run: rustup target add ${{ matrix.platform.target }} + - name: "Build" + uses: actions-rs/cargo@v1 + with: + use-cross: true + command: build + args: --release --target ${{ matrix.platform.target }} -p dora-cli + - name: "Archive" + run: zip -j -r ${{ matrix.platform.target }}.zip target/${{ matrix.platform.target }}/release/dora - - name: "Build binaries" - timeout-minutes: 60 - run: "cargo build --release -p dora-cli" - - - name: Create Archive (Windows) - if: runner.os == 'Windows' - shell: powershell - run: | - New-Item -Path archive -ItemType Directory - Copy-Item target/release/dora.exe -Destination archive/dora.exe - Compress-Archive -Path archive\* -DestinationPath archive.zip - - - name: "Upload release asset" + - name: "Upload asset" uses: actions/upload-release-asset@v1.0.1 env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} with: upload_url: ${{ github.event.release.upload_url }} - asset_path: archive.zip - asset_name: dora-${{ github.ref_name }}-x86_64-${{ runner.os }}.zip + asset_path: ${{ matrix.platform.target }}.zip + asset_name: dora-${{ github.ref_name }}-${{ matrix.platform.target }}.zip asset_content_type: application/zip - unix-release: - name: "Unix Release" + windows-release: + name: "Windows Release" strategy: matrix: - platform: [macos-12, ubuntu-20.04] + platform: + - runner: windows-2022 + target: x86_64-pc-windows-msvc + fail-fast: false - runs-on: ${{ matrix.platform }} + runs-on: ${{ matrix.platform.runner }} steps: - uses: actions/checkout@v3 @@ -137,14 +148,10 @@ jobs: timeout-minutes: 60 run: "cargo build --release -p dora-cli" - - name: "Create Archive (Unix)" - if: runner.os == 'Linux' || runner.os == 'macOS' - run: | - mkdir archive - cp target/release/dora archive/dora - cd archive - zip -r ../archive.zip . - cd .. + - name: Create Archive (Windows) + if: runner.os == 'Windows' + shell: powershell + run: Compress-Archive -Path target/release/dora.exe -DestinationPath archive.zip - name: "Upload release asset" uses: actions/upload-release-asset@v1.0.1 @@ -153,91 +160,5 @@ jobs: with: upload_url: ${{ github.event.release.upload_url }} asset_path: archive.zip - asset_name: dora-${{ github.ref_name }}-x86_64-${{ runner.os }}.zip - asset_content_type: application/zip - - linux-arm-release: - name: "Linux ARM Release" - - strategy: - matrix: - platform: [ubuntu-20.04] - fail-fast: false - runs-on: ${{ matrix.platform }} - - steps: - - uses: actions/checkout@v3 - - - uses: r7kamura/rust-problem-matchers@v1.1.0 - - - name: "Build Linux ARM64" - if: runner.os == 'Linux' - uses: actions-rs/cargo@v1 - with: - use-cross: true - command: build - args: --release --target aarch64-unknown-linux-gnu -p dora-cli - - - name: "Archive Linux ARM64" - if: runner.os == 'Linux' - run: | - mkdir archive_aarch64 - cp target/aarch64-unknown-linux-gnu/release/dora archive_aarch64/dora - cd archive_aarch64 - zip -r ../archive_aarch64.zip . - cd .. - - - name: "Upload Linux ARM64 asset" - if: runner.os == 'Linux' - uses: actions/upload-release-asset@v1.0.1 - env: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - with: - upload_url: ${{ github.event.release.upload_url }} - asset_path: archive_aarch64.zip - asset_name: dora-${{ github.ref_name }}-aarch64-${{ runner.os }}.zip - asset_content_type: application/zip - - mac-arm-release: - name: "MacOS ARM Release" - - strategy: - matrix: - platform: [macos-12] - fail-fast: false - runs-on: ${{ matrix.platform }} - - steps: - - uses: actions/checkout@v3 - - - uses: r7kamura/rust-problem-matchers@v1.1.0 - - name: "Add macOS ARM64 toolchains" - if: runner.os == 'macOS' - run: rustup target add aarch64-apple-darwin - - - name: "Build macOS ARM64" - if: runner.os == 'macOS' - uses: actions-rs/cargo@v1 - with: - command: build - args: --release --target aarch64-apple-darwin -p dora-coordinator -p dora-cli -p dora-daemon - - - name: "Archive macOS ARM64" - if: runner.os == 'macOS' - run: | - mkdir archive_aarch64 - cp target/aarch64-apple-darwin/release/dora archive_aarch64/dora - cd archive_aarch64 - zip -r ../archive_aarch64.zip . - cd .. - - - name: "Upload macOS ARM64 asset" - if: runner.os == 'macOS' - uses: actions/upload-release-asset@v1.0.1 - env: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - with: - upload_url: ${{ github.event.release.upload_url }} - asset_path: archive_aarch64.zip - asset_name: dora-${{ github.ref_name }}-aarch64-${{ runner.os }}.zip + asset_name: dora-${{ github.ref_name }}-${{ matrix.platform.target }}.zip asset_content_type: application/zip