# This CI is used to test Arm cases. We can set the maximum 16 tasks. # The entire testing design is inspired from .github/workflows/compilers.yml. # By default, Cirrus mounts an empty volume to `/tmp` # which triggers all sorts of warnings like "system temporary path is world-writable: /tmp". # Lets workaround it by specifying a custom volume mount point. env: CIRRUS_VOLUME: /cirrus-ci-volume CIRRUS_CLONE_DEPTH: 50 LANG: C.UTF-8 optflags: '-O1' debugflags: '-ggdb3' RUBY_PREFIX: /tmp/ruby-prefix RUBY_DEBUG: ci rgengc RUBY_TESTOPTS: >- -q --color=always --tty=no RUST_BACKTRACE: 1 INIT_ENV: config_template: &CONFIG_TEMPLATE only_if: changesInclude('.cirrus.yml', 'yjit.{c,h,rb}', 'yjit/**.{mk,rs,toml}') skip: >- $CIRRUS_CHANGE_MESSAGE =~ '.*\[DOC\].*' || $CIRRUS_PR_LABELS =~ '.*Documentation.*' || changesIncludeOnly('doc/**', '**.{md,rdoc,ronn,[1-8]}', '.document') arm_container: # We use the arm64 images at https://github.com/ruby/ruby-ci-image/pkgs/container/ruby-ci-image . image: ghcr.io/ruby/ruby-ci-image:$CC # Define the used cpu core in each matrix task. We can use total 16 cpu # cores in entire matrix. [cpu] = [total cpu: 16] / [number of tasks] cpu: 8 # We can request maximum 4 GB per cpu. # [memory per task] = [memory per cpu: 4 GB] * [cpu] memory: 32G id_script: id info_script: | nproc free -h set_env_script: # Set `GNUMAKEFLAGS`, because the flags are GNU make specific. - echo "GNUMAKEFLAGS=-s -j$((1 + $CIRRUS_CPU))" >> "$CIRRUS_ENV" - '[ -z "$INIT_ENV" ] || printenv | sort | comm -13 - <(set -x; source $INIT_ENV && printenv | sort) | tee -a "$CIRRUS_ENV"' - cat "$CIRRUS_ENV" bundled_gems_cache: folder: .downloaded-cache fingerprint_script: sed 's/ */ /g;s/ *#.*//;/^$/d;s/\([^ ]*\) \([^ ]*\)/\1-\2.gem/;s/ .*//' gems/bundled_gems populate_script: | sudo apt-get install --no-install-recommends -q -y wget mkdir -p .downloaded-cache sed 's/ */ /g;s/ *#.*//;/^$/d;s/\([^ ]*\) \([^ ]*\)/\1-\2.gem/;s/ .*//' gems/bundled_gems | wget -nv -P .downloaded-cache -nd -B https://rubygems.org/downloads/ -i - # Arm containers are executed in AWS's EKS, and it's not yet supporting IPv6 # See https://github.com/aws/containers-roadmap/issues/835 disable_ipv6_script: sudo ./tool/disable_ipv6.sh autogen_script: ./autogen.sh configure_script: >- ./configure -C --enable-debug-env --disable-install-doc --with-ext=-test-/cxxanyargs,+ --prefix="$RUBY_PREFIX" $configure task: name: Arm64 Graviton2 / $CC env: matrix: CC: gcc-11 << : *CONFIG_TEMPLATE make_extract-extlibs_script: make extract-extlibs make_incs_script: make incs make_script: make make_test_script: make test make_install_script: make install install_gems_for_test_script: $RUBY_PREFIX/bin/gem install --no-doc timezone tzinfo make_test-tool_script: make test-tool make_test-all_script: make test-all make_test-spec_script: make test-spec # The following is to test YJIT on ARM64 CPUs available on Cirrus CI yjit_task: name: Arm64 Graviton2 / $CC YJIT env: INIT_ENV: $HOME/.cargo/env matrix: - CC: gcc-11 configure: --enable-yjit << : *CONFIG_TEMPLATE make_miniruby_script: make miniruby make_bindgen_script: | if [[ "$CC" = "clang-12" ]]; then make yjit-bindgen else echo "only running bindgen on clang image" fi boot_miniruby_script: ./miniruby --yjit-call-threshold=1 -e0 test_dump_insns_script: ./miniruby --yjit-call-threshold=1 --yjit-dump-insns -e0 output_stats_script: ./miniruby --yjit-call-threshold=1 --yjit-stats -e0 full_build_script: make cargo_test_script: cd yjit && cargo test make_test_script: make test RUN_OPTS="--yjit-call-threshold=1 --yjit-verify-ctx" make_test_all_script: make test-all RUN_OPTS="--yjit-call-threshold=1 --yjit-verify-ctx" TESTOPTS="$RUBY_TESTOPTS" make_test_spec_script: make test-spec RUN_OPTS="--yjit-call-threshold=1 --yjit-verify-ctx" # Cirrus Rust environments don't have enough permission to run `rustup component add clippy`. # clippy_script: cd yjit && rustup component add clippy && cargo clippy --all-targets --all-features