servo/.github/workflows/linux.yml
Martin Robinson fe7bdb7e4b
Remove support for triggering try from comments (#30712)
Triggering from labels means that we have less actions running and less
false job failures spamming project members. Plus, we have more
flexibility with labels rather than the backward compatibility we have
set up for bors comments.
2023-11-09 10:31:49 +00:00

180 lines
5.7 KiB
YAML

name: Linux
on:
workflow_call:
inputs:
production:
required: false
default: false
type: boolean
wpt:
required: false
type: string
layout:
required: false
type: string
unit-tests:
required: false
default: false
type: boolean
upload:
required: false
default: false
type: boolean
github-release-id:
required: false
type: string
workflow_dispatch:
inputs:
production:
required: false
default: false
type: boolean
wpt:
default: "test"
required: false
type: choice
options: ["test", "sync"]
layout:
required: false
type: choice
options: ["none", "2013", "2020", "all"]
unit-tests:
required: false
default: false
type: boolean
upload:
required: false
default: false
type: boolean
push:
branches: ["try-linux", "try-wpt", "try-wpt-2020"]
env:
cargo_profile_option: ${{ inputs.production && '--profile production' || '--release' }}
cargo_profile_name: ${{ inputs.production && 'production' || 'release' }}
RUST_BACKTRACE: 1
SHELL: /bin/bash
SCCACHE_GHA_ENABLED: "true"
RUSTC_WRAPPER: "sccache"
CCACHE: "sccache"
CARGO_INCREMENTAL: 0
jobs:
build:
name: Linux Build
runs-on: ubuntu-22.04
steps:
- uses: actions/checkout@v3
if: github.event_name != 'pull_request_target'
with:
fetch-depth: 2
# This is necessary to checkout the pull request if this run was triggered via a
# `pull_request_target` event.
- uses: actions/checkout@v3
if: github.event_name == 'pull_request_target'
with:
ref: refs/pull/${{ github.event.number }}/head
fetch-depth: 2
- name: Run sccache-cache
uses: mozilla-actions/sccache-action@v0.0.3
- name: Set LIBCLANG_PATH env # needed for bindgen in mozangle
run: echo "LIBCLANG_PATH=/usr/lib/llvm-14/lib" >> $GITHUB_ENV
- name: Install taplo
uses: baptiste0928/cargo-install@v2
with:
crate: taplo-cli
locked: true
- name: Bootstrap Python
run: python3 -m pip install --upgrade pip virtualenv
- name: Bootstrap dependencies
run: sudo apt update && python3 ./mach bootstrap
- name: Tidy
run: python3 ./mach test-tidy --no-progress --all
- name: Release build (${{ inputs.production && 'without' || 'with' }} debug assertions)
run: python3 ./mach build ${{ env.cargo_profile_option }}
- name: Smoketest
run: xvfb-run python3 ./mach smoketest ${{ env.cargo_profile_option }}
- name: Script tests
run: ./mach test-scripts
- name: Unit tests
if: ${{ inputs.unit-tests || github.ref_name == 'try-linux' }}
uses: nick-fields/retry@v2
with:
timeout_minutes: 20
max_attempts: 2 # https://github.com/servo/servo/issues/30683
command: python ./mach test-unit ${{ env.cargo_profile_option }}
- name: Rename build timing
run: cp -r target/cargo-timings target/cargo-timings-linux
- name: Archive build timing
uses: actions/upload-artifact@v3
with:
name: cargo-timings
# Using a wildcard here ensures that the archive includes the path.
path: target/cargo-timings-*
- name: Lockfile check
run: ./etc/ci/lockfile_changed.sh
- name: Build mach package
run: python3 ./mach package ${{ env.cargo_profile_option }}
- name: Upload artifact for mach package
uses: actions/upload-artifact@v3
with:
name: linux
path: target/${{ env.cargo_profile_name }}/servo-tech-demo.tar.gz
- name: Upload nightly
if: ${{ inputs.upload }}
run: |
python3 ./mach upload-nightly linux \
--secret-from-environment \
--github-release-id ${{ inputs.github-release-id }}
env:
S3_UPLOAD_CREDENTIALS: ${{ secrets.S3_UPLOAD_CREDENTIALS }}
NIGHTLY_REPO_TOKEN: ${{ secrets.NIGHTLY_REPO_TOKEN }}
NIGHTLY_REPO: ${{ github.repository_owner }}/servo-nightly-builds
- name: Build package for target
run: tar -czf target.tar.gz target/${{ env.cargo_profile_name }}/servo resources
- name: Upload artifact for target
uses: actions/upload-artifact@v3
with:
name: release-binary
path: target.tar.gz
wpt-2020:
if: ${{ github.ref_name == 'try-wpt-2020' || inputs.layout == '2020' || inputs.layout == 'all' }}
name: Linux WPT Tests 2020
needs: ["build"]
uses: ./.github/workflows/linux-wpt.yml
with:
production: ${{ inputs.production == 'true' }}
wpt: ${{ inputs.wpt }}
layout: "layout-2020"
secrets: inherit
wpt-2013:
if: ${{ github.ref_name == 'try-wpt' || inputs.layout == '2013' || inputs.layout == 'all' }}
name: Linux WPT Tests 2013
needs: ["build"]
uses: ./.github/workflows/linux-wpt.yml
with:
production: ${{ inputs.production == 'true' }}
wpt: ${{ inputs.wpt }}
layout: "layout-2013"
secrets: inherit
result:
name: Result
runs-on: ubuntu-latest
if: always()
# needs all build to detect cancellation
needs:
- "build"
- "wpt-2020"
- "wpt-2013"
steps:
- name: Mark the job as successful
run: exit 0
if: ${{ !contains(needs.*.result, 'failure') && !contains(needs.*.result, 'cancelled') }}
- name: Mark the job as unsuccessful
run: exit 1
if: contains(needs.*.result, 'failure') || contains(needs.*.result, 'cancelled')