{"id":16021776,"url":"https://github.com/ararslan/cirrusci.jl","last_synced_at":"2026-03-17T18:36:33.329Z","repository":{"id":45854450,"uuid":"163794629","full_name":"ararslan/CirrusCI.jl","owner":"ararslan","description":"Julia setup for testing on Cirrus CI","archived":false,"fork":false,"pushed_at":"2024-10-08T22:59:26.000Z","size":47,"stargazers_count":10,"open_issues_count":3,"forks_count":4,"subscribers_count":4,"default_branch":"master","last_synced_at":"2025-10-04T19:44:54.380Z","etag":null,"topics":["arm","ci","cirrus-ci","freebsd","julia","linux","macos","musl","testing-tools"],"latest_commit_sha":null,"homepage":"","language":"Shell","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"bsd-2-clause","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/ararslan.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":"2019-01-02T04:39:14.000Z","updated_at":"2024-10-08T22:59:28.000Z","dependencies_parsed_at":"2025-01-01T03:32:24.575Z","dependency_job_id":null,"html_url":"https://github.com/ararslan/CirrusCI.jl","commit_stats":{"total_commits":32,"total_committers":4,"mean_commits":8.0,"dds":0.15625,"last_synced_commit":"323874814a8473aacd8d6c3a44ab5f488ec7cf03"},"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/ararslan/CirrusCI.jl","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ararslan%2FCirrusCI.jl","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ararslan%2FCirrusCI.jl/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ararslan%2FCirrusCI.jl/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ararslan%2FCirrusCI.jl/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/ararslan","download_url":"https://codeload.github.com/ararslan/CirrusCI.jl/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ararslan%2FCirrusCI.jl/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":30628419,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-03-17T17:32:55.572Z","status":"ssl_error","status_checked_at":"2026-03-17T17:32:38.732Z","response_time":56,"last_error":"SSL_read: 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":["arm","ci","cirrus-ci","freebsd","julia","linux","macos","musl","testing-tools"],"created_at":"2024-10-08T18:05:43.432Z","updated_at":"2026-03-17T18:36:33.317Z","avatar_url":"https://github.com/ararslan.png","language":"Shell","funding_links":[],"categories":[],"sub_categories":[],"readme":"# CirrusCI.jl\n\n[![Cirrus](https://api.cirrus-ci.com/github/ararslan/CirrusCI.jl.svg?branch=master)](https://cirrus-ci.com/github/ararslan/CirrusCI.jl)\n\nThis repository contains utilities for using Julia on [Cirrus CI](https://cirrus-ci.org).\nCirrus is unique in the breadth of its support for systems and architectures.\nNote that while Cirrus supports many systems, these utilities have only been validated to\nwork with FreeBSD, macOS, and Linux builds with Julia binaries matching the host's native\narchitecture.\nThat is, neither Windows nor using 32-bit Julia on a 64-bit host are currently supported.\nFor the time being, users are encouraged to continue to use\n[GitHub Actions](https://github.com/julia-actions/setup-julia) in such cases, though\nsupport here is planned for the future.\n\n## Usage\n\nCreate a file called `.cirrus.yml` in the root directory of your Julia project and populate\nit with one of the following templates, modifying as you see fit.\n\n### One System\n\nThis example uses FreeBSD 14.3-RELEASE and retrieves the installer script using the\nFreeBSD-specific command `fetch`.\nWhen using this template for a different system, replace both the instance and the command\nused for downloading the installer.\nFor Linux-based systems, `wget` is likely to be available by default, and `curl` should\nbe present on macOS.\n\n```yaml\nfreebsd_instance:\n  image_family: freebsd-14-3\ntask:\n  name: FreeBSD\n  env:\n    matrix:\n      - JULIA_VERSION: lts\n      - JULIA_VERSION: 1\n      - JULIA_VERSION: nightly\n  allow_failures: $JULIA_VERSION == 'nightly'\n  install_script:\n    - sh -c \"$(fetch https://raw.githubusercontent.com/ararslan/CirrusCI.jl/master/bin/install.sh -o -)\"\n  build_script:\n    - cirrusjl build\n  test_script:\n    - cirrusjl test\n  coverage_script:\n    - cirrusjl coverage codecov\n```\n\n### Multiple Systems, Same Julia Versions\n\nThe desired images can be listed in a `matrix`.\nThis example builds on FreeBSD and on Ubuntu Linux with a 64-bit ARM processor.\nA more complex `install_script` is required since there is no one command that can be\nassumed to be available across platforms.\nWhen editing this template to suit your needs, note that you may be able to simplify the\n`install_script` if you know, for example, that `curl` is available in all images you're\nusing.\nIn the example below, we're checking for `apt` on Linux in order to handle the lack of\na downloader on the ARM Ubuntu containers, and looking for Linux specifically because\nM1 Macs inexplicably have a program called `apt`.\n\n```yaml\ntask:\n  matrix:\n    - name: FreeBSD\n      freebsd_instance:\n        image_family: freebsd-14-3\n    - name: Linux ARMv8\n      arm_container:\n        image: ubuntu:latest\n  env:\n    matrix:\n      - JULIA_VERSION: lts\n      - JULIA_VERSION: 1\n      - JULIA_VERSION: nightly\n  allow_failures: $JULIA_VERSION == 'nightly'\n  install_script: |\n    URL=\"https://raw.githubusercontent.com/ararslan/CirrusCI.jl/master/bin/install.sh\"\n    if [ \"$(uname)\" = \"Linux\" ] \u0026\u0026 command -v apt; then\n        apt update\n        apt install -y curl\n    fi\n    if command -v curl; then\n        sh -c \"$(curl ${URL})\"\n    elif command -v wget; then\n        sh -c \"$(wget ${URL} -q -O-)\"\n    elif command -v fetch; then\n        sh -c \"$(fetch ${URL} -o -)\"\n    fi\n  build_script:\n    - cirrusjl build\n  test_script:\n    - cirrusjl test\n  coverage_script:\n    - cirrusjl coverage codecov\n```\n\n### Multiple Systems, Different Julia Versions\n\nThis example builds on FreeBSD with Julia 1.6, latest stable, and nightly; Alpine Linux\nwith latest stable only; and macOS M1 with latest stable only.\n\n```yaml\ntask:\n  matrix:\n    - name: FreeBSD\n      freebsd_instance:\n        image_family: freebsd-14-3\n      env:\n        matrix:\n          - JULIA_VERSION: lts\n          - JULIA_VERSION: 1\n          - JULIA_VERSION: nightly\n    - name: Linux musl\n      container:\n        image: alpine:latest\n      env:\n        - JULIA_VERSION: 1\n    - name: macOS M1\n      macos_instance:\n        image: ghcr.io/cirruslabs/macos-sonoma-base:latest\n      env:\n        - JULIA_VERSION: 1\n  allow_failures: $JULIA_VERSION == 'nightly'\n  install_script: |\n    URL=\"https://raw.githubusercontent.com/ararslan/CirrusCI.jl/master/bin/install.sh\"\n    if [ \"$(uname)\" = \"Linux\" ] \u0026\u0026 command -v apt; then\n        apt update\n        apt install -y curl\n    fi\n    if command -v curl; then\n        sh -c \"$(curl ${URL})\"\n    elif command -v wget; then\n        sh -c \"$(wget ${URL} -q -O-)\"\n    elif command -v fetch; then\n        sh -c \"$(fetch ${URL} -o -)\"\n    fi\n  build_script:\n    - cirrusjl build\n  test_script:\n    - cirrusjl test\n  coverage_script:\n    - cirrusjl coverage codecov\n```\n\n### Code Coverage\n\nCollection of code coverage is supported on all platforms.\nSubmission of coverage information to [Codecov](https://codecov.io) is supported using\nCodecov's official command line interface, which should theoretically work on any platform.\nSubmission to [Coveralls](https://coveralls.io) is not supported, but requesting it does\nnot affect the build status.\n\n\u003e [!NOTE]\n\u003e `cirrusjl coverage codecov` can be very slow on FreeBSD because it needs to compile the\n\u003e Codecov CLI from source in every run. I've seen this take roughly 6-7 minutes. Most\n\u003e other platforms can use Codecov's prebuilt binaries, in which case this step takes just\n\u003e a few seconds.\n\n### Projects in Subdirectories\n\nBy default, CirrusCI.jl will look for your Julia project in the root directory of the\nrepository.\nFor projects that reside in a subdirectory, for example as part of a monorepo, the\nenvironment variable `JULIA_PROJECT_SUBDIR` can be used to specify the path to the project.\n\n## Overview\n\nRefer to the Cirrus documentation for information on the available execution environments.\nCirrusCI.jl has been tested on a variety of systems not available from other CI providers,\nincluding FreeBSD, Linux with musl, Linux with glibc on aarch64, and macOS M-series.\nNote that certain combinations of platforms and Julia versions may be unavailable based on\nwhen support was added to Julia.\nFor example, macOS M1 requires at least Julia 1.7 (1.8 if you want it to work) and Linux\nwith musl requires at least Julia 1.6 but is unavailable after 1.12.0-rc1.\nIn all cases, Julia 0.7 or later is required for use with CirrusCI.jl.\n\nThe version of Julia to install is specified by the environment variable `JULIA_VERSION`,\nwhich can be set in a `matrix` (as in the templates) to run parallel builds with different\nversions of Julia.\nTo use different sets of Julia versions for different platforms, set `env` individually\nin each platform matrix entry.\nThe following formats are recognized for `JULIA_VERSION`:\n\n- `1`: The most recent stable 1.x release. As of this writing, this is equivalent to `1.11`.\n- `1.x` where `x` is a number: The latest patch release in the 1.x series. For example,\n  specifying `1.6` will download v1.6.7.\n- `1.x.y` where `x` and `y` are numbers, optionally followed by a prerelease specifier:\n  The exact version specified. For example, `1.6.7` downloads v1.6.7, `1.11.0-rc4` downloads\n  v1.11.0-rc4, and `6.9.420` will error.\n- `lts`: Current long-term support release. Currently equivalent to `1.10`.\n- `nightly`: Latest nightly build.\n\nConditional build failures can be permitted using `allow_failures`.\n\nThe `cirrusjl` command invokes Julia with the proper options based on whether the project\nbeing tested has a Project.toml file.\n(This is really only useful for ancient Julia packages which have somehow managed to avoid\nswitching from REQUIRE to Project.toml.)\nIt features three subcommands:\n\n* `build` installs the current package and runs `Pkg.build`,\n* `test` runs the package's tests with bounds checking enabled, and\n* `coverage` collects coverage information and optionally submits it to Codecov and/or Coveralls.\n\nIn turn, `cirrusjl coverage` takes 1 or 2 arguments, which must be `codecov` or `coveralls`\nin any order, specifying the provider(s) to which coverage information is submitted.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fararslan%2Fcirrusci.jl","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fararslan%2Fcirrusci.jl","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fararslan%2Fcirrusci.jl/lists"}