summaryrefslogtreecommitdiff
path: root/.cirrus.yml
blob: c496d5941bcede76da7c15891dfb1dad9742dbab (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
# 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,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
  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"
    - cat "$CIRRUS_ENV"
  # 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
  auto_cancellation: $CIRRUS_BRANCH != 'master'
  skip: "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
  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
        configure: --enable-yjit=dev
        rustup_init: --default-toolchain=1.58.1
      - CC: gcc-11
        configure: --enable-yjit
  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"
    - echo RUST_BACKTRACE=1 >> "$CIRRUS_ENV"
    - cat "$CIRRUS_ENV"
  # 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 $rustup_init"
  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"
    $configure
  make_miniruby_script: source $HOME/.cargo/env && make miniruby
  make_bindgen_script: |
    if [[ "$CC" = "clang-12" ]]; then
      source $HOME/.cargo/env && 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: source $HOME/.cargo/env && make
  cargo_test_script: source $HOME/.cargo/env && cd yjit && cargo test
  make_test_script: source $HOME/.cargo/env && make test RUN_OPTS="--yjit-call-threshold=1 --yjit-verify-ctx"
  make_test_all_script: source $HOME/.cargo/env && make test-all RUN_OPTS="--yjit-call-threshold=1 --yjit-verify-ctx" TESTOPTS="$RUBY_TESTOPTS"
  make_test_spec_script: source $HOME/.cargo/env && make test-spec RUN_OPTS="--yjit-call-threshold=1 --yjit-verify-ctx"