Giter VIP home page Giter VIP logo

smalltalkci's Introduction

smalltalkCI

GitHub Workflow Status Coverage Status

Community-supported framework for testing Smalltalk projects on Linux, OS X, and Windows with built-in support for GitHub Actions, GitLab CI/CD, Travis CI, and AppVeyor.

It is inspired by builderCI and aims to provide a uniform and easy way to load and test Smalltalk projects.

ESUG 13th Innovation Technology Awards

Table Of Contents

Features

  1. Export your project in a compatible format (e.g., Tonel or FileTree).
  2. Enable a CI service for your repository (e.g., GitHub Actions).
  3. Create a config file for your CI service (see below for templates) and specify the Smalltalk image(s) you want your project to be tested against.
  4. Create a .smalltalk.ston file and specify how to load and test your project.
  5. Push all of this to your repository and enjoy your fast Smalltalk builds!

You can use smalltalkCI to run your project's tests locally. Just clone or download smalltalkCI and then you can initiate a local build in headful mode like this:

bin/smalltalkci -s <IMAGE> --headful /path/to/your/project/.smalltalk.ston

<IMAGE> can be one of the supported images. You may also want to have a look at all supported options.

On Windows, you need to run smalltalkCI from a Bash shell such as Git Bash or Cygwin, MinGW, or MSYS2.

Please note: All builds will be stored in _builds within smalltalkCI's directory. You may want to delete single or all builds if you don't need them as they can take up a lot of space on your drive.

Squeak Pharo GemStone Moose GToolkit
Squeak64-trunk Pharo64-alpha GemStone64-3.6.x Moose64-trunk GToolkit64-release
Squeak64-6.0 Pharo64-stable GemStone64-3.5.8 Moose64-11
Squeak64-5.3 Pharo64-12 GemStone64-3.5.7 Moose64-10
Squeak64-5.2 Pharo64-11 GemStone64-3.5.6 Moose64-9.0
Squeak64-5.1 Pharo64-10 GemStone64-3.5.5 Moose64-8.0
Squeak32-trunk Pharo64-9.0 Gemstone64-3.5.4 Moose64-7.0
Squeak32-6.0 Pharo64-8.0 GemStone64-3.5.3 Moose32-trunk
Squeak32-5.3 Pharo64-7.0 Moose32-6.1
Squeak32-5.2 Pharo64-6.1 Moose32-6.0
Squeak32-5.1 Pharo64-6.0
Squeak32-5.0 Pharo32-alpha
Squeak32-4.6 Pharo32-stable
Squeak32-4.5 Pharo32-12
Pharo32-11
Pharo32-10
Pharo32-9.0
Pharo32-8.0
Pharo32-7.0
Pharo32-6.1
Pharo32-6.0
Pharo32-5.0
Pharo32-4.0
Pharo32-3.0

Templates

The following SmalltalkCISpec will load BaselineOfMyProject using Metacello/FileTree from the ./packages directory in Squeak, Pharo, and GemStone. See below how you can customize your SmalltalkCISpec.

SmalltalkCISpec {
  #loading : [
    SCIMetacelloLoadSpec {
      #baseline : 'MyProject',
      #platforms : [ #squeak, #pharo, #gemstone ]
    }
  ]
}

GitHub Action Templates

For GitHub Action templates, please refer to the Marketplace listing of the setup-smalltalkCI action.

GitLab CI Template

.gitlab-ci.yml
image: hpiswa/smalltalkci

Squeak64Trunk:
  script: smalltalkci -s "Squeak64-trunk"

Squeak325.1:
  script: smalltalkci -s "Squeak32-5.1"

Pharo64Alpha:
  script: smalltalkci -s "Pharo64-alpha"

Pharo327.0:
  script: smalltalkci -s "Pharo32-7.0"

# ...

Travis CI Templates

.travis.yml
language: smalltalk
sudo: false

# Select operating system(s)
os:
  - linux
  - osx

# Select compatible Smalltalk image(s)
smalltalk:
  - Squeak64-trunk
  - Squeak64-5.1
  - Squeak32-4.6
  - Squeak32-4.5
  # ...
  - Pharo64-alpha
  - Pharo64-stable
  - Pharo64-7.0
  - Pharo64-6.1
  # ...
  - Pharo32-alpha
  - Pharo32-stable
  - Pharo32-6.1
  # ...
  - GemStone64-3.5.3
  - GemStone64-3.6.0
  - GemStone64-3.6.5
  # ...

# Override `script` to customize smalltalkCI invocation, e.g.:
#script:
#  - smalltalkci .mysmalltalk1.ston
#  - travis_wait smalltalkci .mysmalltalk2.ston

# Uncomment to enable caching (only useful for GemStone builds (3x faster))
#cache:
#  directories:
#    - $SMALLTALK_CI_CACHE
.travis.yml with multiple smalltalkCI configurations

The build matrix can be expanded with multiple smalltalkCI configuration files using the smalltalk_config key:

language: smalltalk
sudo: false

smalltalk:
  - Squeak64-trunk
  - Pharo64-alpha

smalltalk_config:
  - .smalltalk.ston
  - .bleedingEdge.ston

The .bleedingEdge.ston configuration may look like this:

SmalltalkCISpec {
  #loading : [
    SCIMetacelloLoadSpec {
      ...
      #load : [ 'CoreWithExtras' ],
      #version : #bleedingEdge
    }
  ],
  ...
}

Resulting build matrix

Smalltalk Config OS
Squeak64-trunk .smalltalk.ston Linux
Squeak64-trunk .bleedingEdge.ston Linux
Pharo64-alpha .smalltalk.ston Linux
Pharo64-alpha .bleedingEdge.ston Linux
.travis.yml with additional jobs

It is possible to add additional jobs to the build matrix using the smalltalk_config key:

language: smalltalk
sudo: false

os: osx

smalltalk:
  - Squeak32-5.1
  - Pharo32-6.0

matrix:
  include:
    - smalltalk: Squeak64-trunk
      smalltalk_config: .bleedingEdge.ston
    - smalltalk: Pharo64-alpha
      smalltalk_config: .bleedingEdge.ston
  allow_failures: # Allow bleeding edge builds to fail
    - smalltalk_config: .bleedingEdge.ston

Resulting build matrix

Smalltalk Config OS
Squeak32-5.1 .smalltalk.ston macOS
Pharo32-6.0 .smalltalk.ston macOS
Squeak64-trunk .bleedingEdge.ston macOS
Pharo64-alpha .bleedingEdge.ston macOS

AppVeyor Templates

appveyor.yml
# This is a 64-bit environment, so use 64-bit Cygwin
environment:
  CYG_ROOT: C:\cygwin64
  CYG_BASH: C:\cygwin64\bin\bash
  CYG_CACHE: C:\cygwin64\var\cache\setup
  CYG_EXE: C:\cygwin64\setup-x86_64.exe
  CYG_MIRROR: http://cygwin.mirror.constant.com
  SCI_RUN: /cygdrive/c/smalltalkCI-master/bin/smalltalkci
  matrix:
    # Currently, only Squeak and Pharo images are supported on AppVeyor.
    - SMALLTALK: Squeak64-trunk
    - SMALLTALK: Squeak64-5.0
    - SMALLTALK: Pharo64-alpha
    - SMALLTALK: Pharo64-6.0
    # ...

platform:
  - x64

install:
  - '%CYG_EXE% -dgnqNO -R "%CYG_ROOT%" -s "%CYG_MIRROR%" -l "%CYG_CACHE%" -P unzip'
  - ps: Start-FileDownload "https://github.com/hpi-swa/smalltalkCI/archive/master.zip" "C:\smalltalkCI.zip"
  - 7z x C:\smalltalkCI.zip -oC:\ -y > NULL

build: false

test_script:
  - '%CYG_BASH% -lc "cd $APPVEYOR_BUILD_FOLDER; exec 0</dev/null; $SCI_RUN"'
appveyor.yml with additional jobs

It is possible to add additional jobs to the build matrix using environment.matrix as follows:

environment:
  CYG_ROOT: C:\cygwin
  CYG_BASH: C:\cygwin\bin\bash
  CYG_CACHE: C:\cygwin\var\cache\setup
  CYG_EXE: C:\cygwin\setup-x86.exe
  CYG_MIRROR: http://cygwin.mirror.constant.com
  SCI_RUN: /cygdrive/c/SMALLTALKCI-master/bin/smalltalkci

  matrix:
    - SMALLTALK: Squeak32-5.1
    - SMALLTALK: Squeak64-trunk
      SMALLTALK_CONFIG: .bleedingEdge.ston
    - SMALLTALK: Pharo32-6.0
    - SMALLTALK: Pharo64-alpha
      SMALLTALK_CONFIG: .bleedingEdge.ston

platform:
  - x86

install:
  - '%CYG_EXE% -dgnqNO -R "%CYG_ROOT%" -s "%CYG_MIRROR%" -l "%CYG_CACHE%" -P unzip'
  - ps: Start-FileDownload "https://github.com/hpi-swa/SMALLTALKCI/archive/master.zip" "C:\SMALLTALKCI.zip"
  - 7z x C:\SMALLTALKCI.zip -oC:\ -y > NULL

build: false

test_script:
  - '%CYG_BASH% -lc "cd $APPVEYOR_BUILD_FOLDER; exec 0</dev/null; $SCI_RUN $SMALLTALK_CONFIG"'

Resulting build matrix

Smalltalk Config
Squeak32-5.1 .smalltalk.ston
Squeak64-trunk .bleedingEdge.ston
Pharo32-6.0 .smalltalk.ston
Pharo64-alpha .bleedingEdge.ston

Further Configuration

smalltalkCI requires a .smalltalk.ston configuration file which can be customized for a project to cover various use cases. The .smalltalk.ston must be a valid STON file and has to contain a single SmalltalkCISpec object. This object can hold one or more load specifications in #loading and configurations for the TestCase selection in #testing.

SmalltalkCISpec {
  #name : 'My Name', // Name of the SmalltalkCISpec (optional)
  #loading : [
    // List Of Load Specifications...
  ],
  #testing : {
    // TestCase Selection...
  }
}

smalltalkCI supports different formats for loading Smalltalk projects and for each, there is a loading specification. One or more of those loading specifications have to be provided in the #loading list as part of a SmalltalkCISpec. smalltalkCI will load all specifications that are compatible with the selected Smalltalk image (specified via #platforms).

SCIMetacelloLoadSpec

A SCIMetacelloLoadSpec loads a project either via the specified Metacello #baseline or the Metacello #configuration. If a #directory is specified, the project will be loaded using FileTree/Metacello from the given directory. Otherwise, it will be loaded from the specified #repository.

SCIMetacelloLoadSpec {
  #baseline : 'MyProject',                            // Define MC Baseline
  #configuration : 'MyProject',                       // Alternatively, define MC Configuration
  #directory : 'src',                                 // Path to source-code directory were are packages (i.e. 'packages' or 'src'), in case of packages are not on root
  #failOn : [ #OCUndeclaredVariableWarning ],         // Fail build on provided list of Warnings
  #ignoreImage : true,                                // If true, Metacello will force a load of a package, overriding a previously existing one
  #load : [ 'default' ],                              // Define MC load attributes
  #onConflict : #useIncoming,                         // When there is a conflict between loaded sources and incoming sources (can be #useIncoming|#useLoaded)
  #onUpgrade : #useIncoming,                          // When loaded sources are an older version than incoming sources (can be #useIncoming|#useLoaded)
  #onWarningLog : true,                               // Log Warning messages to Transcript
  #platforms : [ #squeak, #pharo, #gemstone ],        // Define compatible platforms
  #repository : 'http://smalltalkhub.com/mc/...',     // Alternatively, define MC repository
  #usernameEnvVar : 'GITHUB_USER',                    // Environment variable containing the username used for authentication
  #passwordEnvVar : 'GITHUB_TOKEN',                   // Environment variable containing the password used for authentication
  #useLatestMetacello : true,                         // Upgrade Metacello before loading
  #version : '1.0.0'                                  // Define MC version (for MC Configurations only)
  #registerInIceberg : true                           // Pharo Only | Register the tested repository in Iceberg
}
SCIMonticelloLoadSpec

A SCIMonticelloLoadSpec loads a project with Monticello. It is possible to load the latest version of packages from a remote repository (#packages) or specific versions (#versions).

SCIMonticelloLoadSpec {
  #url : 'http://ss3.gemtalksystems.com/ss/...',      // Define URL for repository
  #packages : ['MyProject-Core', 'MyProject-Tests'],  // Load packages and/or
  #versions : ['MyProject-Core-aa.12'],               // Load specific versions
  #usernameEnvVar : 'USERNAME_VAR',                   // Environment variable containing the username used for authentication
  #passwordEnvVar : 'PASSWORD_VAR',                   // Environment variable containing the password used for authentication
  #platforms : [ #squeak, #pharo, #gemstone ]         // Define compatible platforms
}
SCIGoferLoadSpec

A SCIGoferLoadSpec works similar to a SCIMonticelloLoadSpec, but uses Gofer on top of Monticello to load a project.

SCIGoferLoadSpec {
  #url : 'http://smalltalkhub.com/mc/...',            // Define URL for repository
  #packages : ['MyProject-Core', 'MyProject-Tests'],  // Load packages and/or
  #versions : ['MyProject-Core-aa.12'],               // Load specific versions
  #usernameEnvVar : 'USERNAME_VAR',                   // Environment variable containing the username used for authentication
  #passwordEnvVar : 'PASSWORD_VAR',                   // Environment variable containing the password used for authentication
  #platforms : [ #squeak, #pharo, #gemstone ]         // Define compatible platforms
}

TestCase Selection

smalltalkCI runs a list of TestCases during a build. By default, smalltalkCI will use a list of all TestCases that it has loaded into the image. It is possible to adjust this list using the #testing slot. In general, TestCases can be selected on class-level (#classes), on category-level (#categories), on package-level (#packages) and on project-level (#projects, GemStone only). #classes expects a list of class name symbols, #categories and #packages expect category names and prefixes or package names and prefixes respectively. The default list can be replaced by a list of all TestCases that are present in the image by setting #allTestCases to true. Additionally, it is possible to add (#include) or remove (#exclude) classes from this list. The list can also be specified explicitly which means that only these TestCases will run.

SmalltalkCISpec {
  ...
  #testing : {
    // Include specific TestCases
    #include : {
      #classes : [ #AnotherProjectTestCase ],
      #categories : [ 'AnotherProject-Tests' ],
      #packages : [ 'AnotherProject.*' ],
      #projects : [ 'BaselineOfMyProject' ]
    },

    // Exclude specific TestCases from testing
    #exclude : {
      #classes : [ #AnotherProjectTestCase ],
      #categories : [ 'AnotherProject-Tests' ],
      #packages : [ 'AnotherProject.*' ],
      #projects : [ 'ConfigurationOfMyOtherProject' ]
    },

    #allTestCases : true, // Run all TestCases in image

    // Define TestCases explicitly
    #classes : [ #MyProjectTestCase ],
    #categories : [ 'MyProject-*' ],
    #packages : [ 'MyProject.*' ],
    #projects : [ 'BaselineOfMyProject' ],

    // Other options
    #defaultTimeout : 30, // In seconds (Squeak, and Pharo 6 or later)
    #failOnSCIDeprecationWarnings : false, // Fail if a deprecated smalltalkCI API is used
    #failOnZeroTests : false, // Pass builds that did not run any tests
    #hidePassingTests : true, // Hide passing tests when printing to stdout
    #serializeError: false // (default: true) Disable serialization of failing test case (e.g. with Fuel in Pharo)
  }
}

Coverage Testing

See COVERAGE.md.

Custom Scripts

It is possible to run custom scripts before and after the loading and testing phases (preLoading, postLoading, preTesting, postTesting). smalltalkCI can file in single files, lists of files, and SCICustomScripts which can be used to only run certain scripts on certain platforms.

SmalltalkCISpec {
  #preLoading : 'scripts/preLoading.st',
  #loading : ...,
  #postLoading : [
    'scripts/postLoading1.st',
    'scripts/postLoading2.st'
  ],
  #preTesting : SCICustomScript {
    #path : 'scripts/preTesting.st',
    #platforms : [ #squeak, #pharo, #gemstone ]
  },
  #testing : ...,
  #postTesting : [
    SCICustomScript {
      #path : 'scripts/postTestingSqueak.st',
      #platforms : [ #squeak ]
    },
    SCICustomScript {
      #path : 'scripts/postTestingPharo.st',
      #platforms : [ #pharo ]
    }
  ]
}

Command Line Options

smalltalkCI has a couple of command line options that can be useful for debugging purposes or when used locally:

USAGE: bin/smalltalkci [options] /path/to/project/your_smalltalk.ston

This program prepares Smalltalk images/vms, loads projects, and runs tests.

OPTIONS:
  --clean             Clear cache and delete builds.
  -d | --debug        Enable debug mode.
  -h | --help         Show this help text.
  --headful           Open vm in headful mode and do not close image.
  --image             Custom image for build (Squeak/Pharo).
  --install           Install symlink to this smalltalkCI instance.
  --print-env         Print all environment variables used by smalltalkCI
  --no-color          Disable colored output
  --no-tracking       Disable collection of anonymous build metrics (Travis CI & AppVeyor only).
  -s | --smalltalk    Overwrite Smalltalk image selection.
  --uninstall         Remove symlink to any smalltalkCI instance.
  -v | --verbose      Enable 'set -x'.
  --vm                Custom VM for build (Squeak/Pharo).

EXAMPLE:
  bin/smalltalkci -s "Squeak64-trunk" --headful /path/to/project/.smalltalk.ston

Collection Of Anonymous Build Metrics

smalltalkCI collects anonymous build metrics (Smalltalk dialect, CI environment, build status, build duration) for public repositories when running on a supported CI platform. This helps to identify build errors caused by smalltalkCI updates and therefore helps to improve the service. It is possible to opt-out by using the --no-tracking option.

Travis-specific Options

Travis Timeouts

Jobs on Travis CI timeout if they don't produce output for more than 10 minutes. In the case of long-running tests, it is possible to increase this timeout by setting $SMALLTALK_CI_TIMEOUT in your .travis.yml to a value greater than 10:

env:
- SMALLTALK_CI_TIMEOUT=30

The above sets the timeout to 30 minutes. Please note that Travis CI enforces a total build timeout of 50 minutes.

Using A Different smalltalkCI Branch Or Fork

By default, the smalltalkCI master branch is used to perform a build. It is possible to select a different smalltalkCI branch or fork for testing/debugging purposes by adding the following to the .travis.yml:

smalltalk_edge:
  source: hpi-swa/smalltalkCI
  branch: dev

Contributing

Please feel free to open issues or to send pull requests if you'd like to discuss an idea or a problem.

Projects Using smalltalkCI

In alphabetical order:

Feel free to send a PR to add your Smalltalk project to the list. Please add [ci skip] to your commit message.

smalltalkci's People

Contributors

badetitou avatar brunobuzzi avatar cdlm avatar clotildetoullec avatar codezeilen avatar dalehenrich avatar demarey avatar estebanlm avatar fniephaus avatar gcotelli avatar guillep avatar hogoww avatar jbrichau avatar jecisc avatar labordep avatar leonmatthes avatar linqlover avatar marianopeck avatar mattonem avatar nef10 avatar noha avatar peteruhnak avatar philippeback avatar seandenigris avatar sergestinckwich avatar tesonep avatar theseion avatar tiredfalcon avatar tom95 avatar uko avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

smalltalkci's Issues

Convert smalltalkCI's .st files to FileTree

As @dalehenrich mentioned in #60 (comment), it'd be easier to use a single repository for smalltalkCI's Smalltalk code.
Currently, smalltalkCI uses prepared Squeak images that have FileTree and smalltalkCI preinstalled. This speeds up each Squeak build process, because these projects do not need to be loaded.
But it'd actually be better to use the FileTree-format for smalltalkCI's code, so if we only preinstall FileTree in Squeak images, we can then load smalltalkCI during a build just like in Pharo or GemStone.
Another plus: we don't need to prepare new Squeak testing images everytime smalltalkCI changes.

Add support for `./pharo Pharo.image config ...`?

@peteruhnak mentioned in #20 that Pharo users often use the same script (see below) for their Jenkins CI builds.

I believe it'd make sense to add support for the following:

./pharo $JOB_NAME.image config $REPO ConfigurationOfSton --install=$VERSION

Any objections/suggestions?

For the record, here's the full script again:

# jenkins puts all the params after a / in the job name as well :(
export JOB_NAME=`dirname $JOB_NAME`

wget --quiet -O - get.pharo.org/$PHARO+$VM | bash

./pharo Pharo.image save $JOB_NAME --delete-old
./pharo $JOB_NAME.image --version > version.txt

REPO=http://smalltalkhub.com/mc/HardCodedRepository/$JOB_NAME/main
./pharo $JOB_NAME.image config $REPO ConfigurationOfSton --install=$VERSION
./pharo $JOB_NAME.image test --junit-xml-output "$JOB_NAME.*"

zip -r $JOB_NAME.zip $JOB_NAME.image $JOB_NAME.changes

# clean up the workspace to not occupy too much stale space on the slaves
rm -rf *.image *.changes

What is the purpose of #include section in #testing?

What is the purpose of the #include section?

    #categories : [ 'MyProject-*' ],                          // Define categories to test explicitly
    #classes : [ #MyProjectTestCase ],                        // Define classes to test explicitly
    #packages : [ 'MyProject.*' ]                             // Define Pharo packages to test
    #include : {
        #categories : [ 'AnotherProject-Tests' ],               // Include categories to test
        #classes : [ #AnotherProjectTestCase ],                 // Include classes to test
        #packages : [ 'AnotherProject.*' ]                      // Include Pharo packages to test
    },

Isn't it equal to having it directly in the array?

    #categories : [ 'MyProject-*', 'AnotherProject-Tests' ],                          // Define categories to test explicitly
    #classes : [ #MyProjectTestCase, #AnotherProjectTestCase ],                        // Define classes to test explicitly
    #packages : [ 'MyProject.*', 'AnotherProject.*' ]                             // Define Pharo packages to test

SmalltalkCI>>readSTONSpec: is not portable to GemStone

The classes StandardFileStream and MultiByteFileStream used in SmalltalkCI>>readSTONSpec: are not present in GemStone and the method probably should be made abstract and the current implementation moved to Squeak, as it appears that SmalltalkCI>>readSTONSpec: is implemented differently for Pharo as well ...

Now is a good time for me to look into this as well as fleshing out the rest of the GemSTone implementation.

BTW, I thought that I saw a FileTree repo for the SmalltalkCI code ... should I wait until that code is merged before making changes .... I haven't had to work with chunk format files since the 1980's:)

working with additional resources like images

In our project HPI-BP2015H/squeak-parable we are using images. They need to be copied to the correct directory, so on Travis the build is failing.

When I copy the files to the correct directory (see here) the build fails because I have already created the ${SMALLTALK_CI_BUILD} directory.

Is there a better solution to store images or get them into the right directory or should we just check do a short check before creating the ${SMALLTALK_CI_BUILD} directory?

GemStone on Container-Based Infrastructure

GemStone builds currently require builderCI fallback and don't run on Travis' container-based infrastructure, because setting up a GemStone VM requires sudo.
We should be able to set up a GemStone VM on the faster infrastructure by moving the setup code to:
https://github.com/travis-ci/travis-build/blob/master/lib/travis/build/script/smalltalk.rb
The steps necessary to set up a GemStone VM can be found here. Obviously, a GemStone VM should only be set up for GemStone builds.

Maybe @dalehenrich can help with this. Are all steps in here really necessary or is there an updated version of the installer?

Use JUnit XML output to unify and pretty print test results

Following up on #15.

Pharo is already exporting a JUnit XML file with test results and it should be straightforward to let Squeak do the same. This will allow us to unify the way test results appear in the Travis log and to make them more human readable.

Here's a pretty cool example of how other projects on GitHub print their log to Travis (using syntactical Travis-specific sugar to enable folding):
image
https://travis-ci.org/kattrali/xcpretty-travis-formatter/jobs/52970340#L121

Test that smalltalkCI builds can fail

At the moment, the smalltalkCI self-test checks if the smalltalkCI tests pass.
It'd be good to also test if smalltalkCI builds can actually fail.
There are already excluded tests that we can use for this.
Also, it would be handy to be able to specify a custom .ston file for a build. Then we could do both, executing the normal tests and tests that are expected to fail in one build by running smalltalkCI twice.

Builds broken due to yaml_parser when `smalltalk` key doesn't map to a list

Consider the following travis.yml taken from my project, which does not work now:

language: smalltalk
sudo: false
smalltalk: Pharo-5.0
env:
  global:
    - BASELINE="GitHub"
    - BASELINE_GROUP="tests"
    - PACKAGES="."

My builds were working fine up to yesterday. Is the value for smalltalk required to be a list now? I got the following error:

/home/travis/smalltalkCI-master/yaml_parser.rb:54:in `<main>': undefined method `first' for "Pharo-5.0":String (NoMethodError)

show time of steps

Show time for each step:

Preparing folders...
Starting Squeak build...
Linux detected...
Downloading virtual machine...
Extracting virtual machine...
Downloading Squeak5.0 testing image...
Extracting image...
Load project into image and run tests...

missing libssl library

I've encountered a problem with ssl and Pharo

My BaselineOf pulls another package from github via 'github://' protocol (which internally uses SSL),
but it fails on missing library.

Loading baseline of BaselineOfBormModel...ioLoadModule(/home/travis/smalltalkCI-master/_cache/vms/Pharo-5.0/pharo-vm/libSqueakSSL.so):
  libssl.so.1.0.0: cannot open shared object file: No such file or directory
...RETRY->BaselineOfDynaCASEModel
...RETRY->BaselineOfDynaCASEModel==== Startup Error: ZdcPluginMissing: SSL/TLS plugin initailization failed (VM plugin missing ? OS libraries missing ?)

The solution was explicitly adding the following to my .travis.yml

addons:
    apt:
        packages:
            - libssl1.0.0:i386

Maybe it should be part the default container (preinstalled), or alternatively at least having a mention in the README (since other people are likely to eventually encounter this problem too)

Summary of test failures by failed test in travis output - useful

I have several packages with 1000+ tests and I'm afraid that it will be like trying to find a needle in the haystack when trying to determine the list of tests that have failed ... collecting and listing the failed tests at the end of the output would be very useful in these cases ....

Cache github-package folder

Sometimes builds can hit a GitHub API limit (example), because Metacello uses the API for project loading purposes.

Caching the github-package folder may resolve that problem (as suggested by @dalehenrich).

smalltalkCI already has a build folder structure, but for Travis it could always use the same build folder which then can be cached by Travis.

Travis WebLint (http://lint.travis-ci.org)doesn't recognize `smalltalk` as a language

An attempt to validate the .travis.yml for Object Explorer resulted in the following errors:

  • in language section: illegal value smalltalk, defaulting to ruby
  • unexpected key smalltalk, dropping
  • your repository must be feature flagged for the os setting to be used

Perhaps it is just a matter of time before smalltalk is migrated to Travis WebLint?

BTW, I had a different error (tab on the last line) that was causing the [failure](https://travis-ci.org/dalehenrich/obex/builds/100843007

What changed? ... smalltalkCI build failing with `Project home is not found.`

here's the failed build ... here's the log excerpt:

Worker information
hostname: travis-worker-gce-org-prod-6:8c4942fe-6ad1-4e68-82ab-c73c15f13526
version: v2.0.0-24-g8f5b41a https://github.com/travis-ci/worker/tree/8f5b41a07b602643e7ee8cf307787f9ca8f4b00b
instance: testing-gce-fbb5a5e9-2281-4154-ba18-36e6568e1ca9:travis-ci-mega-trusty-1445287562
startup: 23.3541162s
system_info
Build system information
Build language: smalltalk
Build group: stable
Build dist: precise
Build image provisioning date and time
Mon Oct 19 21:23:19 UTC 2015
Operating System Details
Distributor ID: Ubuntu
Description:    Ubuntu 14.04.3 LTS
Release:    14.04
Codename:   trusty
Linux Version
3.19.0-28-generic
Cookbooks Version
fffffff https://github.com/travis-ci/travis-cookbooks/tree/fffffff
Git version
git version 1.9.1
GCC version
gcc (Ubuntu 4.8.4-2ubuntu1~14.04) 4.8.4
Copyright (C) 2013 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
LLVM version
clang version 3.5.0 (tags/RELEASE_350/final)
Target: x86_64-unknown-linux-gnu
Thread model: posix
Pre-installed Ruby versions
jruby-9.0.1.0
ruby-1.9.3-p551
ruby-2.0.0-p647
ruby-2.1.7
ruby-2.2.3
Pre-installed Node.js versions
iojs-v1.6
iojs-v1.6.4
v0.10
v0.10.40
v0.11.16
v0.12.2
v0.12.7
v0.6.21
v0.8.28
v4.1.2
Pre-installed Go versions
1.0.3
1.1.2
1.2.2
1.3.3
1.4.2
1.5.1
mysql --version
mysql  Ver 14.14 Distrib 5.5.44, for debian-linux-gnu (x86_64) using readline 6.3
Pre-installed PostgreSQL versions
9.1.19
9.2.14
9.3.10
9.4.5
Redis version
redis-server 3.0.5
RabbitMQ Version
3.5.4
Installed Sphinx versions
2.0.10
2.1.9
2.2.8
Default Sphinx version
2.2.8
Installed Firefox version
firefox 31.6.0esr
ant -version
Apache Ant(TM) version 1.9.3 compiled on April 8 2014
mvn -version
Apache Maven 3.1.1 (0728685237757ffbf44136acec0402957f723d9a; 2013-09-17 15:22:22+0000)
Maven home: /usr/local/maven
Java version: 1.8.0_60, vendor: Oracle Corporation
Java home: /usr/lib/jvm/java-8-oracle/jre
Default locale: en_US, platform encoding: UTF-8
OS name: "linux", version: "3.19.0-28-generic", arch: "amd64", family: "unix"
gradle -version
------------------------------------------------------------
Gradle 2.7
------------------------------------------------------------
Build time:   2015-09-14 07:26:16 UTC
Build number: none
Revision:     c41505168da69fb0650f4e31c9e01b50ffc97893
Groovy:       2.3.10
Ant:          Apache Ant(TM) version 1.9.3 compiled on December 23 2013
JVM:          1.8.0_60 (Oracle Corporation 25.60-b23)
OS:           Linux 3.19.0-28-generic amd64
lein version
Downloading Leiningen to /home/travis/.lein/self-installs/home/travis/.lein/leiningen-2.5.1-standalone.jar now...
Leiningen 2.5.1 on Java 1.8.0_60 Java HotSpot(TM) 64-Bit Server VM
phpenv versions
* system (set by /home/travis/.phpenv/version)
install_packages
Installing dependencies
Reading package lists... Done
Building dependency tree       
Reading state information... Done
E: Unable to locate package libc6
E: Unable to locate package libuuid1
E: Unable to locate package libfreetype6
E: Unable to locate package libssl1.0.0
E: Couldn't find any package by regex 'libssl1.0.0'
The command "eval sudo apt-get install --no-install-recommends libc6:i386 libuuid1:i386 libfreetype6:i386 libssl1.0.0:i386" failed. Retrying, 2 of 3.
Reading package lists... Done
Building dependency tree       
Reading state information... Done
E: Unable to locate package libc6
E: Unable to locate package libuuid1
E: Unable to locate package libfreetype6
E: Unable to locate package libssl1.0.0
E: Couldn't find any package by regex 'libssl1.0.0'
The command "eval sudo apt-get install --no-install-recommends libc6:i386 libuuid1:i386 libfreetype6:i386 libssl1.0.0:i386" failed. Retrying, 3 of 3.
Reading package lists... Done
Building dependency tree       
Reading state information... Done
E: Unable to locate package libc6
E: Unable to locate package libuuid1
E: Unable to locate package libfreetype6
E: Unable to locate package libssl1.0.0
E: Couldn't find any package by regex 'libssl1.0.0'
The command "eval sudo apt-get install --no-install-recommends libc6:i386 libuuid1:i386 libfreetype6:i386 libssl1.0.0:i386" failed 3 times.
git.checkout
1.33s$ git clone --depth=50 --branch=master https://github.com/dalehenrich/obex.git dalehenrich/obex
Cloning into 'dalehenrich/obex'...
remote: Counting objects: 10910, done.
remote: Compressing objects: 100% (8269/8269), done.
remote: Total 10910 (delta 1456), reused 10561 (delta 1169), pack-reused 0
Receiving objects: 100% (10910/10910), 3.11 MiB | 0 bytes/s, done.
Resolving deltas: 100% (1456/1456), done.
Checking connectivity... done.
$ cd dalehenrich/obex
$ git checkout -qf 5d065aac718f69d8d0fcf87d71e8c099e1127682
hosts.before
127.0.0.1 localhost  trusty64 nettuno travis vagrant ip6-localhost ip6-loopback
127.0.1.1 localhost trusty64 nettuno travis vagrant ip6-localhost ip6-loopback
::1 localhost trusty64 nettuno travis vagrant ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
hosts
hosts.after
127.0.0.1 localhost  trusty64 nettuno travis vagrant ip6-localhost ip6-loopback travis.dev
127.0.1.1 localhost trusty64 nettuno travis vagrant ip6-localhost ip6-loopback
::1 localhost trusty64 nettuno travis vagrant ip6-localhost ip6-loopback travis.dev
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
Setting environment variables from .travis.yml
$ export BASELINE="Obex"
$ export BASELINE_GROUP="Core"
$ export PACKAGES="repository"
Smalltalk for Travis-CI is not officially supported, but is community maintained.
Please file any issues using the following link
  https://github.com/travis-ci/travis-ci/issues/new?labels=community:smalltalk
and mention `@bahnfahren`, `@chistopher`, `@fniephaus`, `@jchromik` and `@Nef10` in the issue
0.00s$ export PROJECT_HOME="$(pwd)"
0.02s
download_smalltalkci
Downloading and extracting smalltalkCI
0.79s$ wget -q -O smalltalkCI.zip https://github.com/hpi-swa/smalltalkCI/archive/master.zip
0.05s$ unzip -q -o smalltalkCI.zip
0.02s0.02s$ source env_vars
0.03s
0.01s$ $SMALLTALK_CI_HOME/run.sh
Project home is not found.
The command "$SMALLTALK_CI_HOME/run.sh" exited with 1.

TestFailure: Block raised NotFound: Object is not in the collection

While working on porting SmalltalkCI to GemStone, I accidentally used the following .smalltalk.ston:

SmalltalkCISpec {
  #loading : [
    SCIMetacelloLoadSpec {
      #baseline : 'SmalltalkCITests',
      #directory : 'tests',
      #platforms : [ #squeak, #pharo, #gemstone ]
    }
  ],
  #testing : {
    #exclude : {
      #classes : [ #Object]
    }
  }
}

and it hit an error that is present for all dialects. I've fixed the bug for GemStone and will be including the GemStone fix as well as a test for the bug in the pull request addressing Issue #48.

Why two builds per platform?

In a travis build using dalehenrich/master - which should match hpi-swa/master - it looks like each platform has two builds:

  • 33.1 Smalltalk: Squeak -trunk
  • 33.2 Smalltalk:Squeak-trunk

and I am not versed enough YAML to understand why those two builds are created.

From a build against gs_master, using this (.travis.yml file](https://github.com/dalehenrich/smalltalkCI/blob/gs_master/.travis.yml) I can tell that in the first case, the dependencies are installed and the build passes - even though the dependencies themselves appear to fail to be installed. In the second case, the dependencies are not installed and the build fails :

The failure of (build 37.2](https://travis-ci.org/dalehenrich/smalltalkCI/jobs/100443313#L962 appears to be due to the fact that the hostname is not set correctly ... which implies that the apt host travis-dev is not being executed ...

I would have thought that there would only need to be one build done per platform (the one where dependencies get set), especially since there does not appear to be any other discernable difference in the results ...

Host STON in lib/

Currently, STON is the only "hard dependency" and is being loaded from http://ss3.gemstone.com/ss/STON if not already present in an image.
It'd be better to host a version of STON within this repository.
This way builds don't break if ss3.gemstone.com is unreachable.

How do you build the images?

Since you are downloading the Squeak images from the HPI server we assume you are not using an image which is also hosted at squeak.org.
How do you build these images and why don't you just use the stock images?

Thank you in advance!

Latest VMs for Squeak

Find a better way to provide up-to-date VMs for Squeak.
Maybe show a build number?
Maybe the VMs ship with the new SqueakSSL anytime soon?

smalltalkCI Configuration 1.0

Currently, smalltalkCI requires environment variables to be set, because this is the way Travis builds run.

However, when running it locally, it is preferable to be able to use normal flags instead of environment variables (e.g. --baseline=MyProject or --keep_open).

Combined GemStone/Squeak/Pharo tests?

In my tests for GsDevKit_home, I expect to run both a Pharo (and someday Squeak) client and a GemStone server using this travis.yml .. the tests are primarily run through the pharo client, but I need to install code into both GemStone and Pharo (and someday Squeak) ...

So I'm wondering what the .travis.yml file for such a beast would look like ... the code that would be loaded into the client and server could be present in the same repository so being able to specify as much as possible in the .travis.yml file would be an advantage ...

if not within scope then being able to run custom scripts to accomplish would be okay ... but in this case it would be nice to go through the smalltakCI api rather than have to create similar functionality from scratch ...

Deprecate builderCI fallback

The builderCI fallback seems broken again at the moment and this might be a good time to deprecate it.
Initially, I have added builderCI fallback support to provide support for Pharo and GemStone. Pharo has been fully supported for quite a while now and I hope that we have GemStone running very soon (#51).
There's no need to maintain something (builderCI fallback in smalltalkCI) that nobody is using anymore, anyway.

Support custom #version for loading MC Configurations

Pharo Versionner doesn't create a BaselineOf but only a ConfigurationOf. It looks like when I specify #configurarion: 'ShortMessageCenter' it will always try to load #stable of that configuration. I would like to only have #stable when actually making a release and not have stable be an alias for HEAD.

Is it already possible to specify the version that should be loaded or how should it work?

Add GemStone support

Unfortunately, the GemStone VM requires a bit more than just a few apt-get packages.
For this reason, GemStone is not supported yet, but it would be great to have.

smalltalkCI builds on GCE are broken

I have no idea how the "language: smalltalk" is implemented by travis-ci but it looks like somehow it is issuing both "dpkg --add-architecture" and "apt-get". If the docker service is enabled the apt-get is issued without a '-y'.

Where can I find the scripts that implement "language: smalltalk" or could they be fixed to work with docker?

Forked version of repo does not pass travis-ci builds

When I run travis against a fork of the master branch, all of the builds fail with the same error:

$ $SMALLTALK_CI_HOME/run.sh
Could not find '/home/travis/build/dalehenrich/smalltalkCI/smalltalkCI-fixtures/.travis.yml'.
No Metacello baseline or configuration specified.

The only difference I see in the logs leading up to the failure is that in hpi-swa the following lines appear:

Setting environment variables from repository settings
$ export DEPLOY_CREDENTIALS=[secure]

and:

Could not find '/home/travis/build/dalehenrich/smalltalkCI/smalltalkCI-fixtures/.travis.yml'.

I cannot imagine what might be going on ... I've tried explicitly setting BASELINE and I've tried explicitly setting config_baseline to no avail ... something very fishy is going on ...

Here a partial log for my build:

Using worker: worker-linux-docker-ebd5a312.prod.travis-ci.org:travis-linux-6
system_info
Build system information
Build language: smalltalk
Build group: stable
Build dist: precise
Build image provisioning date and time
Thu Feb  5 15:09:33 UTC 2015
Operating System Details
Distributor ID: Ubuntu
Description:    Ubuntu 12.04.5 LTS
Release:    12.04
Codename:   precise
Linux Version
3.13.0-29-generic
Cookbooks Version
a68419e https://github.com/travis-ci/travis-cookbooks/tree/a68419e
GCC version
gcc (Ubuntu/Linaro 4.6.3-1ubuntu5) 4.6.3
Copyright (C) 2011 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
LLVM version
clang version 3.4 (tags/RELEASE_34/final)
Target: x86_64-unknown-linux-gnu
Thread model: posix
Pre-installed Ruby versions
ruby-1.9.3-p551
Pre-installed Node.js versions
v0.10.36
Pre-installed Go versions
1.4.1
Redis version
redis-server 2.8.19
riak version
2.0.2
MongoDB version
MongoDB 2.4.12
CouchDB version
couchdb 1.6.1
Neo4j version
1.9.4
RabbitMQ Version
3.4.3
ElasticSearch version
1.4.0
Installed Sphinx versions
2.0.10
2.1.9
2.2.6
Default Sphinx version
2.2.6
Installed Firefox version
firefox 31.0esr
PhantomJS version
1.9.8
ant -version
Apache Ant(TM) version 1.8.2 compiled on December 3 2011
mvn -version
Apache Maven 3.2.5 (12a6b3acb947671f09b81f49094c53f426d8cea1; 2014-12-14T17:29:23+00:00)
Maven home: /usr/local/maven
Java version: 1.7.0_76, vendor: Oracle Corporation
Java home: /usr/lib/jvm/java-7-oracle/jre
Default locale: en_US, platform encoding: ANSI_X3.4-1968
OS name: "linux", version: "3.13.0-29-generic", arch: "amd64", family: "unix"
install_packages
Installing dependencies
W: Size of file /var/lib/apt/lists/us.archive.ubuntu.com_ubuntu_dists_precise-backports_multiverse_source_Sources.gz is not what the server reported 5886 5888
W: Size of file /var/lib/apt/lists/ppa.launchpad.net_ubuntugis_ppa_ubuntu_dists_precise_main_binary-amd64_Packages.gz is not what the server reported 36669 36677
W: Size of file /var/lib/apt/lists/ppa.launchpad.net_ubuntugis_ppa_ubuntu_dists_precise_main_binary-i386_Packages.gz is not what the server reported 36729 36733
Reading package lists... Done
Building dependency tree       
Reading state information... Done
The following extra packages will be installed:
  gcc-4.6-base:i386 libc-bin libc-dev-bin libc6 libc6-dev libfreetype6
  libfreetype6-dev libgcc1:i386 libssl-dev libssl1.0.0 zlib1g:i386
Suggested packages:
  glibc-doc glibc-doc:i386 locales:i386
Recommended packages:
  uuid-runtime:i386
The following NEW packages will be installed:
  gcc-4.6-base:i386 libc6:i386 libfreetype6:i386 libgcc1:i386 libssl1.0.0:i386
  libuuid1:i386 zlib1g:i386
The following packages will be upgraded:
  libc-bin libc-dev-bin libc6 libc6-dev libfreetype6 libfreetype6-dev
  libssl-dev libssl1.0.0
8 upgraded, 7 newly installed, 0 to remove and 212 not upgraded.
Need to get 18.1 MB of archives.
After this operation, 13.5 MB of additional disk space will be used.
Get:1 http://us.archive.ubuntu.com/ubuntu/ precise-updates/main libc6-dev amd64 2.15-0ubuntu10.12 [2,942 kB]
Get:2 http://us.archive.ubuntu.com/ubuntu/ precise-updates/main libc-dev-bin amd64 2.15-0ubuntu10.12 [83.1 kB]
Get:3 http://us.archive.ubuntu.com/ubuntu/ precise-updates/main libc-bin amd64 2.15-0ubuntu10.12 [1,179 kB]
Get:4 http://us.archive.ubuntu.com/ubuntu/ precise-updates/main libc6 amd64 2.15-0ubuntu10.12 [4,652 kB]
Get:5 http://us.archive.ubuntu.com/ubuntu/ precise-updates/main libssl-dev amd64 1.0.1-4ubuntu5.32 [1,580 kB]
Get:6 http://us.archive.ubuntu.com/ubuntu/ precise-updates/main libssl1.0.0 amd64 1.0.1-4ubuntu5.32 [1,053 kB]
Get:7 http://us.archive.ubuntu.com/ubuntu/ precise/main gcc-4.6-base i386 4.6.3-1ubuntu5 [15.3 kB]
Get:8 http://us.archive.ubuntu.com/ubuntu/ precise-updates/main libc6 i386 2.15-0ubuntu10.12 [3,943 kB]
Get:9 http://us.archive.ubuntu.com/ubuntu/ precise/main libgcc1 i386 1:4.6.3-1ubuntu5 [54.3 kB]
Get:10 http://us.archive.ubuntu.com/ubuntu/ precise/main zlib1g i386 1:1.2.3.4.dfsg-3ubuntu4 [51.1 kB]
Get:11 http://us.archive.ubuntu.com/ubuntu/ precise-updates/main libssl1.0.0 i386 1.0.1-4ubuntu5.32 [1,012 kB]
Get:12 http://us.archive.ubuntu.com/ubuntu/ precise-updates/main libuuid1 i386 2.20.1-1ubuntu3.1 [13.6 kB]
Get:13 http://us.archive.ubuntu.com/ubuntu/ precise-updates/main libfreetype6-dev amd64 2.4.8-1ubuntu2.3 [797 kB]
Get:14 http://us.archive.ubuntu.com/ubuntu/ precise-updates/main libfreetype6 amd64 2.4.8-1ubuntu2.3 [344 kB]
Get:15 http://us.archive.ubuntu.com/ubuntu/ precise-updates/main libfreetype6 i386 2.4.8-1ubuntu2.3 [346 kB]
Fetched 18.1 MB in 0s (36.7 MB/s)
Preconfiguring packages ...
(Reading database ... 71420 files and directories currently installed.)
Preparing to replace libc6-dev 2.15-0ubuntu10.10 (using .../libc6-dev_2.15-0ubuntu10.12_amd64.deb) ...
Unpacking replacement libc6-dev ...
Preparing to replace libc-dev-bin 2.15-0ubuntu10.10 (using .../libc-dev-bin_2.15-0ubuntu10.12_amd64.deb) ...
Unpacking replacement libc-dev-bin ...
Preparing to replace libc-bin 2.15-0ubuntu10.10 (using .../libc-bin_2.15-0ubuntu10.12_amd64.deb) ...
Unpacking replacement libc-bin ...
Processing triggers for man-db ...
Setting up libc-bin (2.15-0ubuntu10.12) ...
(Reading database ... 71420 files and directories currently installed.)
Preparing to replace libc6 2.15-0ubuntu10.10 (using .../libc6_2.15-0ubuntu10.12_amd64.deb) ...
Unpacking replacement libc6 ...
Selecting previously unselected package libc6:i386.
Unpacking libc6:i386 (from .../libc6_2.15-0ubuntu10.12_i386.deb) ...
Setting up libc6 (2.15-0ubuntu10.12) ...
Processing triggers for libc-bin ...
ldconfig deferred processing now taking place
Selecting previously unselected package libgcc1:i386.
(Reading database ... 71723 files and directories currently installed.)
Unpacking libgcc1:i386 (from .../libgcc1_1%3a4.6.3-1ubuntu5_i386.deb) ...
Selecting previously unselected package gcc-4.6-base:i386.
Unpacking gcc-4.6-base:i386 (from .../gcc-4.6-base_4.6.3-1ubuntu5_i386.deb) ...
Processing triggers for ccache ...
Updating symlinks in /usr/lib/ccache ...
Setting up gcc-4.6-base:i386 (4.6.3-1ubuntu5) ...
Setting up libc6:i386 (2.15-0ubuntu10.12) ...
Setting up libgcc1:i386 (1:4.6.3-1ubuntu5) ...
Processing triggers for libc-bin ...
ldconfig deferred processing now taking place
(Reading database ... 71728 files and directories currently installed.)
Preparing to replace libssl-dev 1.0.1-4ubuntu5.21 (using .../libssl-dev_1.0.1-4ubuntu5.32_amd64.deb) ...
Unpacking replacement libssl-dev ...
Preparing to replace libssl1.0.0 1.0.1-4ubuntu5.21 (using .../libssl1.0.0_1.0.1-4ubuntu5.32_amd64.deb) ...
Unpacking replacement libssl1.0.0 ...
Selecting previously unselected package libssl1.0.0:i386.
Unpacking libssl1.0.0:i386 (from .../libssl1.0.0_1.0.1-4ubuntu5.32_i386.deb) ...
Setting up libssl1.0.0 (1.0.1-4ubuntu5.32) ...
Processing triggers for libc-bin ...
ldconfig deferred processing now taking place
Selecting previously unselected package zlib1g:i386.
(Reading database ... 71744 files and directories currently installed.)
Unpacking zlib1g:i386 (from .../zlib1g_1%3a1.2.3.4.dfsg-3ubuntu4_i386.deb) ...
Setting up zlib1g:i386 (1:1.2.3.4.dfsg-3ubuntu4) ...
Setting up libssl1.0.0:i386 (1.0.1-4ubuntu5.32) ...
Processing triggers for libc-bin ...
ldconfig deferred processing now taking place
Selecting previously unselected package libuuid1:i386.
(Reading database ... 71746 files and directories currently installed.)
Unpacking libuuid1:i386 (from .../libuuid1_2.20.1-1ubuntu3.1_i386.deb) ...
Preparing to replace libfreetype6-dev 2.4.8-1ubuntu2.1 (using .../libfreetype6-dev_2.4.8-1ubuntu2.3_amd64.deb) ...
Unpacking replacement libfreetype6-dev ...
Preparing to replace libfreetype6 2.4.8-1ubuntu2.1 (using .../libfreetype6_2.4.8-1ubuntu2.3_amd64.deb) ...
Unpacking replacement libfreetype6 ...
Selecting previously unselected package libfreetype6:i386.
Unpacking libfreetype6:i386 (from .../libfreetype6_2.4.8-1ubuntu2.3_i386.deb) ...
Processing triggers for man-db ...
Setting up libc-dev-bin (2.15-0ubuntu10.12) ...
Setting up libc6-dev (2.15-0ubuntu10.12) ...
Setting up libssl-dev (1.0.1-4ubuntu5.32) ...
Setting up libuuid1:i386 (2.20.1-1ubuntu3.1) ...
Setting up libfreetype6 (2.4.8-1ubuntu2.3) ...
Setting up libfreetype6:i386 (2.4.8-1ubuntu2.3) ...
Setting up libfreetype6-dev (2.4.8-1ubuntu2.3) ...
Processing triggers for libc-bin ...
ldconfig deferred processing now taking place
git.checkout
0.35s$ git clone --depth=50 --branch=master https://github.com/dalehenrich/smalltalkCI.git dalehenrich/smalltalkCI
Cloning into 'dalehenrich/smalltalkCI'...
remote: Counting objects: 556, done.
remote: Compressing objects: 100% (229/229), done.
remote: Total 556 (delta 305), reused 535 (delta 289), pack-reused 0
Receiving objects: 100% (556/556), 102.06 KiB | 0 bytes/s, done.
Resolving deltas: 100% (305/305), done.
Checking connectivity... done.
$ cd dalehenrich/smalltalkCI
$ git checkout -qf 5615327e7650f784010b6c621f15af9fbb890115
This job is running on container-based infrastructure, which does not allow use of 'sudo', setuid and setguid executables.
If you require sudo, add 'sudo: required' to your .travis.yml
See http://docs.travis-ci.com/user/workers/container-based-infrastructure/ for details.
Setting environment variables from .travis.yml
$ export BASELINE_GROUP="TravisCI"
$ export PACKAGES="packages"
Smalltalk for Travis-CI is not officially supported, but is community maintained.
Please file any issues using the following link
  https://github.com/travis-ci/travis-ci/issues/new?labels=community:smalltalk
and mention `@bahnfahren`, `@chistopher`, `@fniephaus`, `@jchromik` and `@Nef10` in the issue
0.00s$ export PROJECT_HOME="$(pwd)"
0.00s
download_smalltalkci
Downloading and extracting smalltalkCI
0.07s$ wget -q -O smalltalkCI.zip https://github.com/hpi-swa/smalltalkCI/archive/master.zip
0.01s$ unzip -q -o smalltalkCI.zip
0.00s0.01s$ source env_vars
0.00s
install.1
0.01s$ unset SMALLTALK_CI_HOME && source env_vars
install.2
0.07s$ wget -q -O fixtures.zip https://github.com/hpi-swa/smalltalkCI/archive/fixtures.zip
install.3
0.01s$ unzip -q fixtures.zip
install.4
0.00s$ export PROJECT_HOME="$(pwd)/smalltalkCI-fixtures"
0.01s$ $SMALLTALK_CI_HOME/run.sh
Could not find '/home/travis/build/dalehenrich/smalltalkCI/smalltalkCI-fixtures/.travis.yml'.
No Metacello baseline or configuration specified.
The command "$SMALLTALK_CI_HOME/run.sh" exited with 1.
Done. Your build exited with 1.

and a corresponding hpi-swa build passes:

Using worker: worker-linux-docker-4fc8beb6.prod.travis-ci.org:travis-linux-5
system_info
Build system information
Build language: smalltalk
Build group: stable
Build dist: precise
Build image provisioning date and time
Thu Feb  5 15:09:33 UTC 2015
Operating System Details
Distributor ID: Ubuntu
Description:    Ubuntu 12.04.5 LTS
Release:    12.04
Codename:   precise
Linux Version
3.13.0-29-generic
Cookbooks Version
a68419e https://github.com/travis-ci/travis-cookbooks/tree/a68419e
GCC version
gcc (Ubuntu/Linaro 4.6.3-1ubuntu5) 4.6.3
Copyright (C) 2011 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
LLVM version
clang version 3.4 (tags/RELEASE_34/final)
Target: x86_64-unknown-linux-gnu
Thread model: posix
Pre-installed Ruby versions
ruby-1.9.3-p551
Pre-installed Node.js versions
v0.10.36
Pre-installed Go versions
1.4.1
Redis version
redis-server 2.8.19
riak version
2.0.2
MongoDB version
MongoDB 2.4.12
CouchDB version
couchdb 1.6.1
Neo4j version
1.9.4
RabbitMQ Version
3.4.3
ElasticSearch version
1.4.0
Installed Sphinx versions
2.0.10
2.1.9
2.2.6
Default Sphinx version
2.2.6
Installed Firefox version
firefox 31.0esr
PhantomJS version
1.9.8
ant -version
Apache Ant(TM) version 1.8.2 compiled on December 3 2011
mvn -version
Apache Maven 3.2.5 (12a6b3acb947671f09b81f49094c53f426d8cea1; 2014-12-14T17:29:23+00:00)
Maven home: /usr/local/maven
Java version: 1.7.0_76, vendor: Oracle Corporation
Java home: /usr/lib/jvm/java-7-oracle/jre
Default locale: en_US, platform encoding: ANSI_X3.4-1968
OS name: "linux", version: "3.13.0-29-generic", arch: "amd64", family: "unix"
install_packages
Installing dependencies
W: Size of file /var/lib/apt/lists/us.archive.ubuntu.com_ubuntu_dists_precise-backports_multiverse_source_Sources.gz is not what the server reported 5886 5888
W: Size of file /var/lib/apt/lists/ppa.launchpad.net_ubuntugis_ppa_ubuntu_dists_precise_main_binary-amd64_Packages.gz is not what the server reported 36669 36677
W: Size of file /var/lib/apt/lists/ppa.launchpad.net_ubuntugis_ppa_ubuntu_dists_precise_main_binary-i386_Packages.gz is not what the server reported 36729 36733
Reading package lists... Done
Building dependency tree       
Reading state information... Done
The following extra packages will be installed:
  gcc-4.6-base:i386 libc-bin libc-dev-bin libc6 libc6-dev libfreetype6
  libfreetype6-dev libgcc1:i386 libssl-dev libssl1.0.0 zlib1g:i386
Suggested packages:
  glibc-doc glibc-doc:i386 locales:i386
Recommended packages:
  uuid-runtime:i386
The following NEW packages will be installed:
  gcc-4.6-base:i386 libc6:i386 libfreetype6:i386 libgcc1:i386 libssl1.0.0:i386
  libuuid1:i386 zlib1g:i386
The following packages will be upgraded:
  libc-bin libc-dev-bin libc6 libc6-dev libfreetype6 libfreetype6-dev
  libssl-dev libssl1.0.0
8 upgraded, 7 newly installed, 0 to remove and 212 not upgraded.
Need to get 18.1 MB of archives.
After this operation, 13.5 MB of additional disk space will be used.
Get:1 http://us.archive.ubuntu.com/ubuntu/ precise-updates/main libc6-dev amd64 2.15-0ubuntu10.12 [2,942 kB]
Get:2 http://us.archive.ubuntu.com/ubuntu/ precise-updates/main libc-dev-bin amd64 2.15-0ubuntu10.12 [83.1 kB]
Get:3 http://us.archive.ubuntu.com/ubuntu/ precise-updates/main libc-bin amd64 2.15-0ubuntu10.12 [1,179 kB]
Get:4 http://us.archive.ubuntu.com/ubuntu/ precise-updates/main libc6 amd64 2.15-0ubuntu10.12 [4,652 kB]
Get:5 http://us.archive.ubuntu.com/ubuntu/ precise-updates/main libssl-dev amd64 1.0.1-4ubuntu5.32 [1,580 kB]
Get:6 http://us.archive.ubuntu.com/ubuntu/ precise-updates/main libssl1.0.0 amd64 1.0.1-4ubuntu5.32 [1,053 kB]
Get:7 http://us.archive.ubuntu.com/ubuntu/ precise/main gcc-4.6-base i386 4.6.3-1ubuntu5 [15.3 kB]
Get:8 http://us.archive.ubuntu.com/ubuntu/ precise-updates/main libc6 i386 2.15-0ubuntu10.12 [3,943 kB]
Get:9 http://us.archive.ubuntu.com/ubuntu/ precise/main libgcc1 i386 1:4.6.3-1ubuntu5 [54.3 kB]
Get:10 http://us.archive.ubuntu.com/ubuntu/ precise/main zlib1g i386 1:1.2.3.4.dfsg-3ubuntu4 [51.1 kB]
Get:11 http://us.archive.ubuntu.com/ubuntu/ precise-updates/main libssl1.0.0 i386 1.0.1-4ubuntu5.32 [1,012 kB]
Get:12 http://us.archive.ubuntu.com/ubuntu/ precise-updates/main libuuid1 i386 2.20.1-1ubuntu3.1 [13.6 kB]
Get:13 http://us.archive.ubuntu.com/ubuntu/ precise-updates/main libfreetype6-dev amd64 2.4.8-1ubuntu2.3 [797 kB]
Get:14 http://us.archive.ubuntu.com/ubuntu/ precise-updates/main libfreetype6 amd64 2.4.8-1ubuntu2.3 [344 kB]
Get:15 http://us.archive.ubuntu.com/ubuntu/ precise-updates/main libfreetype6 i386 2.4.8-1ubuntu2.3 [346 kB]
Fetched 18.1 MB in 0s (27.8 MB/s)
Preconfiguring packages ...
(Reading database ... 71420 files and directories currently installed.)
Preparing to replace libc6-dev 2.15-0ubuntu10.10 (using .../libc6-dev_2.15-0ubuntu10.12_amd64.deb) ...
Unpacking replacement libc6-dev ...
Preparing to replace libc-dev-bin 2.15-0ubuntu10.10 (using .../libc-dev-bin_2.15-0ubuntu10.12_amd64.deb) ...
Unpacking replacement libc-dev-bin ...
Preparing to replace libc-bin 2.15-0ubuntu10.10 (using .../libc-bin_2.15-0ubuntu10.12_amd64.deb) ...
Unpacking replacement libc-bin ...
Processing triggers for man-db ...
Setting up libc-bin (2.15-0ubuntu10.12) ...
(Reading database ... 71420 files and directories currently installed.)
Preparing to replace libc6 2.15-0ubuntu10.10 (using .../libc6_2.15-0ubuntu10.12_amd64.deb) ...
Unpacking replacement libc6 ...
Selecting previously unselected package libc6:i386.
Unpacking libc6:i386 (from .../libc6_2.15-0ubuntu10.12_i386.deb) ...
Setting up libc6 (2.15-0ubuntu10.12) ...
Processing triggers for libc-bin ...
ldconfig deferred processing now taking place
Selecting previously unselected package libgcc1:i386.
(Reading database ... 71723 files and directories currently installed.)
Unpacking libgcc1:i386 (from .../libgcc1_1%3a4.6.3-1ubuntu5_i386.deb) ...
Selecting previously unselected package gcc-4.6-base:i386.
Unpacking gcc-4.6-base:i386 (from .../gcc-4.6-base_4.6.3-1ubuntu5_i386.deb) ...
Processing triggers for ccache ...
Updating symlinks in /usr/lib/ccache ...
Setting up gcc-4.6-base:i386 (4.6.3-1ubuntu5) ...
Setting up libc6:i386 (2.15-0ubuntu10.12) ...
Setting up libgcc1:i386 (1:4.6.3-1ubuntu5) ...
Processing triggers for libc-bin ...
ldconfig deferred processing now taking place
(Reading database ... 71728 files and directories currently installed.)
Preparing to replace libssl-dev 1.0.1-4ubuntu5.21 (using .../libssl-dev_1.0.1-4ubuntu5.32_amd64.deb) ...
Unpacking replacement libssl-dev ...
Preparing to replace libssl1.0.0 1.0.1-4ubuntu5.21 (using .../libssl1.0.0_1.0.1-4ubuntu5.32_amd64.deb) ...
Unpacking replacement libssl1.0.0 ...
Selecting previously unselected package libssl1.0.0:i386.
Unpacking libssl1.0.0:i386 (from .../libssl1.0.0_1.0.1-4ubuntu5.32_i386.deb) ...
Setting up libssl1.0.0 (1.0.1-4ubuntu5.32) ...
Processing triggers for libc-bin ...
ldconfig deferred processing now taking place
Selecting previously unselected package zlib1g:i386.
(Reading database ... 71744 files and directories currently installed.)
Unpacking zlib1g:i386 (from .../zlib1g_1%3a1.2.3.4.dfsg-3ubuntu4_i386.deb) ...
Setting up zlib1g:i386 (1:1.2.3.4.dfsg-3ubuntu4) ...
Setting up libssl1.0.0:i386 (1.0.1-4ubuntu5.32) ...
Processing triggers for libc-bin ...
ldconfig deferred processing now taking place
Selecting previously unselected package libuuid1:i386.
(Reading database ... 71746 files and directories currently installed.)
Unpacking libuuid1:i386 (from .../libuuid1_2.20.1-1ubuntu3.1_i386.deb) ...
Preparing to replace libfreetype6-dev 2.4.8-1ubuntu2.1 (using .../libfreetype6-dev_2.4.8-1ubuntu2.3_amd64.deb) ...
Unpacking replacement libfreetype6-dev ...
Preparing to replace libfreetype6 2.4.8-1ubuntu2.1 (using .../libfreetype6_2.4.8-1ubuntu2.3_amd64.deb) ...
Unpacking replacement libfreetype6 ...
Selecting previously unselected package libfreetype6:i386.
Unpacking libfreetype6:i386 (from .../libfreetype6_2.4.8-1ubuntu2.3_i386.deb) ...
Processing triggers for man-db ...
Setting up libc-dev-bin (2.15-0ubuntu10.12) ...
Setting up libc6-dev (2.15-0ubuntu10.12) ...
Setting up libssl-dev (1.0.1-4ubuntu5.32) ...
Setting up libuuid1:i386 (2.20.1-1ubuntu3.1) ...
Setting up libfreetype6 (2.4.8-1ubuntu2.3) ...
Setting up libfreetype6:i386 (2.4.8-1ubuntu2.3) ...
Setting up libfreetype6-dev (2.4.8-1ubuntu2.3) ...
Processing triggers for libc-bin ...
ldconfig deferred processing now taking place
git.checkout
0.49s$ git clone --depth=50 --branch=master https://github.com/hpi-swa/smalltalkCI.git hpi-swa/smalltalkCI
Cloning into 'hpi-swa/smalltalkCI'...
remote: Counting objects: 517, done.
remote: Compressing objects: 100% (258/258), done.
remote: Total 517 (delta 285), reused 450 (delta 225), pack-reused 0
Receiving objects: 100% (517/517), 96.40 KiB | 0 bytes/s, done.
Resolving deltas: 100% (285/285), done.
Checking connectivity... done.
$ cd hpi-swa/smalltalkCI
$ git checkout -qf 7c5bb7536697450c31acbd555610015b08a9f116
This job is running on container-based infrastructure, which does not allow use of 'sudo', setuid and setguid executables.
If you require sudo, add 'sudo: required' to your .travis.yml
See http://docs.travis-ci.com/user/workers/container-based-infrastructure/ for details.
Setting environment variables from repository settings
$ export DEPLOY_CREDENTIALS=[secure]
Setting environment variables from .travis.yml
$ export BASELINE_GROUP="TravisCI"
$ export PACKAGES="packages"
Smalltalk for Travis-CI is not officially supported, but is community maintained.
Please file any issues using the following link
  https://github.com/travis-ci/travis-ci/issues/new?labels=community:smalltalk
and mention `@bahnfahren`, `@chistopher`, `@fniephaus`, `@jchromik` and `@Nef10` in the issue
0.00s$ export PROJECT_HOME="$(pwd)"
0.00s
download_smalltalkci
Downloading and extracting smalltalkCI
0.09s$ wget -q -O smalltalkCI.zip https://github.com/hpi-swa/smalltalkCI/archive/master.zip
0.01s$ unzip -q -o smalltalkCI.zip
0.00s0.01s$ source env_vars
0.00s
install.1
0.01s$ unset SMALLTALK_CI_HOME && source env_vars
install.2
0.09s$ wget -q -O fixtures.zip https://github.com/hpi-swa/smalltalkCI/archive/fixtures.zip
install.3
0.01s$ unzip -q fixtures.zip
install.4
0.01s$ export PROJECT_HOME="$(pwd)/smalltalkCI-fixtures"
11.09s$ $SMALLTALK_CI_HOME/run.sh
Preparing folders...
Starting Squeak build...

No helpers.sh file?

I'm sure it's just me being dumb. https://travis-ci.org/frankshearar/Control/jobs/99882794 fails because the above-mentioned file doesn't exist:

Downloading and extracting smalltalkCI
0.09s$ wget -q -O smalltalkCI.zip https://github.com/hpi-swa/smalltalkCI/archive/master.zip
0.03s$ unzip -q -o smalltalkCI.zip
0.00s0.01s$ source env_vars
0.00s
0.00s$ $SMALLTALK_CI_HOME/run.sh
/home/travis/smalltalkCI-master/run.sh: line 5: helpers.sh: No such file or directory

The .travis.yml file (https://github.com/frankshearar/Control/blob/update-to-new-travis-abilities/.travis.yml) looks OK to my untrained eye.

What have I messed up?

Add ability to produce an all-in-one bundle

@SergeStinckwich mentioned that it would be useful to be able to produce an all-in-one bundle.
I am not sure yet, how bundling a project would work best, especially for GemStone.
However, smalltalkCI could export the path to the bundle as an environment variable.
The developer is then able to use Travis to deploy that bundle to his preferred service.

@marceltaeumel's Vivide is already tested via smalltalkCI and then an image is prepared and uploaded after success.

I think it makes sense to make bundling an option and disable it by default.

$BASELINE is not defined

Somewhere in the last 9 days something has changed that breaks builds because of a missing baseline.

Here's an example of broken build https://travis-ci.org/dynacase/class-editor/builds/95859363
Notice that just couple of lines above the error is export BASELINE="DCUmlClassEditor" so I call shenanigans.

The same code with same travis configuration was passing ~9 days ago https://travis-ci.org/dynacase/class-editor/builds/95670552 (the broken build is just a rerun)

What is missing? Looking at the readme this hasn't changed.

No reason of failure given

Hi, I end up with this log:

Loading and testing project...
3.00s2016-02-23 08:41:17.139 Pharo[517:507] 08:41:17.137 ERROR:     [0xa116d1a8] AQMEIO.cpp:377: _FindIOUnit: error -66680
2016-02-23 08:41:17.139 Pharo[517:507] 08:41:17.139 ERROR:     [0xa116d1a8] >aq> AudioQueueObject.cpp:1590: Prime: failed (-66680); will stop (5512/0 frames)
2016-02-23 08:41:17.140 Pharo[517:507] 08:41:17.140 ERROR:     [0xa116d1a8] AQMEIO.cpp:377: _FindIOUnit: error -66680
2016-02-23 08:41:17.142 Pharo[517:507] 08:41:17.142 ERROR:     [0xa116d1a8] >aq> AudioQueueObject.cpp:1590: Prime: failed (-66680); will stop (33075/0 frames)
Fetched -> BaselineOfSmalltalkCI-fn.5 --- filetree:///Users/travis/smalltalkCI-master/repository [:] --- filetree:///Users/travis/smalltalkCI-master/repository
Loaded -> BaselineOfSmalltalkCI-fn.5 --- filetree:///Users/travis/smalltalkCI-master/repository [:] --- filetree:///Users/travis/smalltalkCI-master/repository
Loading baseline of BaselineOfSmalltalkCI...
Fetched -> STON-Core-fn.59 --- filetree:///Users/travis/smalltalkCI-master/repository [:] --- filetree:///Users/travis/smalltalkCI-master/repository
Fetched -> SmalltalkCI-Core-fn.2 --- filetree:///Users/travis/smalltalkCI-master/repository [:] --- filetree:///Users/travis/smalltalkCI-master/repository
Fetched -> SmalltalkCI-Pharo-fn.2 --- filetree:///Users/travis/smalltalkCI-master/repository [:] --- filetree:///Users/travis/smalltalkCI-master/repository
Loaded -> STON-Core-fn.59 --- filetree:///Users/travis/smalltalkCI-master/repository [:] --- cache
Loaded -> SmalltalkCI-Core-fn.2 --- filetree:///Users/travis/smalltalkCI-master/repository [:] --- cache
Loaded -> SmalltalkCI-Pharo-fn.2 --- filetree:///Users/travis/smalltalkCI-master/repository [:] --- cache
...finished baseline
Failed to load and test project.
The command "$SMALLTALK_CI_HOME/run.sh" exited with 1.
Done. Your build exited with 1.

And if you look at it you have no idea what happened because it says ...finished baseline and then immediately Failed to load and test project.

break the build if Undeclared detected

By default, Monticello reports a warning if it is loading a method that references a class not in the system. The warning is non blocking which allows dependencies to be loaded after the package depending on them. The problem is that this process allows packages to be badly defined with non-declared or circular dependencies. Would it be possible to have an option to transform these warnings into build errors?

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.