diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 146d472..68a61a8 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -1,8 +1,5 @@ name: Build precompiled NIFs -env: - NIF_DIRECTORY: "native/html5ever_nif" - on: push: branches: @@ -11,12 +8,6 @@ on: tags: - '*' -defaults: - run: - # Sets the working dir for "run" scripts. - # Note that this won't change the directory for actions (tasks with "uses"). - working-directory: "./native/html5ever_nif" - jobs: build_release: name: NIF ${{ matrix.job.nif }} - ${{ matrix.job.target }} (${{ matrix.job.os }}) @@ -24,153 +15,53 @@ jobs: strategy: fail-fast: false matrix: + nif: ["2.16", "2.15", "2.14"] job: - # NIF version 2.16 - - { target: arm-unknown-linux-gnueabihf , os: ubuntu-20.04 , nif: "2.16", use-cross: true } - - { target: aarch64-unknown-linux-gnu , os: ubuntu-20.04 , nif: "2.16", use-cross: true } - - { target: aarch64-apple-darwin , os: macos-11 , nif: "2.16" } - - { target: x86_64-apple-darwin , os: macos-11 , nif: "2.16" } - - { target: x86_64-unknown-linux-gnu , os: ubuntu-20.04 , nif: "2.16" } - - { target: x86_64-unknown-linux-musl , os: ubuntu-20.04 , nif: "2.16", use-cross: true } - - { target: x86_64-pc-windows-gnu , os: windows-2019 , nif: "2.16" } - - { target: x86_64-pc-windows-msvc , os: windows-2019 , nif: "2.16" } - # NIF version 2.15 - - { target: arm-unknown-linux-gnueabihf , os: ubuntu-20.04 , nif: "2.15", use-cross: true } - - { target: aarch64-unknown-linux-gnu , os: ubuntu-20.04 , nif: "2.15", use-cross: true } - - { target: aarch64-apple-darwin , os: macos-11 , nif: "2.15" } - - { target: x86_64-apple-darwin , os: macos-11 , nif: "2.15" } - - { target: x86_64-unknown-linux-gnu , os: ubuntu-20.04 , nif: "2.15" } - - { target: x86_64-unknown-linux-musl , os: ubuntu-20.04 , nif: "2.15", use-cross: true } - - { target: x86_64-pc-windows-gnu , os: windows-2019 , nif: "2.15" } - - { target: x86_64-pc-windows-msvc , os: windows-2019 , nif: "2.15" } - # NIF version 2.14 - - { target: arm-unknown-linux-gnueabihf , os: ubuntu-20.04 , nif: "2.14", use-cross: true } - - { target: aarch64-unknown-linux-gnu , os: ubuntu-20.04 , nif: "2.14", use-cross: true } - - { target: aarch64-apple-darwin , os: macos-11 , nif: "2.14" } - - { target: x86_64-apple-darwin , os: macos-11 , nif: "2.14" } - - { target: x86_64-unknown-linux-gnu , os: ubuntu-20.04 , nif: "2.14" } - - { target: x86_64-unknown-linux-musl , os: ubuntu-20.04 , nif: "2.14", use-cross: true } - - { target: x86_64-pc-windows-gnu , os: windows-2019 , nif: "2.14" } - - { target: x86_64-pc-windows-msvc , os: windows-2019 , nif: "2.14" } + - { target: arm-unknown-linux-gnueabihf , os: ubuntu-20.04 , use-cross: true } + - { target: aarch64-unknown-linux-gnu , os: ubuntu-20.04 , use-cross: true } + - { target: aarch64-apple-darwin , os: macos-11 } + - { target: x86_64-apple-darwin , os: macos-11 } + - { target: x86_64-unknown-linux-gnu , os: ubuntu-20.04 } + - { target: x86_64-unknown-linux-musl , os: ubuntu-20.04 , use-cross: true } + - { target: x86_64-pc-windows-gnu , os: windows-2019 } + - { target: x86_64-pc-windows-msvc , os: windows-2019 } - env: - RUSTLER_NIF_VERSION: ${{ matrix.job.nif }} steps: - name: Checkout source code - uses: actions/checkout@v2 + uses: actions/checkout@v3 - - name: Install prerequisites + - name: Extract project version shell: bash run: | - case ${{ matrix.job.target }} in - arm-unknown-linux-*) sudo apt-get -y update ; sudo apt-get -y install gcc-arm-linux-gnueabihf ;; - aarch64-unknown-linux-gnu) sudo apt-get -y update ; sudo apt-get -y install gcc-aarch64-linux-gnu ;; - esac - - - name: Extract crate information - shell: bash - run: | - echo "PROJECT_NAME=$(sed -n 's/^name = "\(.*\)"/\1/p' Cargo.toml | head -n1)" >> $GITHUB_ENV # Get the project version from mix.exs - echo "PROJECT_VERSION=$(sed -n 's/^ @version "\(.*\)"/\1/p' ../../mix.exs | head -n1)" >> $GITHUB_ENV + echo "PROJECT_VERSION=$(sed -n 's/^ @version "\(.*\)"/\1/p' mix.exs | head -n1)" >> $GITHUB_ENV - name: Install Rust toolchain - uses: actions-rs/toolchain@v1 + uses: dtolnay/rust-toolchain@stable with: toolchain: stable target: ${{ matrix.job.target }} - override: true - profile: minimal - - name: Show version information (Rust, cargo, GCC) - shell: bash - run: | - gcc --version || true - rustup -V - rustup toolchain list - rustup default - cargo -V - rustc -V - rustc --print=cfg - - - name: Download cross from GitHub releases - uses: giantswarm/install-binary-action@v1.0.0 - if: ${{ matrix.job.use-cross }} + - name: Build the project + id: build-crate + uses: philss/rustler-precompiled-action@v1.0.0 with: - binary: "cross" - version: "v0.2.2" - download_url: "https://github.com/cross-rs/cross/releases/download/${version}/cross-x86_64-unknown-linux-gnu.tar.gz" - tarball_binary_path: "${binary}" - smoke_test: "${binary} --version" - - - name: Build - shell: bash - run: | - if [ "${{ matrix.job.use-cross }}" == "true" ]; then - cross build --release --target=${{ matrix.job.target }} - else - cargo build --release --target=${{ matrix.job.target }} - fi - - - name: Rename lib to the final name - id: rename - shell: bash - run: | - LIB_PREFIX="lib" - case ${{ matrix.job.target }} in - *-pc-windows-*) LIB_PREFIX="" ;; - esac; - - # Figure out suffix of lib - # See: https://doc.rust-lang.org/reference/linkage.html - LIB_SUFFIX=".so" - case ${{ matrix.job.target }} in - *-apple-darwin) LIB_SUFFIX=".dylib" ;; - *-pc-windows-*) LIB_SUFFIX=".dll" ;; - esac; - - CICD_INTERMEDIATES_DIR=$(mktemp -d) - - # Setup paths - LIB_DIR="${CICD_INTERMEDIATES_DIR}/released-lib" - mkdir -p "${LIB_DIR}" - LIB_NAME="${LIB_PREFIX}${{ env.PROJECT_NAME }}${LIB_SUFFIX}" - LIB_PATH="${LIB_DIR}/${LIB_NAME}" - - # Copy the release build lib to the result location - cp "target/${{ matrix.job.target }}/release/${LIB_NAME}" "${LIB_DIR}" - - # Final paths - # In the end we use ".so" for MacOS in the final build - # See: https://www.erlang.org/doc/man/erlang.html#load_nif-2 - LIB_FINAL_SUFFIX="${LIB_SUFFIX}" - case ${{ matrix.job.target }} in - *-apple-darwin) LIB_FINAL_SUFFIX=".so" ;; - esac; - - LIB_FINAL_NAME="${LIB_PREFIX}${PROJECT_NAME}-v${PROJECT_VERSION}-nif-${RUSTLER_NIF_VERSION}-${{ matrix.job.target }}${LIB_FINAL_SUFFIX}" - - # Copy lib to final name on this directory - cp "${LIB_PATH}" "${LIB_FINAL_NAME}" - - tar -cvzf "${LIB_FINAL_NAME}.tar.gz" "${LIB_FINAL_NAME}" - - # Passes the path relative to the root of the project. - LIB_FINAL_PATH="${NIF_DIRECTORY}/${LIB_FINAL_NAME}.tar.gz" - - # Let subsequent steps know where to find the lib - echo ::set-output name=LIB_FINAL_PATH::${LIB_FINAL_PATH} - echo ::set-output name=LIB_FINAL_NAME::${LIB_FINAL_NAME}.tar.gz + project-name: html5ever_nif + project-version: ${{ env.PROJECT_VERSION }} + target: ${{ matrix.job.target }} + nif-version: ${{ matrix.nif }} + use-cross: ${{ matrix.job.use-cross }} + project-dir: "native/html5ever_nif" - - name: "Artifact upload" - uses: actions/upload-artifact@v2 + - name: Artifact upload + uses: actions/upload-artifact@v3 with: - name: ${{ steps.rename.outputs.LIB_FINAL_NAME }} - path: ${{ steps.rename.outputs.LIB_FINAL_PATH }} + name: ${{ steps.build-crate.outputs.file-name }} + path: ${{ steps.build-crate.outputs.file-path }} - name: Publish archives and packages uses: softprops/action-gh-release@v1 with: files: | - ${{ steps.rename.outputs.LIB_FINAL_PATH }} + ${{ steps.build-crate.outputs.file-path }} if: startsWith(github.ref, 'refs/tags/')