# Omnibus Toolchain

[![Pipeline Status](https://gitlab.com/cinc-project/distribution/omnibus-toolchain/badges/main/pipeline.svg)](https://gitlab.com/cinc-project/distribution/omnibus-toolchain/-/pipelines)

Omnibus Toolchain is a native platform package containing the build
toolchain (compilers, Ruby, git, GNU userland) used by every Cinc
omnibus build. It is maintained by the [Cinc Project](https://cinc.sh)
as a community fork of [chef/omnibus-toolchain](https://github.com/chef/omnibus-toolchain).

The package is consumed indirectly: it is installed by the
[cinc-omnibus](https://gitlab.com/cinc-project/cinc-omnibus-cookbook)
cookbook into Cinc's build host images
([cincproject/omnibus-*](https://gitlab.com/cinc-project/docker-images))
and then sourced via `/home/omnibus/load-omnibus-toolchain.sh` from
each downstream build (cinc-workstation, cinc-server, cinc-auditor, …).

## Supported Platforms

Cinc Workstation's build matrix dictates the toolchain matrix:

| Family          | Versions                            | Architectures            |
|-----------------|-------------------------------------|--------------------------|
| Amazon Linux    | 2023                                | x86_64                   |
| AlmaLinux/RHEL  | 8, 9, 10                            | x86_64, aarch64          |
| Debian          | 12, 13                              | x86_64, riscv64 (13)     |
| Rocky Linux     | 8, 9, 10                            | x86_64                   |
| Ubuntu          | 20.04, 22.04, 24.04, 26.04          | x86_64, riscv64 (24.04)  |
| macOS           | 14, 15, 26                          | x86_64, aarch64          |
| FreeBSD         | 13, 14                              | x86_64                   |
| Windows         | 2016+                               | x64                      |

Less-common architectures (ppc64le on EL8/9/10, s390x on EL9/10) are
also produced to cover Cinc Server and Cinc Auditor build needs.

## Building

The package is built end-to-end by GitLab CI; see [`.gitlab-ci.yml`](.gitlab-ci.yml)
and the [`ci/`](ci/) templates. To reproduce a build locally:

```shell
./build/build.sh
```

The script provisions Ruby via RVM, installs gem deps, and runs
`bundle exec omnibus build omnibus-toolchain`. Built packages land
under `pkg/`.

To clean up:

```shell
bundle exec omnibus clean omnibus-toolchain
```

Adding `--purge` removes `/opt/omnibus-toolchain` and `/var/cache/omnibus/pkg`
in addition to the build tree.

## Releases

- Versioning: SemVer (`MAJOR.MINOR.PATCH`) tracked in [`VERSION`](VERSION).
- Push to `main` opens (or refreshes) a release MR via the
  `cinc-project/ci-tools` `changelog-release-mr` component. The MR bumps
  `VERSION` and prepends a new [`CHANGELOG.md`](CHANGELOG.md) entry
  generated from conventional commits with [git-cliff](https://git-cliff.org/).
  Bump magnitude comes from labels on the source MR
  (`version::patch` / `version::minor` / `version::major`, default patch).
- When the release MR merges, the `changelog-tag-release` component
  creates and pushes the matching tag.
- Release builds are triggered manually from the GitLab UI on the
  resulting tag.

## Contributing

Contributions are welcome via merge requests on
[GitLab](https://gitlab.com/cinc-project/distribution/omnibus-toolchain).

- Use [Conventional Commits](https://www.conventionalcommits.org/) for
  user-facing changes — the commit type drives automatic version bumps.
- Sign off your commits (`git commit --signoff`) for DCO compliance.

## License

```text
Copyright 2015-2026 Chef Software, Inc.
Copyright 2026 Cinc Project
Copyright 2026 Oregon State University

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

    http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
```
