{"id":20788946,"url":"https://github.com/bfgroup/ci_playground","last_synced_at":"2026-03-11T13:41:26.911Z","repository":{"id":104906608,"uuid":"252350230","full_name":"bfgroup/ci_playground","owner":"bfgroup","description":"Playground for Cloud CI development for C++","archived":false,"fork":false,"pushed_at":"2021-03-12T14:35:27.000Z","size":238,"stargazers_count":24,"open_issues_count":0,"forks_count":3,"subscribers_count":2,"default_branch":"master","last_synced_at":"2025-05-05T19:04:10.199Z","etag":null,"topics":["appveyor","appveyor-ci","azure-pipelines","c-plus-plus","ci","circleci","cirrus-ci","clang","cplusplus","cpp","gcc","mingw","mingw-w64","msvc","semaphore-ci","semaphoreci","travis-ci","visual-studio","xcode"],"latest_commit_sha":null,"homepage":"","language":"Shell","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"bsl-1.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/bfgroup.png","metadata":{"files":{"readme":"README.adoc","changelog":null,"contributing":null,"funding":null,"license":"LICENSE.txt","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,"zenodo":null}},"created_at":"2020-04-02T03:54:52.000Z","updated_at":"2024-03-01T17:32:00.000Z","dependencies_parsed_at":"2023-05-11T00:15:48.226Z","dependency_job_id":null,"html_url":"https://github.com/bfgroup/ci_playground","commit_stats":null,"previous_names":[],"tags_count":3,"template":true,"template_full_name":null,"purl":"pkg:github/bfgroup/ci_playground","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bfgroup%2Fci_playground","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bfgroup%2Fci_playground/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bfgroup%2Fci_playground/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bfgroup%2Fci_playground/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/bfgroup","download_url":"https://codeload.github.com/bfgroup/ci_playground/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bfgroup%2Fci_playground/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":30382674,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-03-11T12:49:11.341Z","status":"ssl_error","status_checked_at":"2026-03-11T12:46:41.342Z","response_time":84,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.6:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"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","appveyor-ci","azure-pipelines","c-plus-plus","ci","circleci","cirrus-ci","clang","cplusplus","cpp","gcc","mingw","mingw-w64","msvc","semaphore-ci","semaphoreci","travis-ci","visual-studio","xcode"],"created_at":"2024-11-17T15:18:21.174Z","updated_at":"2026-03-11T13:41:26.905Z","avatar_url":"https://github.com/bfgroup.png","language":"Shell","funding_links":[],"categories":[],"sub_categories":[],"readme":"= Continuous Integration Playground\n\nThis is a \"playground\" for testing out basic methods to get Cloud CI systems\nworking with minimal effort. Not just getting any CI working, but specifically\ngetting C++ to work in CI.\n\n== Goals\n\nThis project is of limited scope. In particular it follows these goals:\n\n*C+\\+*: Sufficient support to install and use a C\\++ toolset to compile and\nrun C++ programs.\n\n*Free*: We only consider services that are available to use for free to some\ncapacity. This usually means that the compute resources and features are\nlimited.\n\n*Simple*: The configurations are as simple as possible to get specific toolsets\nworking and nothing more. This means there is no build system setup. And the\nfew small scripts used are there to minimize duplication.\n\n*DRY*: The configurations try to avoid repeated definitions as much as is\npossible within the restrictions of the particular service.\n\n== General Configuration\n\nAll the included services are configured through configuration files included\nin the source repository. Consult the individual service descriptions below\nfor what those files are.\n\n=== Setup Scripts\n\nIn order to avoid duplication we use some minimal install and setup scripts\ninstead of including all the commands in the service configurations themselves.\n\nlink:.ci_playground/linux-cxx-install.sh[\u003croot\u003e/.ci_playground/linux-cxx-install.sh]::\n\tWill install a set of packages indicated in the service configuration\n\tenvironment variable `PACKAGES`. That can be any set of packages, i.e.\n\tboth compilers and support packages. Additionally it can set up the LLVM\n\tAPT repository through `LLVM_OS` and `LLVM_VER` environment variables.\n\nlink:.ci_playground/macos-xcode-install.sh[\u003croot\u003e/.ci_playground/macos-xcode-install.sh]::\n\tFinds the indicated Xcode, in the `XCODE_VERSION` environment variable,\n\tpresent in the `/Applications` directory and sets it as the active Xcode.\n\tAlternatively, uses `xcode-install` tool to install and/or setup Xcode as\n\tindicated in the `XCODE_VERSION` environment variable. See below for\n\tadditional setup needed for the install to work.\n\nlink:.ci_playground/windows-msvc-setup.cmd[\u003croot\u003e/.ci_playground/windows-msvc-setup.cmd]::\n\tUses the link:https://github.com/Microsoft/vswhere[`vswhere`] utility to\n\tfind the indicated, in the `VSWHERE_VERSION` or `VSWHERE_LEGACY`\n\tenvironment variables, and to run the `vcvarsall.bat` setup script. The\n\t`vcvarsall.bat` script from Visual Studio will set up the execution\n\tenvironment for calling `cl.exe` to compile directly.\n\n=== macOS Xcode\n\nSetting up Xcode is simply a matter of setting the `XCODE_VERSION` env variable\nto the version to be tested. The setup script will search through the\npre-installed Xcode installations in the `/Applications` directory.\n\nOptionally there's support for using the great work of the Fastlane developers\nand the https://github.com/xcpretty/xcode-install[`xcode-install`] tool. It\nmakes setting up consistent Xcode installs easy. Additionally it makes it\npossible to fresh install a full Xcode and command line tools.\n\nWithout any additional configuration we use `xcode-install` to select which\nXcode version to use. But, by setting up Apple Developer credentials we can use\nit to download and install additional Xcode versions (within the limits of\nmacOS and Xcode compatibility constraints). The setup amounts to setting two\nenvironment variables:\n\n`XCODE_INSTALL_USER`:: User name for Apple Developer account.\n`XCODE_INSTALL_PASSWORD`:: Password, or token, for the account.\n\nCheck below for how those variables are defined for specific services.\n\nWARNING: The support for using `xcode-install` is no longer tested as Apple\nhas made it almost impossible to access their services within automation\nprograms.\n\n== Services\n\nThe cloud Ci services vary in features from each other but generally they all\nprovide equivalent free services. One big difference though is what platforms\nthey include in their free offerings. Universally, Linux resources are freely\navailable. Some offer Windows resources to some extent. Additionally some\noffer macOS resources, but usually this is behind a paid subscription. We also\nonly include services that support the GitHub revision control service.\n\nBelow we only discuss the resources available in the free tiers of the\nservices.\n\n=== https://www.appveyor.com/[AppVeyor] image:https://ci.appveyor.com/api/projects/status/ig1acmghu4we5be2/branch/master?svg=true[\"Build Status\", link=\"https://ci.appveyor.com/project/bfgroup/ci-playground\"]\n\nConfiguration::\n\tlink:appveyor.yml[`\u003croot\u003e/appveyor.yml`]\n\nAppVeyor provides CI resources for Linux, macOS, and Windows. For Windows they\nprovide a large array of pre-configured tools. For macOS, and hence Xcode, to\nmake use of the `xcode-install` tool you will need to create a\nhttps://www.appveyor.com/docs/build-configuration/#secure-variables[secure value]\nfor both `XCODE_INSTALL_USER` and `XCODE_INSTALL_PASSWORD`. And place the\nsecure values in the `appveyor.yml` file.\n\n=== https://azure.microsoft.com/en-us/services/devops/pipelines/[Azure Pipelines] image:https://dev.azure.com/bfgroup/CI%20Playground/_apis/build/status/bfgroup.ci_playground?branchName=master[\"Build Status\", link=\"https://dev.azure.com/bfgroup/CI%20Playground/_build/latest?definitionId=4\u0026branchName=master\"]\n\nConfiguration::\n\tlink:azure-pipelines.yml[`\u003croot\u003e/azure-pipelines.yml`]\n\nMicrosoft Azure Pipelines offers Linux, macOS, and Windows resources. For using\n`xcode-install` Azure Pipelines doesn't provide for a direct way of setting the\ncredential environment variables we need. Instead we need to define\nhttps://docs.microsoft.com/en-us/azure/devops/pipelines/process/variables?view=azure-devops\u0026tabs=yaml%2Cbatch#secret-variables[secret variables] that we use to set the\nenvironment variables from. Define `DEV_APPLE_USER` and `DEV_APPLE_PASSWORD`\nsecret variables corresponding to `XCODE_INSTALL_USER` and `XCODE_INSTALL_PASSWORD`.\n\n=== https://circleci.com/[CircleCI] image:https://circleci.com/gh/bfgroup/ci_playground/tree/master.svg?style=shield[\"Build Status\", link=\"https://circleci.com/gh/bfgroup/ci_playground/tree/master\"]\n\nConfiguration::\n\tlink:.circleci/config.yml[`\u003croot\u003e/.circleci/config.yml`]\n\nCircleCI only gives us only Linux systems for free. Having the configuration\nfile is the only setup needed for CircleCI.\n\n=== https://cirrus-ci.org/[Cirrus CI] image:https://api.cirrus-ci.com/github/bfgroup/ci_playground.svg?branch=master[\"Build Status\", link=\"https://cirrus-ci.com/github/bfgroup/ci_playground\"]\n\nOf the current cloud CI offerings Cirrus CI is different in that it offers\nFreeBSD public VMs. Cirrus CI provides \"community clusters\" that also include\nLinux, macOS, and Windows. Unfortunately getting macOS Xcode and Visual Studio\ninstalled is currently not possible.\n\nConfiguration::\n\tlink:.cirrus.yml[`\u003croot\u003e/.cirrus.yml`]\n\n=== https://drone.io/[Drone] image:https://cloud.drone.io/api/badges/bfgroup/ci_playground/status.svg?ref=refs/heads/master[\"Build Status\", link=\"https://cloud.drone.io/bfgroup/ci_playground\"]\n\nConfiguration::\n\tlink:.drone.star[`\u003croot\u003e/.drone.star`]\n\nFree cloud access is available for Linux on Drone. There are a few ways to go\nwith the configuration in Drone. The main configuration, like others, is done\nthrough a yaml file (`\u003croot\u003e/.drone.yml`). But for our use case, where we want\nto do the same thing for many different toolsets, it means lots of duplication\nas it has no built-in support for DRY. Drone does support alternate,\nprogrammatic, methods for specifying the configuration with either\nlink:https://docs.drone.io/pipeline/scripting/jsonnet/[Jsonnet] or\nlink:https://docs.drone.io/pipeline/scripting/starlark/[Starlark] scripting.\nFor this we use a Starlark script to create all the toolset variations. To\nmake it work one needs to point Drone to the alternate configuration script\nin the project settings.\n\n=== https://help.github.com/en/actions[GitHub Actions] image:https://github.com/bfgroup/ci_playground/workflows/C++%20Tooling/badge.svg?branch=master\u0026event=push[\"Build Status\", link=\"https://github.com/bfgroup/ci_playground/actions\"]\n\nConfiguration::\n\tlink:.github/workflows/cxx_tooling.yml[`\u003croot\u003e/.github/workflows/cxx_tooling.yml`]\n\nGitHub Actions provides Linux, macOS, and Windows host resources to test with.\nThere isn't any setup past creating at least one \"workflow\" configuration file.\nMultiple workflows are supported if you want to segregate your builds. For our\ncase we only need the one configuration file. To use `xcode-install` GitHub\nActions provides a way to define account global link:https://help.github.com/en/actions/configuring-and-managing-workflows/creating-and-storing-encrypted-secrets[secrets]\nthat can be extracted in the YAML configuration. In our case we define\n`dev_apple_user` and `dev_apple_password` secret variables\ncorresponding to `XCODE_INSTALL_USER` and `XCODE_INSTALL_PASSWORD` in your\naccount.\n\n=== https://semaphoreci.com/[Semaphore] image:https://bfgroup.semaphoreci.com/badges/ci_playground/branches/master.svg?style=shields[\"Build Status\", link=\"https://bfgroup.semaphoreci.com/branches/9a7e94b0-124b-47b8-a0e3-3d633533753a\"]\n\nConfiguration::\n\tlink:.semaphore/semaphore.yml[`\u003croot\u003e/.semaphore/semaphore.yml`]\n\nSemaphore gives us Linux and macOS free build capabilities. The configuration\nspecification is a bit different than other CI systems in some ways though.\nIt doesn't support any built-in way to reuse setups (i.e. to stay DRY). And\nthe usual YAML method of using the `\u003c\u003c` map merge key is not allowed as the\nconfiguration is strictly checked against a schema. For our case we create\nsome dummy (i.e. skipped) blocks that we can use to apply the `*name` YAML\nexpansion with. Which reduces much of the repetition. To use `xcode-install`\none can define global account \"Secrets\" in the web UI for encrypted\nenvironment variables.\nDefine `DEV_APPLE_USER` and `DEV_APPLE_PASSWORD` encrypted variables\ncorresponding to `XCODE_INSTALL_USER` and `XCODE_INSTALL_PASSWORD` in your\naccount as a `dev-apple` secret.\n\n=== https://travis-ci.com/[Travis CI] image:https://travis-ci.com/bfgroup/ci_playground.svg?branch=master[\"Build Status\", link=\"https://travis-ci.com/bfgroup/ci_playground\"]\n\nConfiguration::\n\tlink:.travis.yml[`\u003croot\u003e/.travis.yml`]\n\nTravis CI provides Linux, macOS, and experimental Windows support. Although\nwe don't have Windows as part of our configuration yet (soon). The Travis CI\nconfiguration is perhaps the simples of all the CI systems. As one can\nprecisely define each variation to build individually. For using\n`xcode-install` Travis CI allows one to set encrypted environment variables.\nDefine `DEV_APPLE_USER` and `DEV_APPLE_PASSWORD` encrypted variables\ncorresponding to `XCODE_INSTALL_USER` and `XCODE_INSTALL_PASSWORD` in your\nproject.\n\n== Copyright\n\nThis work is Copyright René Ferdinand Rivera Morell 2020-2021. And distributed, and subject to,\nthe link:LICENSE.txt[Boost Software License, Version 1.0].\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbfgroup%2Fci_playground","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fbfgroup%2Fci_playground","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbfgroup%2Fci_playground/lists"}