summaryrefslogtreecommitdiff
path: root/.cirrus.yml
blob: f7432526557d417c889c4a4f3ff8d6169200856f (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
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
# 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

  # These are the btests we can't run yet on arm:
  #bootstraptest/test_yjit.rb (out of executable memory not handled)

  # full_build_script: make -j