Several Ruby versions are already preinstalled:
We only need to add one of it to a PATH.
# appveyor.yml
install:
- set PATH=C:\Ruby22\bin;%PATH%
- bundle install
build: off
before_test:
- ruby -v
- gem -v
- bundle -v
test_script:
- bundle exec rake
Rubies can be used with build matrix:
version: 1.0.{build}-{branch}
environment:
matrix:
- RUBY_VERSION: 22
- RUBY_VERSION: 21
- RUBY_VERSION: 200
- RUBY_VERSION: 193
install:
- set PATH=C:\Ruby%RUBY_VERSION%\bin;%PATH%
- bundle install
build: off
before_test:
- ruby -v
- gem -v
- bundle -v
test_script:
- bundle exec rake
Add 64-bit Rubies as 200-x64
, 21-x64
etc. Do not use Platform: x64
.
Ruby’s gems can be easily cached by AppVeyor, but they are installed into long and complex path, like C:\Ruby21\lib\ruby\gems\2.1.0\gems
.
One should better force Bundler to put gems into well know path, eg:
version: 1.0.{build}-{branch}
cache:
- vendor/bundle
environment:
matrix:
- RUBY_VERSION: 22
- RUBY_VERSION: 21
- RUBY_VERSION: 200
- RUBY_VERSION: 193
install:
- set PATH=C:\Ruby%RUBY_VERSION%\bin;%PATH%
- bundle config --local path vendor/bundle
- bundle install
build: off
before_test:
- ruby -v
- gem -v
- bundle -v
test_script:
- bundle exec rake
AppVeyor offers API for reporting during build process.
It was implemented in appveyor-worker gem.
Just include it into your project’s Gemfile. Progress of your tests will be automagically displayed on project build page in real time and stack traces (for failed tests) will become available thru web-interface.
You can also send messages and set environment variables from your tests.
Ruby builds for Windows have been built using two different systems. Ruby versions 2.3 and previous are built with RubyInstaller, Ruby versions 2.4 and later are built with RubyInstaller2. Both RubyInstaller (RI) and RubyInstaller2 (RI2) are open source projects.
Both RI & RI2 builds will set paths for their respective compile tools by requiring devkit, hence, the common -rdevkit
option.
Information about several Appveyor Ruby builds is shown at https://ci.appveyor.com/project/MSP-Greg/appveyor-ruby. Note that most have bundler installed, rubygems upgraded, etc.
RI builds use what is referred to as ‘DevKit’, which is a proprietary package of MSYS tools and compilers. Additional packages are often called knapsack packages, or have knapsack in their download path.
RI2 builds use the MSYS2 / MinGW system for tools and compilers. These are used by several languages that support Windows, and hence, have reasonably good support. Of note, some versions of Windows and Git for Windows have exe files that match files in the MSYS2 / MinGW system. This may cause issues with testing in Appveyor, depending on PATH
.
Both DevKit and the MSYS2 / MinGW system are pre-installed on Appveyor.
When using RI builds, you may require additional knapsack packages for compiling your project. 64 bit packages are listed at https://dl.bintray.com/oneclick/OpenKnapsack/x64/, 32 bit at https://dl.bintray.com/oneclick/OpenKnapsack/x86/. For an example of using one, see ruby/openssl appveyor.yml.
As with RI builds, you may need to install packages for compiling when using RI2 builds. A list of packages installed on Appveyor can be found at https://ci.appveyor.com/project/MSP-Greg/appveyor-ruby.
OpenSSL needs a cert file to verify a site’s certificate. First, Ruby looks to ENV['SSL_CERT_FILE']
, and then looks to the OpenSSL::X509::DEFAULT_CERT_FILE
constant. If neither point to a valid cert file, no verification can be performed.
Ruby RI builds do not properly set the constant, and the ENV variable is not set in the default Appveyor environment.
Conversely, Ruby RI2 builds are packaged with a cert file, and the constant is properly set.
Hence, to allow for SSL verification using RI builds (2.3 and earlier), you can either:
Use set SSL_CERT_FILE=C:/ruby24-x64/ssl/cert.pem
Download https://curl.haxx.se/ca/cacert.pem and store it somewhere, then set SSL_CERT_FILE
to its full path.
Now that Ruby has many std-lib items separated as default gems, and many are tested in Appveyor, reviewing their appveyor.yml
files may be helpful. The Ruby/spec
test suite also has an appveyor.yml file. Most popular gems test with Appveyor.