{"id":15107589,"url":"https://github.com/hpi-swa/smalltalkci","last_synced_at":"2025-04-04T12:07:22.487Z","repository":{"id":34829964,"uuid":"38818056","full_name":"hpi-swa/smalltalkCI","owner":"hpi-swa","description":"Framework for testing Smalltalk projects with GitHub Actions, GitLab CI, Travis CI, AppVeyor, and others.","archived":false,"fork":false,"pushed_at":"2025-03-03T09:47:37.000Z","size":3295,"stargazers_count":96,"open_issues_count":74,"forks_count":69,"subscribers_count":26,"default_branch":"master","last_synced_at":"2025-04-04T12:07:14.057Z","etag":null,"topics":["appveyor","ci","continuous-integration","coverage-testing","gemstone","gitlab-ci","metacello","moose","pharo","smalltalk","squeak","ston","travis-ci"],"latest_commit_sha":null,"homepage":"","language":"Smalltalk","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/hpi-swa.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2015-07-09T12:09:28.000Z","updated_at":"2025-03-02T18:42:27.000Z","dependencies_parsed_at":"2023-02-13T02:16:19.613Z","dependency_job_id":"4fbe7a83-9ae1-413f-b1bc-e18518102f90","html_url":"https://github.com/hpi-swa/smalltalkCI","commit_stats":{"total_commits":1565,"total_committers":52,"mean_commits":"30.096153846153847","dds":"0.38274760383386586","last_synced_commit":"0780adc5c43e762b368efddc90911519a9558a89"},"previous_names":[],"tags_count":48,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/hpi-swa%2FsmalltalkCI","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/hpi-swa%2FsmalltalkCI/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/hpi-swa%2FsmalltalkCI/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/hpi-swa%2FsmalltalkCI/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/hpi-swa","download_url":"https://codeload.github.com/hpi-swa/smalltalkCI/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":247174418,"owners_count":20896078,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["appveyor","ci","continuous-integration","coverage-testing","gemstone","gitlab-ci","metacello","moose","pharo","smalltalk","squeak","ston","travis-ci"],"created_at":"2024-09-25T21:25:48.899Z","updated_at":"2025-04-04T12:07:22.469Z","avatar_url":"https://github.com/hpi-swa.png","language":"Smalltalk","funding_links":[],"categories":[],"sub_categories":[],"readme":"# smalltalkCI\n\n[![GitHub Workflow Status][github_action_b]][github_action_url] [![Coverage Status][coveralls_b]][coveralls_url]\n\nCommunity-supported framework for testing Smalltalk projects on Linux, OS X, and\nWindows with built-in support for [GitHub Actions][github_action],\n[GitLab CI/CD][gitlab_ci_cd], [Travis CI][travisCI], and [AppVeyor][appveyor].\n\nIt is inspired by [builderCI][builderCI] and aims to provide a uniform and easy\nway to load and test Smalltalk projects.\n\n[![ESUG][esug_logo]][esug]\n[![13th Innovation Technology Awards][esug_ita16_b]][esug_ita16]\n\n## Table Of Contents\n\n- [Features](#features)\n- [How to set up Continuous Integration for your Smalltalk project](#how-to-ci)\n- [How to test your Smalltalk project locally](#how-to-local)\n- [List of Supported Images](#images)\n- [Templates](#templates)\n- [Further Configuration](#further-configuration)\n- [Contributing](#contributing)\n- [Projects using smalltalkCI](#projects-using-smalltalkci)\n\n\n## Features\n\n- Compatible across different Smalltalk dialects (Squeak, Pharo, GemStone)\n- Runs on GitHub Actions, GitLab CI, Travis CI, AppVeyor, and other CI services\n- Simple configuration via [`.smalltalk.ston`](#minimal-smalltalkston-template),\n  [`setup-smalltalkCI` action][github_action],\n  [`.gitlab-ci.yml`](#gitlab-ci-template),\n  [`.travis.yml`](#travis-ci-template), and\n  [`appveyor.yml`](#appveyor-template)\n- Supports Linux, macOS, and Windows and can be run locally (e.g. for debugging\n  purposes)\n- Supports [coverage testing][coverage_docs]\n- Exports test results in the JUnit XML format as part of the build log\n\n\n## \u003ca name=\"how-to-ci\"/\u003eHow To Set Up Continuous Integration For Your Smalltalk Project\n\n1. Export your project in a [compatible format](#load-specs) (e.g.,\n   [Tonel][tonel] or [FileTree][filetree]).\n2. Enable a CI service for your repository (e.g., [GitHub Actions][github_actions]).\n3. Create a config file for your CI service ([see below for templates](#templates)) and specify the [Smalltalk image(s)](#images) you want your project to be tested against.\n4. Create a [`.smalltalk.ston` file](#minimal-smalltalkston-template) and specify how to load and test your project.\n5. Push all of this to your repository and enjoy your fast Smalltalk builds!\n\n\n## \u003ca name=\"how-to-local\"/\u003eHow To Test Your Smalltalk Project Locally\n\nYou can use smalltalkCI to run your project's tests locally. Just [clone][clone]\nor [download][download] smalltalkCI and then you can initiate a local build in\nheadful mode like this:\n\n```bash\nbin/smalltalkci -s \u003cIMAGE\u003e --headful /path/to/your/project/.smalltalk.ston\n```\n\n`\u003cIMAGE\u003e` can be one of the [supported images](#images). You may also want to\nhave a look at [all supported options](#further-configuration).\n\nOn Windows, you need to run smalltalkCI from a Bash shell such as \n[Git Bash][git_bash] or Cygwin, MinGW, or MSYS2.\n\n*Please note: All builds will be stored in `_builds` within smalltalkCI's\ndirectory. You may want to delete single or all builds if you don't need them as\nthey can take up a lot of space on your drive.*\n\n\n## \u003ca name=\"images\"/\u003eList of Supported Images\n\n| [Squeak][squeak] | [Pharo][pharo]   | [GemStone][gemstone] | [Moose][moose]  | [GToolkit][gtoolkit] |\n| ---------------- | ---------------- | -------------------- | --------------- | -------------------- |\n| `Squeak64-trunk` | `Pharo64-alpha`  | `GemStone64-3.6.x`   | `Moose64-trunk` | `GToolkit64-release` |\n| `Squeak64-6.0`   | `Pharo64-stable` | `GemStone64-3.5.8`   | `Moose64-12`    |                      |\n| `Squeak64-5.3`   | `Pharo64-13`     | `GemStone64-3.5.7`   | `Moose64-11`    |                      |\n| `Squeak64-5.2`   | `Pharo64-12`     | `GemStone64-3.5.6`   | `Moose64-10`    |                      |\n| `Squeak64-5.1`   | `Pharo64-11`     | `GemStone64-3.5.5`   | `Moose64-9.0`   |                      |\n| `Squeak32-trunk` | `Pharo64-10`     | `Gemstone64-3.5.4`   | `Moose64-8.0`   |                      |\n| `Squeak32-6.0`   | `Pharo64-9.0`    | `GemStone64-3.5.3`   |                 |                      |\n| `Squeak32-5.3`   | `Pharo64-8.0`    |                      |                 |                      |\n| `Squeak32-5.2`   | `Pharo64-7.0`    |                      |                 |                      |\n| `Squeak32-5.1`   | `Pharo64-6.1`    |                      |                 |                      |\n| `Squeak32-5.0`   | `Pharo64-6.0`    |                      |                 |                      |\n| `Squeak32-4.6`   | `Pharo32-alpha`  |                      |                 |                      |\n| `Squeak32-4.5`   | `Pharo32-stable` |                      |                 |                      |\n|                  | `Pharo32-12`     |                      |                 |                      |\n|                  | `Pharo32-11`     |                      |                 |                      |\n|                  | `Pharo32-10`     |                      |                 |                      |\n|                  | `Pharo32-9.0`    |                      |                 |                      |\n|                  | `Pharo32-8.0`    |                      |                 |                      |\n|                  | `Pharo32-7.0`    |                      |                 |                      |\n|                  | `Pharo32-6.1`    |                      |                 |                      |\n|                  | `Pharo32-6.0`    |                      |                 |                      |\n|                  | `Pharo32-5.0`    |                      |                 |                      |\n|                  | `Pharo32-4.0`    |                      |                 |                      |\n|                  | `Pharo32-3.0`    |                      |                 |                      |\n\n\n## Templates\n\n### \u003ca name=\"minimal-smalltalkston-template\"/\u003eMinimal `.smalltalk.ston` Template\n\nThe following `SmalltalkCISpec` will load `BaselineOfMyProject` using\nMetacello/FileTree from the `./packages` directory in Squeak, Pharo, and\nGemStone. See below how you can\n[customize your `SmalltalkCISpec`.](#SmalltalkCISpec)\n\n```javascript\nSmalltalkCISpec {\n  #loading : [\n    SCIMetacelloLoadSpec {\n      #baseline : 'MyProject',\n      #platforms : [ #squeak, #pharo, #gemstone ]\n    }\n  ]\n}\n```\n\n### GitHub Action Templates\n\nFor GitHub Action templates, please refer to the Marketplace listing of the\n[`setup-smalltalkCI` action][github_action].\n\n### GitLab CI Template\n\n\u003cdetails\u003e\n\u003csummary\u003e\u003ccode\u003e.gitlab-ci.yml\u003c/code\u003e\u003c/summary\u003e\n\n```yml\nimage: hpiswa/smalltalkci\n\nSqueak64Trunk:\n  script: smalltalkci -s \"Squeak64-trunk\"\n\nSqueak325.1:\n  script: smalltalkci -s \"Squeak32-5.1\"\n\nPharo64Alpha:\n  script: smalltalkci -s \"Pharo64-alpha\"\n\nPharo327.0:\n  script: smalltalkci -s \"Pharo32-7.0\"\n\n# ...\n```\n\n\u003c/details\u003e\n\n### Travis CI Templates\n\n\u003cdetails\u003e\n\u003csummary\u003e\u003ccode\u003e.travis.yml\u003c/code\u003e\u003c/summary\u003e\n\n```yml\nlanguage: smalltalk\nsudo: false\n\n# Select operating system(s)\nos:\n  - linux\n  - osx\n\n# Select compatible Smalltalk image(s)\nsmalltalk:\n  - Squeak64-trunk\n  - Squeak64-5.1\n  - Squeak32-4.6\n  - Squeak32-4.5\n  # ...\n  - Pharo64-alpha\n  - Pharo64-stable\n  - Pharo64-7.0\n  - Pharo64-6.1\n  # ...\n  - Pharo32-alpha\n  - Pharo32-stable\n  - Pharo32-6.1\n  # ...\n  - GemStone64-3.5.3\n  - GemStone64-3.6.0\n  - GemStone64-3.6.5\n  # ...\n\n# Override `script` to customize smalltalkCI invocation, e.g.:\n#script:\n#  - smalltalkci .mysmalltalk1.ston\n#  - travis_wait smalltalkci .mysmalltalk2.ston\n\n# Uncomment to enable caching (only useful for GemStone builds (3x faster))\n#cache:\n#  directories:\n#    - $SMALLTALK_CI_CACHE\n\n```\n\n\u003c/details\u003e\n\n\u003cdetails\u003e\n\u003csummary\u003e\u003ccode\u003e.travis.yml\u003c/code\u003e with multiple smalltalkCI configurations\u003c/summary\u003e\n\nThe build matrix can be expanded with multiple smalltalkCI configuration files\nusing the `smalltalk_config` key:\n\n```yml\nlanguage: smalltalk\nsudo: false\n\nsmalltalk:\n  - Squeak64-trunk\n  - Pharo64-alpha\n\nsmalltalk_config:\n  - .smalltalk.ston\n  - .bleedingEdge.ston\n```\n\nThe `.bleedingEdge.ston` configuration may look like this:\n\n```javascript\nSmalltalkCISpec {\n  #loading : [\n    SCIMetacelloLoadSpec {\n      ...\n      #load : [ 'CoreWithExtras' ],\n      #version : #bleedingEdge\n    }\n  ],\n  ...\n}\n```\n\n#### Resulting build matrix\n\n| Smalltalk        | Config               | OS    |\n| ---------------- | -------------------- | ----- |\n| `Squeak64-trunk` | `.smalltalk.ston`    | Linux |\n| `Squeak64-trunk` | `.bleedingEdge.ston` | Linux |\n| `Pharo64-alpha`  | `.smalltalk.ston`    | Linux |\n| `Pharo64-alpha`  | `.bleedingEdge.ston` | Linux |\n\n\u003c/details\u003e\n\n\u003cdetails\u003e\n\u003csummary\u003e\u003ccode\u003e.travis.yml\u003c/code\u003e with additional jobs\u003c/summary\u003e\n\nIt is possible to add additional jobs to the [build matrix][build_matrix_travis]\nusing the `smalltalk_config` key:\n\n```yml\nlanguage: smalltalk\nsudo: false\n\nos: osx\n\nsmalltalk:\n  - Squeak32-5.1\n  - Pharo32-6.0\n\nmatrix:\n  include:\n    - smalltalk: Squeak64-trunk\n      smalltalk_config: .bleedingEdge.ston\n    - smalltalk: Pharo64-alpha\n      smalltalk_config: .bleedingEdge.ston\n  allow_failures: # Allow bleeding edge builds to fail\n    - smalltalk_config: .bleedingEdge.ston\n```\n\n#### Resulting build matrix\n\n| Smalltalk        | Config               | OS    |\n| ---------------- | -------------------- | ----- |\n| `Squeak32-5.1`   | `.smalltalk.ston`    | macOS |\n| `Pharo32-6.0`    | `.smalltalk.ston`    | macOS |\n| `Squeak64-trunk` | `.bleedingEdge.ston` | macOS |\n| `Pharo64-alpha`  | `.bleedingEdge.ston` | macOS |\n\n\u003c/details\u003e\n\n### AppVeyor Templates\n\n\u003cdetails\u003e\n\u003csummary\u003e\u003ccode\u003eappveyor.yml\u003c/code\u003e\u003c/summary\u003e\n\n```yml\n# This is a 64-bit environment, so use 64-bit Cygwin\nenvironment:\n  CYG_ROOT: C:\\cygwin64\n  CYG_BASH: C:\\cygwin64\\bin\\bash\n  CYG_CACHE: C:\\cygwin64\\var\\cache\\setup\n  CYG_EXE: C:\\cygwin64\\setup-x86_64.exe\n  CYG_MIRROR: http://cygwin.mirror.constant.com\n  SCI_RUN: /cygdrive/c/smalltalkCI-master/bin/smalltalkci\n  matrix:\n    # Currently, only Squeak and Pharo images are supported on AppVeyor.\n    - SMALLTALK: Squeak64-trunk\n    - SMALLTALK: Squeak64-5.0\n    - SMALLTALK: Pharo64-alpha\n    - SMALLTALK: Pharo64-6.0\n    # ...\n\nplatform:\n  - x64\n\ninstall:\n  - '%CYG_EXE% -dgnqNO -R \"%CYG_ROOT%\" -s \"%CYG_MIRROR%\" -l \"%CYG_CACHE%\" -P unzip'\n  - ps: Start-FileDownload \"https://github.com/hpi-swa/smalltalkCI/archive/master.zip\" \"C:\\smalltalkCI.zip\"\n  - 7z x C:\\smalltalkCI.zip -oC:\\ -y \u003e NULL\n\nbuild: false\n\ntest_script:\n  - '%CYG_BASH% -lc \"cd $APPVEYOR_BUILD_FOLDER; exec 0\u003c/dev/null; $SCI_RUN\"'\n```\n\n\u003c/details\u003e\n\n\u003cdetails\u003e\n  \u003csummary\u003e\u003ccode\u003eappveyor.yml\u003c/code\u003e with additional jobs\u003c/summary\u003e\n\nIt is possible to add additional jobs to the\n[build matrix][build_matrix_appveyor] using `environment.matrix` as follows:\n\n```yml\nenvironment:\n  CYG_ROOT: C:\\cygwin\n  CYG_BASH: C:\\cygwin\\bin\\bash\n  CYG_CACHE: C:\\cygwin\\var\\cache\\setup\n  CYG_EXE: C:\\cygwin\\setup-x86.exe\n  CYG_MIRROR: http://cygwin.mirror.constant.com\n  SCI_RUN: /cygdrive/c/SMALLTALKCI-master/bin/smalltalkci\n\n  matrix:\n    - SMALLTALK: Squeak32-5.1\n    - SMALLTALK: Squeak64-trunk\n      SMALLTALK_CONFIG: .bleedingEdge.ston\n    - SMALLTALK: Pharo32-6.0\n    - SMALLTALK: Pharo64-alpha\n      SMALLTALK_CONFIG: .bleedingEdge.ston\n\nplatform:\n  - x86\n\ninstall:\n  - '%CYG_EXE% -dgnqNO -R \"%CYG_ROOT%\" -s \"%CYG_MIRROR%\" -l \"%CYG_CACHE%\" -P unzip'\n  - ps: Start-FileDownload \"https://github.com/hpi-swa/SMALLTALKCI/archive/master.zip\" \"C:\\SMALLTALKCI.zip\"\n  - 7z x C:\\SMALLTALKCI.zip -oC:\\ -y \u003e NULL\n\nbuild: false\n\ntest_script:\n  - '%CYG_BASH% -lc \"cd $APPVEYOR_BUILD_FOLDER; exec 0\u003c/dev/null; $SCI_RUN $SMALLTALK_CONFIG\"'\n```\n\n#### Resulting build matrix\n\n| Smalltalk        | Config               |\n| ---------------- | -------------------- |\n| `Squeak32-5.1`   | `.smalltalk.ston`    |\n| `Squeak64-trunk` | `.bleedingEdge.ston` |\n| `Pharo32-6.0`    | `.smalltalk.ston`    |\n| `Pharo64-alpha`  | `.bleedingEdge.ston` |\n\n\u003c/details\u003e\n\n## Further Configuration\n\n### \u003ca name=\"SmalltalkCISpec\"/\u003eSetting Up A Custom `.smalltalk.ston`\n\nsmalltalkCI requires a `.smalltalk.ston` configuration file which can be\ncustomized for a project to cover various use cases.\nThe `.smalltalk.ston` must be a valid [STON][STON] file and has to contain a\nsingle `SmalltalkCISpec` object.\nThis object can hold one or more [load specifications](#load-specs) in\n`#loading` and configurations for the [TestCase selection](#testcase-selection)\nin `#testing`.\n\n```javascript\nSmalltalkCISpec {\n  #name : 'My Name', // Name of the SmalltalkCISpec (optional)\n  #loading : [\n    // List Of Load Specifications...\n  ],\n  #testing : {\n    // TestCase Selection...\n  }\n}\n```\n\n#### \u003ca name=\"load-specs\"/\u003eProject Loading Specifications\nsmalltalkCI supports different formats for loading Smalltalk projects and for\neach, there is a loading specification.\nOne or more of those loading specifications have to be provided in the\n`#loading` list as part of a [`SmalltalkCISpec`](#SmalltalkCISpec).\nsmalltalkCI will load all specifications that are compatible with the selected\nSmalltalk image (specified via `#platforms`).\n\n##### SCIMetacelloLoadSpec\nA `SCIMetacelloLoadSpec` loads a project either via the specified Metacello\n[`#baseline`][mc_baseline] or the Metacello\n[`#configuration`][mc_configuration]. If a `#directory` is specified,\nthe project will be loaded using [FileTree][filetree]/[Metacello][metacello]\nfrom the given directory.\nOtherwise, it will be loaded from the specified `#repository`.\n\n```javascript\nSCIMetacelloLoadSpec {\n  #baseline : 'MyProject',                            // Define MC Baseline\n  #configuration : 'MyProject',                       // Alternatively, define MC Configuration\n  #directory : 'src',                                 // Path to source-code directory were are packages (i.e. 'packages' or 'src'), in case of packages are not on root\n  #failOn : [ #OCUndeclaredVariableWarning ],         // Fail build on provided list of Warnings\n  #ignoreImage : true,                                // If true, Metacello will force a load of a package, overriding a previously existing one\n  #load : [ 'default' ],                              // Define MC load attributes\n  #onConflict : #useIncoming,                         // When there is a conflict between loaded sources and incoming sources (can be #useIncoming|#useLoaded)\n  #onUpgrade : #useIncoming,                          // When loaded sources are an older version than incoming sources (can be #useIncoming|#useLoaded)\n  #onWarningLog : true,                               // Log Warning messages to Transcript\n  #platforms : [ #squeak, #pharo, #gemstone ],        // Define compatible platforms\n  #repository : 'http://smalltalkhub.com/mc/...',     // Alternatively, define MC repository\n  #usernameEnvVar : 'GITHUB_USER',                    // Environment variable containing the username used for authentication\n  #passwordEnvVar : 'GITHUB_TOKEN',                   // Environment variable containing the password used for authentication\n  #useLatestMetacello : true,                         // Upgrade Metacello before loading\n  #version : '1.0.0'                                  // Define MC version (for MC Configurations only)\n  #registerInIceberg : true                           // Pharo Only | Register the tested repository in Iceberg\n}\n```\n\n##### SCIMonticelloLoadSpec\nA `SCIMonticelloLoadSpec` loads a project with [Monticello][monticello]. It is\npossible to load the latest version of packages from a remote repository\n(`#packages`) or specific versions (`#versions`).\n\n```javascript\nSCIMonticelloLoadSpec {\n  #url : 'http://ss3.gemtalksystems.com/ss/...',      // Define URL for repository\n  #packages : ['MyProject-Core', 'MyProject-Tests'],  // Load packages and/or\n  #versions : ['MyProject-Core-aa.12'],               // Load specific versions\n  #usernameEnvVar : 'USERNAME_VAR',                   // Environment variable containing the username used for authentication\n  #passwordEnvVar : 'PASSWORD_VAR',                   // Environment variable containing the password used for authentication\n  #platforms : [ #squeak, #pharo, #gemstone ]         // Define compatible platforms\n}\n```\n\n##### SCIGoferLoadSpec\nA `SCIGoferLoadSpec` works similar to a `SCIMonticelloLoadSpec`, but uses\n[Gofer][gofer] on top of [Monticello][monticello] to load a project.\n\n```javascript\nSCIGoferLoadSpec {\n  #url : 'http://smalltalkhub.com/mc/...',            // Define URL for repository\n  #packages : ['MyProject-Core', 'MyProject-Tests'],  // Load packages and/or\n  #versions : ['MyProject-Core-aa.12'],               // Load specific versions\n  #usernameEnvVar : 'USERNAME_VAR',                   // Environment variable containing the username used for authentication\n  #passwordEnvVar : 'PASSWORD_VAR',                   // Environment variable containing the password used for authentication\n  #platforms : [ #squeak, #pharo, #gemstone ]         // Define compatible platforms\n}\n```\n\n#### TestCase Selection\n\nsmalltalkCI runs a list of TestCases during a build.\nBy default, smalltalkCI will use a list of all TestCases that it has loaded into\nthe image.\nIt is possible to adjust this list using the `#testing` slot.\nIn general, TestCases can be selected on class-level (`#classes`), on\ncategory-level (`#categories`), on package-level (`#packages`) and on\nproject-level (`#projects`, GemStone only).\n`#classes` expects a list of class name symbols, `#categories` and `#packages`\nexpect category names and prefixes or package names and prefixes respectively.\nThe default list can be replaced by a list of all TestCases that are present in\nthe image by setting `#allTestCases` to `true`.\nAdditionally, it is possible to add (`#include`) or remove (`#exclude`) classes\nfrom this list.\nThe list can also be specified explicitly which means that *only* these\nTestCases will run.\n\n```javascript\nSmalltalkCISpec {\n  ...\n  #testing : {\n    // Include specific TestCases\n    #include : {\n      #classes : [ #AnotherProjectTestCase ],\n      #categories : [ 'AnotherProject-Tests' ],\n      #packages : [ 'AnotherProject.*' ],\n      #projects : [ 'BaselineOfMyProject' ]\n    },\n\n    // Exclude specific TestCases from testing\n    #exclude : {\n      #classes : [ #AnotherProjectTestCase ],\n      #categories : [ 'AnotherProject-Tests' ],\n      #packages : [ 'AnotherProject.*' ],\n      #projects : [ 'ConfigurationOfMyOtherProject' ]\n    },\n\n    #allTestCases : true, // Run all TestCases in image\n\n    // Define TestCases explicitly\n    #classes : [ #MyProjectTestCase ],\n    #categories : [ 'MyProject-*' ],\n    #packages : [ 'MyProject.*' ],\n    #projects : [ 'BaselineOfMyProject' ],\n\n    // Other options\n    #defaultTimeout : 30, // In seconds (Squeak, and Pharo 6 or later)\n    #failOnSCIDeprecationWarnings : false, // Fail if a deprecated smalltalkCI API is used\n    #failOnZeroTests : false, // Pass builds that did not run any tests\n    #hidePassingTests : true, // Hide passing tests when printing to stdout\n    #serializeError: false // (default: true) Disable serialization of failing test case (e.g. with Fuel in Pharo)\n  }\n}\n```\n\n#### Coverage Testing\n\nSee [COVERAGE.md][coverage_docs].\n\n#### Custom Scripts\n\nIt is possible to run custom scripts before and after the loading and\ntesting phases (`preLoading`, `postLoading`, `preTesting`, `postTesting`).\nsmalltalkCI can *file in* single files, lists of files, and\n`SCICustomScript`s which can be used to only run certain scripts on certain\nplatforms.\n\n```javascript\nSmalltalkCISpec {\n  #preLoading : 'scripts/preLoading.st',\n  #loading : ...,\n  #postLoading : [\n    'scripts/postLoading1.st',\n    'scripts/postLoading2.st'\n  ],\n  #preTesting : SCICustomScript {\n    #path : 'scripts/preTesting.st',\n    #platforms : [ #squeak, #pharo, #gemstone ]\n  },\n  #testing : ...,\n  #postTesting : [\n    SCICustomScript {\n      #path : 'scripts/postTestingSqueak.st',\n      #platforms : [ #squeak ]\n    },\n    SCICustomScript {\n      #path : 'scripts/postTestingPharo.st',\n      #platforms : [ #pharo ]\n    }\n  ]\n}\n```\n\n### Command Line Options\n\nsmalltalkCI has a couple of command line options that can be useful for\ndebugging purposes or when used locally:\n\n```\nUSAGE: bin/smalltalkci [options] /path/to/project/your_smalltalk.ston\n\nThis program prepares Smalltalk images/vms, loads projects, and runs tests.\n\nOPTIONS:\n  --clean             Clear cache and delete builds.\n  -d | --debug        Enable debug mode.\n  -h | --help         Show this help text.\n  --headful           Open vm in headful mode and do not close image.\n  --image             Custom image for build (Squeak/Pharo).\n  --install           Install symlink to this smalltalkCI instance.\n  --print-env         Print all environment variables used by smalltalkCI\n  --no-color          Disable colored output\n  --no-tracking       Disable collection of anonymous build metrics (Travis CI \u0026 AppVeyor only).\n  -s | --smalltalk    Overwrite Smalltalk image selection.\n  --uninstall         Remove symlink to any smalltalkCI instance.\n  -v | --verbose      Enable 'set -x'.\n  --vm                Custom VM for build (Squeak/Pharo).\n\nEXAMPLE:\n  bin/smalltalkci -s \"Squeak64-trunk\" --headful /path/to/project/.smalltalk.ston\n```\n\n### Collection Of Anonymous Build Metrics\n\nsmalltalkCI collects anonymous build metrics (Smalltalk dialect, CI environment,\nbuild status, build duration) for public repositories when running on a supported\nCI platform. This helps to identify build errors caused by smalltalkCI updates\nand therefore helps to improve the service. It is possible to opt-out by using\nthe `--no-tracking` option.\n\n### Travis-specific Options\n\n#### Travis Timeouts\n\nJobs on Travis CI [timeout if they don't produce output for\nmore than 10 minutes][travisTimeout]. In the case of long-running tests, it\nis possible to increase this timeout by setting `$SMALLTALK_CI_TIMEOUT` in your\n`.travis.yml` to a value greater than 10:\n\n```yml\nenv:\n- SMALLTALK_CI_TIMEOUT=30\n```\n\nThe above sets the timeout to 30 minutes. Please note that Travis CI enforces\n[a total build timeout of 50 minutes][travisTimeout].\n\n#### Using A Different smalltalkCI Branch Or Fork\n\nBy default, the smalltalkCI master branch is used to perform a build. It is\npossible to select a different smalltalkCI branch or fork for testing/debugging\npurposes by adding the following to the `.travis.yml`:\n\n```yml\nsmalltalk_edge:\n  source: hpi-swa/smalltalkCI\n  branch: dev\n```\n\n\n## Contributing\n\nPlease feel free to [open issues][issues] or to\n[send pull requests][pullRequests] if you'd like to discuss an idea or a\nproblem.\n\n\n## Projects Using smalltalkCI\n\n*In alphabetical order:*\n\n- [@ba-st](https://github.com/ba-st):\n    [Buoy](https://github.com/ba-st/Buoy),\n    [RenoirSt](https://github.com/ba-st/RenoirSt),\n    [Willow](https://github.com/ba-st/Willow).\n- [@Cormas](https://github.com/cormas):\n    [Cormas](https://github.com/cormas/cormas).\n- [@dalehenrich](https://github.com/dalehenrich):\n    [obex](https://github.com/dalehenrich/obex),\n    [tode](https://github.com/dalehenrich/tode).\n- [@DuneSt](https://github.com/DuneSt):\n    [Heimdall](https://github.com/DuneSt/Heimdall),\n    [MaterialDesignLite](https://github.com/DuneSt/MaterialDesignLite),\n    [PrismCodeDisplayer](https://github.com/DuneSt/PrismCodeDisplayer).\n- [@HPI-BP2015H](https://github.com/HPI-BP2015H):\n    [squeak-parable](https://github.com/HPI-BP2015H/squeak-parable).\n- [@hpi-swa](https://github.com/hpi-swa):\n    [animations](https://github.com/hpi-swa/animations),\n    [Ohm-S](https://github.com/hpi-swa/Ohm-S),\n    [signals](https://github.com/hpi-swa/signals),\n    [Sandblocks](https://github.com/hpi-swa/sandblocks),\n    [Squot](https://github.com/hpi-swa/Squot),\n    [vivide](https://github.com/hpi-swa/vivide),\n    [widgets](https://github.com/hpi-swa/widgets).\n- [@hpi-swa-lab](https://github.com/hpi-swa-lab):\n    [Babylonian Programming/Smalltalk](https://github.com/hpi-swa-lab/babylonian-programming-smalltalk),\n    [Squeak by Example](https://github.com/hpi-swa-lab/SqueakByExample-english),\n    [Squeak Inbox Talk](https://github.com/hpi-swa-lab/squeak-inbox-talk).\n- [@HPI-SWA-Teaching](https://github.com/HPI-SWA-Teaching):\n    [Algernon-Launcher](https://github.com/HPI-SWA-Teaching/Algernon-Launcher),\n    [AutoTDD](https://github.com/hpi-swa-teaching/AutoTDD),\n    [Koans](https://github.com/hpi-swa-teaching/Koans),\n    [Morphic Testing Framework](https://github.com/hpi-swa-teaching/Morphic-Testing-Framework),\n    [Poppy Print](https://github.com/hpi-swa-teaching/poppy-print),\n    [SpreadSheetTool](https://github.com/hpi-swa-teaching/SpreadSheetTool),\n    [TelegramClient](https://github.com/hpi-swa-teaching/TelegramClient),\n    [SwaLint](https://github.com/hpi-swa-teaching/SwaLint).\n- [@LinqLover](https://github.com/LinqLover):\n    [create-image](https://github.com/LinqLover/create-image),\n    [SimulationStudio](https://github.com/LinqLover/SimulationStudio),\n    [TelegramBot](https://github.com/LinqLover/TelegramBot),\n    [XmasDecorations](https://github.com/LinqLover/XmasDecorations).\n- [@marianopeck](https://github.com/marianopeck):\n    [OSSubprocess](https://github.com/marianopeck/OSSubprocess),\n    [FFICHeaderExtractor](https://github.com/marianopeck/FFICHeaderExtractor).\n- [@Metacello](https://github.com/Metacello):\n    [metacello](https://github.com/Metacello/metacello).\n- [@newapplesho](https://github.com/newapplesho):\n    [aws-sdk-smalltalk](https://github.com/newapplesho/aws-sdk-smalltalk),\n    [elasticsearch-smalltalk](https://github.com/newapplesho/elasticsearch-smalltalk),\n    [mixpanel-smalltalk](https://github.com/newapplesho/mixpanel-smalltalk),\n    [OpenExchangeRates](https://github.com/newapplesho/oxr-smalltalk),\n    [pardot-smalltalk](https://github.com/newapplesho/pardot-smalltalk),\n    [salesforce-smalltalk](https://github.com/newapplesho/salesforce-smalltalk),\n    [sendgrid-smalltalk](https://github.com/newapplesho/sendgrid-smalltalk),\n    [twilio-smalltalk](https://github.com/newapplesho/twilio-smalltalk).\n- [@ObjectProfile](https://github.com/ObjectProfile):\n    [Roassal2](https://github.com/ObjectProfile/Roassal2).\n- [@OpenPonk](https://github.com/OpenPonk):\n    [borm-editor](https://github.com/OpenPonk/borm-editor),\n    [borm-model](https://github.com/OpenPonk/borm-model),\n    [class-editor](https://github.com/OpenPonk/class-editor),\n    [demo-editor](https://github.com/OpenPonk/demo-editor),\n    [fsm-editor](https://github.com/OpenPonk/fsm-editor).\n- [@OpenSmalltalk](https://github.com/OpenSmalltalk):\n    [opensmalltalk-vm](https://github.com/OpenSmalltalk/opensmalltalk-vm).\n- [@pharo-project](https://github.com/pharo-project):\n    [pharo-project-proposals](https://github.com/pharo-project/pharo-project-proposals).\n- [@PolyMathOrg](https://github.com/PolyMathOrg):\n    [PolyMath](https://github.com/PolyMathOrg/PolyMath).\n- [@SeasideSt](https://github.com/SeasideSt):\n    [Grease](https://github.com/SeasideSt/Grease),\n    [Parasol](https://github.com/SeasideSt/Parasol),\n    [Seaside](https://github.com/SeasideSt/Seaside).\n- [@SergeStinckwich](https://github.com/SergeStinckwich):\n    [PlayerST](https://github.com/SergeStinckwich/PlayerST).\n- [@squeak-smalltalk](https://github.com/squeak-smalltalk):\n    [squeak-app](https://github.com/squeak-smalltalk/squeak-app),\n    [squeak-filesystem](https://github.com/squeak-smalltalk/squeak-filesystem),\n    [squeak-ston](https://github.com/squeak-smalltalk/squeak-ston),\n    [squeak-tonel](https://github.com/squeak-smalltalk/squeak-tonel).\n- [@theseion](https://github.com/theseion):\n    [Fuel](https://github.com/theseion/Fuel).\n- [@Uko](https://github.com/Uko):\n    [GitHubcello](https://github.com/Uko/GitHubcello),\n    [QualityAssistant](https://github.com/Uko/QualityAssistant),\n    [Renraku](https://github.com/Uko/Renraku).\n- [@UMMISCO](https://github.com/UMMISCO/):\n    [Kendrick](https://github.com/UMMISCO/kendrick).\n- [@zecke](https://github.com/zecke):\n    [osmo-smsc](https://github.com/zecke/osmo-smsc).\n- [More Projects...][more_projects]\n\n*Feel free to [send a PR][pullRequests] to add your Smalltalk project to the\nlist. Please add [`[ci skip]`][ci_skip] to your commit message.*\n\n\n[coverage_docs]: https://github.com/hpi-swa/smalltalkCI/blob/master/docs/COVERAGE.md\n[coveralls_b]: https://coveralls.io/repos/github/hpi-swa/smalltalkCI/badge.svg?branch=master\n[coveralls_url]: https://coveralls.io/github/hpi-swa/smalltalkCI?branch=master\n\n[appveyor]: https://www.appveyor.com/\n[bsis]: http://docs.travis-ci.com/user/migrating-from-legacy/#Builds-start-in-seconds\n[build_matrix_appveyor]: https://www.appveyor.com/docs/build-configuration/#build-matrix\n[build_matrix_travis]: https://docs.travis-ci.com/user/customizing-the-build/#Build-Matrix\n[builderCI]: https://github.com/dalehenrich/builderCI\n[cbi]: http://docs.travis-ci.com/user/workers/container-based-infrastructure/\n[ci_skip]: https://docs.travis-ci.com/user/customizing-the-build/#Skipping-a-build\n[clone]: https://help.github.com/articles/cloning-a-repository/\n[download]: https://github.com/hpi-swa/smalltalkCI/archive/master.zip\n[esug]: http://www.esug.org/\n[esug_ita16]: https://user-images.githubusercontent.com/2368856/91981109-a15e2d80-ed28-11ea-88bb-36b5f0b0ab95.png\n[esug_ita16_b]: https://user-images.githubusercontent.com/2368856/91981067-8f7c8a80-ed28-11ea-8fab-db2e96a28b8c.png\n[esug_logo]: https://user-images.githubusercontent.com/2368856/91981051-88ee1300-ed28-11ea-8eb1-3f1ef5d07c4a.png\n[filetree]: https://github.com/dalehenrich/filetree\n[gemstone]: https://gemtalksystems.com/\n[git_bash]: https://gitforwindows.org/\n[github_action]: https://github.com/marketplace/actions/setup-smalltalkci\n[github_action_b]: https://img.shields.io/github/actions/workflow/status/hpi-swa/smalltalkCI/main.yml?branch=master\n[github_action_url]: https://github.com/hpi-swa/smalltalkCI/actions\n[github_actions]: https://github.com/features/actions\n[gitlab_ci_cd]: https://about.gitlab.com/topics/ci-cd\n[gofer]: http://www.lukas-renggli.ch/blog/gofer\n[gs]: https://github.com/hpi-swa/smalltalkCI/issues/28\n[gtoolkit]: https://gtoolkit.com\n[issues]: https://github.com/hpi-swa/smalltalkCI/issues\n[mc_baseline]: https://github.com/dalehenrich/metacello-work/blob/master/docs/GettingStartedWithGitHub.md#create-baseline\n[mc_configuration]: https://github.com/dalehenrich/metacello-work/blob/master/docs/GettingStartedWithGitHub.md#create-configuration\n[metacello]: https://github.com/dalehenrich/metacello-work\n[monticello]: http://www.wiresong.ca/monticello/\n[moose]: http://moosetechnology.org/\n[more_projects]: https://github.com/search?l=STON\u0026q=SmalltalkCISpec\u0026ref=advsearch\u0026type=Code\n[pharo]: http://pharo.org/\n[pullRequests]: https://help.github.com/articles/using-pull-requests/\n[squeak]: http://squeak.org/\n[ston]: https://github.com/svenvc/ston/blob/master/ston-paper.md#smalltalk-object-notation-ston\n[templates]: https://github.com/hpi-swa/smalltalkCI#templates\n[tonel]: https://github.com/pharo-vcs/tonel\n[travisCI]: http://travis-ci.org/\n[travis_howto]: https://docs.travis-ci.com/user/tutorial/\n[travisTimeout]: https://docs.travis-ci.com/user/customizing-the-build/#Build-Timeouts\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fhpi-swa%2Fsmalltalkci","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fhpi-swa%2Fsmalltalkci","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fhpi-swa%2Fsmalltalkci/lists"}