# 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 LANG: C.UTF-8 task: name: Arm64 Graviton2 / $CC skip: "changesIncludeOnly('doc/**', '**.{md,rdoc}', '.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 env: CIRRUS_CLONE_DEPTH: 50 optflags: '-O1' debugflags: '-ggdb3' RUBY_PREFIX: /tmp/ruby-prefix RUBY_DEBUG: ci rgengc RUBY_TESTOPTS: >- -q --color=always --tty=no matrix: CC: clang-12 CC: gcc-11 id_script: id set_env_script: # Set `GNUMAKEFLAGS`, because the flags are GNU make specific. Note using # the `make` environment variable used in compilers.yml causes some rubygems # tests to fail. # https://github.com/rubygems/rubygems/issues/4921 - echo "GNUMAKEFLAGS=-s -j$((1 + $CIRRUS_CPU))" >> $CIRRUS_ENV print_env_script: - echo "GNUMAKEFLAGS=$GNUMAKEFLAGS" # 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" make_extract-extlibs_script: make extract-extlibs make_incs_script: make incs make_script: make make_leaked-globals_script: make leaked-globals 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 New Backend Temp Checks auto_cancellation: $CIRRUS_BRANCH != 'master' skip: "changesIncludeOnly('doc/**', '**.{md,rdoc}')" 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 env: CIRRUS_CLONE_DEPTH: 50 optflags: '-O1' debugflags: '-ggdb3' RUBY_PREFIX: /tmp/ruby-prefix RUBY_DEBUG: ci rgengc RUBY_TESTOPTS: >- -q --color=always --tty=no matrix: CC: clang-12 CC: gcc-11 id_script: id set_env_script: # Set `GNUMAKEFLAGS`, because the flags are GNU make specific. Note using # the `make` environment variable used in compilers.yml causes some rubygems # tests to fail. # https://github.com/rubygems/rubygems/issues/4921 - echo "GNUMAKEFLAGS=-s -j$((1 + $CIRRUS_CPU))" >> $CIRRUS_ENV print_env_script: - echo "GNUMAKEFLAGS=$GNUMAKEFLAGS" # 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 install_rust_script: - sudo apt-get update -y - sudo apt-get install -y curl - "curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y" autogen_script: ./autogen.sh configure_script: >- source $HOME/.cargo/env && ./configure -C --enable-debug-env --disable-install-doc --with-ext=-test-/cxxanyargs,+ --prefix="$RUBY_PREFIX" --enable-yjit=dev make_miniruby_script: source $HOME/.cargo/env && make -j miniruby make_bindgen_script: | if [[ "$CC" = "clang-12" ]]; then source $HOME/.cargo/env && make -j yjit-bindgen else echo "only running bindgen on clang image" fi boot_miniruby_script: RUST_BACKTRACE=1 ./miniruby --yjit-call-threshold=1 -e0 test_dump_insns_script: RUST_BACKTRACE=1 ./miniruby --yjit-call-threshold=1 --yjit-dump-insns -e0 output_stats_script: RUST_BACKTRACE=1 ./miniruby --yjit-call-threshold=1 --yjit-stats -e0 bootstrap_tests_script: | RUST_BACKTRACE=1 ruby --disable=gems bootstraptest/runner.rb --ruby="./miniruby -I./lib -I. -I.ext/common --disable-gems --yjit-call-threshold=1 --yjit-verify-ctx" \ bootstraptest/test_attr.rb \ bootstraptest/test_autoload.rb \ bootstraptest/test_block.rb \ bootstraptest/test_class.rb \ bootstraptest/test_constant_cache.rb \ bootstraptest/test_env.rb \ bootstraptest/test_eval.rb \ bootstraptest/test_exception.rb \ bootstraptest/test_fiber.rb \ bootstraptest/test_finalizer.rb \ bootstraptest/test_flip.rb \ bootstraptest/test_flow.rb \ bootstraptest/test_fork.rb \ bootstraptest/test_gc.rb \ bootstraptest/test_insns.rb \ bootstraptest/test_io.rb \ bootstraptest/test_jump.rb \ bootstraptest/test_literal.rb \ bootstraptest/test_literal_suffix.rb \ bootstraptest/test_load.rb \ bootstraptest/test_marshal.rb \ bootstraptest/test_massign.rb \ bootstraptest/test_method.rb \ bootstraptest/test_objectspace.rb \ bootstraptest/test_ractor.rb \ bootstraptest/test_proc.rb \ bootstraptest/test_string.rb \ bootstraptest/test_struct.rb \ bootstraptest/test_syntax.rb \ bootstraptest/test_thread.rb \ bootstraptest/test_yjit_30k_ifelse.rb \ bootstraptest/test_yjit_30k_methods.rb \ bootstraptest/test_yjit_new_backend.rb \ bootstraptest/test_yjit_rust_port.rb \ bootstraptest/test_yjit.rb # FIXME: not currently working on CI, missing cargo # Check that we can do a full ruby build #full_build_script: make -j