Mozjs release patch #843
Workflow file for this run
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
name: Rust | |
on: | |
push: | |
branches: [main] | |
pull_request: | |
workflow_dispatch: | |
merge_group: | |
types: [checks_requested] | |
schedule: | |
# Runs at 03:30, every Saturday | |
- cron: "30 3 * * 6" | |
env: | |
RUST_BACKTRACE: 1 | |
SHELL: /bin/bash | |
CARGO_INCREMENTAL: 0 | |
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} | |
MOZJS_CREATE_ARCHIVE: 1 | |
REPO: ${{ github.repository_owner }}/mozjs | |
jobs: | |
mac: | |
strategy: | |
fail-fast: false | |
matrix: | |
features: ["--features debugmozjs", "--features streams"] | |
platform: | |
- { target: aarch64-apple-darwin, os: macos-14 } | |
- { target: x86_64-apple-darwin, os: macos-13 } | |
runs-on: ${{ matrix.platform.os }} | |
needs: create-draft-release | |
env: | |
RUSTC_WRAPPER: sccache | |
CCACHE: sccache | |
SCCACHE_GHA_ENABLED: "true" | |
RELEASE_ID: ${{ needs.create-draft-release.outputs.release-id }} | |
steps: | |
- uses: actions/checkout@v4 | |
- name: Install deps | |
run: | | |
# Unlink and re-link to prevent errors when github mac runner images | |
# https://github.com/actions/setup-python/issues/577 | |
brew list -1 | grep python | while read formula; do brew unlink $formula; brew link --overwrite $formula; done | |
brew install llvm yasm | |
- name: Run sccache-cache | |
uses: mozilla-actions/[email protected] | |
- name: Build | |
run: | | |
cargo build --verbose ${{ matrix.features }} | |
cargo test --tests --examples --verbose ${{ matrix.features }} | |
- name: Upload artifact | |
if: ${{ contains(matrix.features, '--features streams') }} | |
uses: actions/upload-artifact@v4 | |
with: | |
path: ./target/libmozjs-${{ matrix.platform.target }}.tar.gz | |
name: libmozjs-${{ matrix.platform.target }}.tar.gz | |
- name: Upload release asset | |
if: ${{ contains(matrix.features, '--features streams') && needs.create-draft-release.outputs.release-id != '' }} | |
uses: actions/upload-release-asset@v1 | |
with: | |
upload_url: https://uploads.github.com/repos/${{ github.repository_owner }}/mozjs/releases/${{ needs.create-draft-release.outputs.release-id }}/assets{?name,label} | |
asset_path: ./target/libmozjs-${{ matrix.platform.target }}.tar.gz | |
asset_name: libmozjs-${{ matrix.platform.target }}.tar.gz | |
asset_content_type: application/tar+gzip | |
linux: | |
env: | |
RUSTC_WRAPPER: "sccache" | |
CCACHE: sccache | |
SCCACHE_GHA_ENABLED: "true" | |
RELEASE_ID: ${{ needs.create-draft-release.outputs.release-id }} | |
runs-on: ubuntu-latest | |
needs: create-draft-release | |
strategy: | |
fail-fast: false | |
matrix: | |
features: ["--features debugmozjs", "--features streams"] | |
steps: | |
- uses: actions/checkout@v4 | |
- uses: dtolnay/rust-toolchain@stable | |
- name: Install deps | |
run: | | |
sudo apt install llvm -y | |
- name: Run sccache-cache | |
uses: mozilla-actions/[email protected] | |
- name: Build | |
run: | | |
cargo build --verbose ${{ matrix.features }} | |
cargo test --tests --examples --verbose ${{ matrix.features }} | |
- name: Check wrappers integrity | |
# we generate wrappers only without debugmozjs | |
if: ${{ matrix.features == '--features streams' }} | |
run: | | |
bash ./mozjs/src/generate_wrappers.sh | |
git diff --quiet --exit-code | |
- name: Upload artifact | |
if: ${{ contains(matrix.features, '--features streams') }} | |
uses: actions/upload-artifact@v4 | |
with: | |
path: ./target/libmozjs-x86_64-unknown-linux-gnu.tar.gz | |
name: libmozjs-x86_64-unknown-linux-gnu.tar.gz | |
- name: Upload release asset | |
if: ${{ contains(matrix.features, '--features streams') && needs.create-draft-release.outputs.release-id != '' }} | |
uses: actions/upload-release-asset@v1 | |
with: | |
upload_url: https://uploads.github.com/repos/${{ github.repository_owner }}/mozjs/releases/${{ needs.create-draft-release.outputs.release-id }}/assets{?name,label} | |
asset_path: ./target/libmozjs-x86_64-unknown-linux-gnu.tar.gz | |
asset_name: libmozjs-x86_64-unknown-linux-gnu.tar.gz | |
asset_content_type: application/tar+gzip | |
windows: | |
runs-on: windows-latest | |
needs: create-draft-release | |
strategy: | |
fail-fast: false | |
matrix: | |
features: ["--features debugmozjs", "--features streams"] | |
target: ["x86_64-pc-windows-msvc", "aarch64-pc-windows-msvc"] | |
env: | |
LINKER: "lld-link.exe" | |
CC: "clang-cl" | |
CXX: "clang-cl" | |
MOZTOOLS_PATH: "${{ github.workspace }}\\target\\dependencies\\moztools-4.0" | |
CCACHE: sccache | |
SCCACHE_GHA_ENABLED: "true" | |
RELEASE_ID: ${{ needs.create-draft-release.outputs.release-id }} | |
steps: | |
- uses: actions/checkout@v4 | |
- uses: dtolnay/rust-toolchain@stable | |
with: | |
targets: ${{ matrix.target }} | |
- name: Install deps | |
run: | | |
curl -SL "https://github.com/servo/servo-build-deps/releases/download/msvc-deps/moztools-4.0.zip" --create-dirs -o target/dependencies/moztools.zip | |
cd target/dependencies && unzip -qo moztools.zip -d . | |
- name: Run sccache-cache | |
uses: mozilla-actions/[email protected] | |
- name: Build Windows | |
shell: cmd | |
run: | | |
cargo build --verbose --target ${{ matrix.target }} ${{ matrix.features }} | |
- name: Test Windows | |
if: ${{ !contains(matrix.target, 'aarch64') }} | |
shell: cmd | |
run: | | |
cargo test --tests --examples --verbose --target ${{ matrix.target }} ${{ matrix.features }} | |
- name: Upload artifact | |
if: ${{ contains(matrix.features, '--features streams') }} | |
uses: actions/upload-artifact@v4 | |
with: | |
path: ./target/${{ matrix.target }}/libmozjs-x86_64-pc-windows-msvc.tar.gz | |
name: libmozjs-x86_64-pc-windows-msvc.tar.gz | |
- name: Upload release asset | |
if: ${{ !contains(matrix.target, 'aarch64') && contains(matrix.features, '--features streams') && needs.create-draft-release.outputs.release-id != '' }} | |
uses: actions/upload-release-asset@v1 | |
with: | |
upload_url: https://uploads.github.com/repos/${{ github.repository_owner }}/mozjs/releases/${{ needs.create-draft-release.outputs.release-id }}/assets{?name,label} | |
asset_path: ./target/${{ matrix.target }}/libmozjs-x86_64-pc-windows-msvc.tar.gz | |
asset_name: libmozjs-x86_64-pc-windows-msvc.tar.gz | |
asset_content_type: application/tar+gzip | |
android: | |
runs-on: ubuntu-latest | |
steps: | |
- uses: actions/checkout@v4 | |
- name: Install NDK | |
uses: nttld/setup-ndk@v1 | |
id: setup-ndk | |
with: | |
ndk-version: r25c | |
- name: Install Rust | |
uses: dtolnay/rust-toolchain@stable | |
with: | |
targets: armv7-linux-androideabi | |
- name: Build | |
env: | |
ANDROID_NDK_HOME: ${{ steps.setup-ndk.outputs.ndk-path }} | |
run: | | |
./android-build cargo build --target="armv7-linux-androideabi" | |
linux-cross-compile: | |
name: linux (${{ matrix.target }}) | |
runs-on: ubuntu-latest | |
strategy: | |
fail-fast: false | |
matrix: | |
target: | |
- aarch64-unknown-linux-gnu | |
- armv7-unknown-linux-gnueabihf | |
container: ghcr.io/servo/cross-${{ matrix.target }}:main | |
steps: | |
- uses: actions/checkout@v4 | |
- name: Install Rust | |
uses: dtolnay/rust-toolchain@stable | |
with: | |
targets: ${{ matrix.target }} | |
- run: cargo test --tests --examples --target ${{ matrix.target }} | |
integrity: | |
runs-on: ubuntu-latest | |
steps: | |
- uses: actions/checkout@v4 | |
- uses: dtolnay/rust-toolchain@stable | |
- name: Check formatting | |
run: cargo fmt --check | |
- name: Get mozjs | |
run: | | |
bash ./mozjs-sys/etc/get_mozjs.sh | |
- name: Apply patch | |
run: | | |
python3 ./mozjs-sys/etc/update.py --no-commit mozjs.tar.xz | |
# Run `git add` here to force CRLF converted into LF | |
# so that we can check diff properly in next run | |
git add --all mozjs | |
- name: Check patch integrity | |
working-directory: ./mozjs-sys | |
# Because we've added files in previous run, we need to | |
# check diff with `--staged`. | |
run: | | |
git diff --staged --no-ext-diff --quiet --exit-code | |
create-draft-release: | |
runs-on: ubuntu-latest | |
steps: | |
- name: Create draft release | |
if: github.ref == 'refs/heads/main' && github.event_name == 'push' | |
id: create-release | |
run: | | |
NIGHTLY_TAG=$(date "+%F") | |
RELEASE_URL=$(gh release create "${NIGHTLY_TAG}" \ | |
--draft \ | |
--title "${NIGHTLY_TAG}" \ | |
--notes 'Version release based on servo/mozjs@${{ github.sha }}' \ | |
--repo ${REPO}) | |
TEMP_TAG=$(basename "$RELEASE_URL") | |
RELEASE_ID=$( \ | |
gh api -H "Accept: application/vnd.github+json" \ | |
-H "X-GitHub-Api-Version: 2022-11-28" \ | |
"/repos/${REPO}/releases/tags/${TEMP_TAG}" \ | |
| jq '.id' \ | |
) | |
echo "RELEASE_ID=${RELEASE_ID}" >> ${GITHUB_OUTPUT} | |
outputs: | |
release-id: ${{ steps.create-release.outputs.RELEASE_ID }} | |
publish-release: | |
name: Publish release | |
runs-on: ubuntu-latest | |
needs: | |
["create-draft-release", "mac", "linux", "windows"] | |
env: | |
RELEASE_ID: ${{ needs.create-draft-release.outputs.release-id }} | |
steps: | |
- name: Publish as latest (success) | |
if: ${{ needs.create-draft-release.outputs.release-id != '' && !contains(needs.*.result, 'failure') && !contains(needs.*.result, 'cancelled') }} | |
run: | | |
gh api \ | |
--method PATCH \ | |
-H "Accept: application/vnd.github+json" \ | |
-H "X-GitHub-Api-Version: 2022-11-28" \ | |
/repos/${REPO}/releases/${RELEASE_ID} \ | |
-F draft=false | |
- name: Publish as latest (failure) | |
if: ${{ needs.create-draft-release.outputs.release-id != '' && (contains(needs.*.result, 'failure') || contains(needs.*.result, 'cancelled')) }} | |
run: | | |
gh api \ | |
--method PATCH \ | |
-H "Accept: application/vnd.github+json" \ | |
-H "X-GitHub-Api-Version: 2022-11-28" \ | |
/repos/${REPO}/releases/${RELEASE_ID} \ | |
-F prerelease=true -F draft=false | |
exit 1 | |
build_result: | |
name: Result | |
runs-on: ubuntu-latest | |
needs: | |
["android", "linux", "linux-cross-compile", "mac", "windows", "integrity", "create-draft-release", "publish-release"] | |
if: ${{ always() }} | |
steps: | |
- name: Mark the job as successful | |
if: ${{ !contains(needs.*.result, 'failure') && !contains(needs.*.result, 'cancelled') }} | |
run: exit 0 | |
- name: Mark the job as unsuccessful | |
if: ${{ contains(needs.*.result, 'failure') || contains(needs.*.result, 'cancelled') }} | |
run: exit 1 |