Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
66 commits
Select commit Hold shift + click to select a range
55d0303
Fix runs-on runner for arm64
strombetta Jan 10, 2026
e9c31c6
Create Makefile.help file and recipe
strombetta Jan 18, 2026
adc9385
Fix help indentation
strombetta Jan 18, 2026
f19f656
Express clean cascades as dependencies
strombetta Jan 19, 2026
77f73b0
Merge pull request #21 from strombetta/codex/add-clean/reset-interfac…
strombetta Jan 19, 2026
72430e9
Rename safe remove helpers
strombetta Jan 20, 2026
990b870
Merge pull request #22 from strombetta/codex/remove-force=1-from-clea…
strombetta Jan 20, 2026
fcdc73e
Fix clean-toolchain target removal path
strombetta Jan 20, 2026
ae980bc
Merge pull request #23 from strombetta/codex/fix-error-in-make-clean-…
strombetta Jan 20, 2026
f569dd9
Fold log/output cleanup into clean-toolchain
strombetta Jan 20, 2026
319cd96
Merge pull request #24 from strombetta/codex/fix-log-cleanup-and-mini…
strombetta Jan 20, 2026
93634f4
Refine help messaging for optional targets
strombetta Jan 21, 2026
e25ace3
Merge pull request #25 from strombetta/codex/verify-toolchain-archite…
strombetta Jan 21, 2026
84d3032
Update help output for toolchain recipes
strombetta Jan 21, 2026
c78fd60
Merge pull request #26 from strombetta/codex/modify-make-help-for-dua…
strombetta Jan 21, 2026
6bae7f5
Document additional toolchain options
strombetta Jan 21, 2026
3bcaee3
Merge pull request #27 from strombetta/codex/update-make-help-output-…
strombetta Jan 21, 2026
826da41
Show runtime host default in help
strombetta Jan 21, 2026
a81450e
Merge pull request #28 from strombetta/codex/fix-help-output-errors-i…
strombetta Jan 21, 2026
8152ae7
Fix musl header cleanup repo root
strombetta Jan 21, 2026
37c76a5
Merge pull request #29 from strombetta/codex/modify-make-clean-output…
strombetta Jan 21, 2026
6e990ab
Move toolchain check target to Makefile.check
strombetta Jan 22, 2026
68b840b
Fix shellcheck quoting in toolchain check
strombetta Jan 23, 2026
9339bda
Merge pull request #31 from strombetta/feature/help
strombetta Jan 23, 2026
5f5d508
Merge pull request #30 from strombetta/codex/add-makefile.check-targe…
strombetta Jan 23, 2026
2be57e4
Fix toolchain check for target bin layout
strombetta Jan 23, 2026
e54a265
Merge pull request #32 from strombetta/codex/fix-missing-toolchain-bi…
strombetta Jan 23, 2026
baca2a4
Uniform make check output
strombetta Jan 24, 2026
7433860
Merge pull request #35 from strombetta/codex/modifica-output-comando-…
strombetta Jan 24, 2026
aeb463f
Clean downloaded signatures in component clean targets
strombetta Jan 24, 2026
2283838
Merge pull request #36 from strombetta/codex/modify-make-clean-to-rem…
strombetta Jan 24, 2026
f3a7f94
Detect toolchain target during checks
strombetta Jan 24, 2026
9ab9c4c
Silence shellcheck for target detection
strombetta Jan 24, 2026
08b1a82
Fix target detection word splitting
strombetta Jan 24, 2026
5a001f6
Merge pull request #37 from strombetta/codex/update-target-check-for-…
strombetta Jan 24, 2026
1f779d6
Merge pull request #38 from strombetta/feature/help
strombetta Jan 24, 2026
8e96cac
Fix release workflow target invocation
strombetta Jan 24, 2026
7d9f826
Merge pull request #40 from strombetta/codex/fix-workflows/release.ym…
strombetta Jan 24, 2026
0068590
Standardize source file copyright headers
strombetta Jan 24, 2026
f0bba43
Merge pull request #41 from strombetta/codex/update-source-files-with…
strombetta Jan 24, 2026
3a25557
Fix copyright and licence
strombetta Jan 24, 2026
c0cce30
Remove version.mk
strombetta Jan 25, 2026
bb59706
Standardize target pipeline
strombetta Jan 25, 2026
b8f08e9
Add Security.md and CODEOWNERS
strombetta Jan 28, 2026
db86e07
Add CODE_OF_CONDUCT.md, MAINTAINERS.md, and SUPPORT.md.
strombetta Jan 28, 2026
ae76591
Add VERSIONING.md
strombetta Jan 28, 2026
759cd12
Merge pull request #42 from strombetta/feature/packages
strombetta Jan 28, 2026
d01fad2
Change secrets
strombetta Feb 2, 2026
ffddae3
Merge pull request #43 from strombetta/feature/packages
strombetta Feb 2, 2026
7236a12
Add SBOM
strombetta Feb 2, 2026
be85db0
Add SLSA provenance
strombetta Feb 2, 2026
8a564bb
Update syft installation script URL in release.yml
strombetta Feb 3, 2026
782cf30
Update release.yml
strombetta Feb 3, 2026
1358cff
Fix release.yml
strombetta Feb 3, 2026
3a7817d
Fix minisign and gpg
strombetta Feb 4, 2026
23f3f91
Add minisign key check
strombetta Feb 4, 2026
3435b61
Add build caching
strombetta Feb 4, 2026
29de4f3
Add debugging info
strombetta Feb 4, 2026
58a99a8
Update release.yml
strombetta Feb 4, 2026
3cdea27
Add diagnostic information for minisign
strombetta Feb 4, 2026
f85973c
Update release.yml
strombetta Feb 4, 2026
ec07b97
Fix minisign key encoding and decoding
strombetta Feb 4, 2026
32a8d2d
Removed GPG signing
strombetta Feb 4, 2026
a2b56c5
Fix SLSA provenance
strombetta Feb 5, 2026
492b16e
Fix SLSA provenance version
strombetta Feb 5, 2026
da5089d
Merge pull request #44 from strombetta/feature/packages
strombetta Feb 5, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
13 changes: 13 additions & 0 deletions .github/CODEOWNERS
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
# Default owners
* @strombetta

# CI / release workflows
/.github/workflows/ @strombetta

# Build system and scripts
/Makefile @strombetta
/Makefile.check @strombetta
/Makefile.help @strombetta
/make/ @strombetta
/scripts/ @strombetta
/config/ @strombetta
213 changes: 203 additions & 10 deletions .github/workflows/release.yml
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ on:
push:
tags:
- "v*"
workflow_dispatch:

jobs:
build:
Expand All @@ -15,12 +16,10 @@ jobs:
include:
- arch: x86_64
runs-on: ubuntu-latest
target: x86_64
triple: x86_64-bugleos-linux-musl
label: x86_64
- arch: aarch64
runs-on: arm64
target: aarch64
runs-on: ubuntu-24.04-arm
triple: aarch64-bugleos-linux-musl
label: aarch64
permissions:
Expand All @@ -31,6 +30,26 @@ jobs:
with:
fetch-depth: 0

- name: Read package versions
shell: bash
run: |
set -euo pipefail
binutils_version="$(awk -F ' := ' '/^BINUTILS_VERSION/ {print $2; exit}' make/binutils-stage1.mk)"
gcc_version="$(awk -F ' := ' '/^GCC_VERSION/ {print $2; exit}' make/gcc-stage1.mk)"
musl_version="$(awk -F ' := ' '/^MUSL_VERSION/ {print $2; exit}' make/musl.mk)"
linux_version="$(awk -F ' := ' '/^LINUX_VERSION/ {print $2; exit}' make/linux-headers.mk)"

if [ -z "$binutils_version" ] || [ -z "$gcc_version" ] || [ -z "$musl_version" ] || [ -z "$linux_version" ]; then
echo "Failed to read one or more package versions." >&2
exit 1
fi

echo "BINUTILS_VERSION=${binutils_version}" >> "$GITHUB_ENV"
echo "GCC_VERSION=${gcc_version}" >> "$GITHUB_ENV"
echo "MUSL_VERSION=${musl_version}" >> "$GITHUB_ENV"
echo "LINUX_VERSION=${linux_version}" >> "$GITHUB_ENV"
echo "VERSIONS_KEY=binutils-${binutils_version}-gcc-${gcc_version}-musl-${musl_version}-linux-${linux_version}" >> "$GITHUB_ENV"

- name: Validate tag format
run: |
set -euo pipefail
Expand All @@ -49,6 +68,24 @@ jobs:
build-essential binutils bash coreutils tar gzip xz-utils bison flex texinfo gawk file curl wget gpg \
libgmp-dev libmpfr-dev libmpc-dev python3

- name: Restore download cache
uses: actions/cache@v4
with:
path: |
downloads/
sources/
key: downloads-${{ runner.os }}-${{ matrix.arch }}-${{ env.VERSIONS_KEY }}

- name: Restore build cache
uses: actions/cache@v4
with:
path: |
builds/
out/progress/
out/toolchain/
out/toolchain-stage1/
key: build-${{ runner.os }}-${{ matrix.arch }}-${{ env.VERSIONS_KEY }}-${{ hashFiles('Makefile', 'make/*.mk', 'config/*.mk', 'scripts/*.sh') }}

- name: Fetch sources
run: |
set -euo pipefail
Expand All @@ -59,10 +96,35 @@ jobs:
set -euo pipefail
./scripts/verify-checksums.sh

- name: Build ${{ matrix.arch }} toolchain
- name: Build binutils stage1
run: |
set -euo pipefail
make TARGET=${{ matrix.triple }} binutils-stage1

- name: Build Linux headers
run: |
set -euo pipefail
make TARGET=${{ matrix.triple }} linux-headers

- name: Build GCC stage1
run: |
set -euo pipefail
make ${{ matrix.target }}
make TARGET=${{ matrix.triple }} gcc-stage1

- name: Build musl
run: |
set -euo pipefail
make TARGET=${{ matrix.triple }} musl

- name: Build binutils stage2
run: |
set -euo pipefail
make TARGET=${{ matrix.triple }} binutils-stage2

- name: Build GCC stage2
run: |
set -euo pipefail
make TARGET=${{ matrix.triple }} gcc-stage2

- name: Upload build logs
if: always()
Expand Down Expand Up @@ -92,6 +154,39 @@ jobs:
path: dist/bugleos-toolchain-${{ env.VERSION }}-${{ matrix.label }}.tar.gz
if-no-files-found: error

hash-artifacts:
name: Prepare SLSA subjects
runs-on: ubuntu-latest
needs: build
outputs:
base64_subjects: ${{ steps.hashes.outputs.base64_subjects }}
steps:
- name: Download toolchain tarballs
uses: actions/download-artifact@v4
with:
path: dist

- name: Compute base64 subjects
id: hashes
shell: bash
run: |
set -euo pipefail
mapfile -d '' files < <(find dist -name 'bugleos-toolchain-*.tar.gz' -print0 | sort -z)
if [ "${#files[@]}" -eq 0 ]; then
echo "No toolchain tarballs found under dist/." >&2
exit 1
fi

tmp="$(mktemp)"
for f in "${files[@]}"; do
hash="$(sha256sum "$f" | awk '{print $1}')"
name="$(basename "$f")"
printf '%s %s\n' "$hash" "$name" >> "$tmp"
done

sort "$tmp" | base64 -w0 > "$tmp.b64"
echo "base64_subjects=$(cat "$tmp.b64")" >> "$GITHUB_OUTPUT"

publish:
name: Publish Release
runs-on: ubuntu-latest
Expand All @@ -115,6 +210,71 @@ jobs:
echo "PRERELEASE=false" >> "$GITHUB_ENV"
fi

- name: Install signing tools
run: |
sudo apt-get update
sudo apt-get install -y minisign gnupg

- name: Install SBOM tool (syft)
run: |
set -euo pipefail
curl -sSfL https://get.anchore.io/syft | sh -s -- -b /usr/local/bin
syft version

- name: Generate SBOMs (SPDX + CycloneDX)
run: |
set -euo pipefail
mapfile -d '' files < <(find dist -name 'bugleos-toolchain-*.tar.gz' -print0 | sort -z)
if [ "${#files[@]}" -eq 0 ]; then
echo "No toolchain tarballs found under dist/." >&2
exit 1
fi

for f in "${files[@]}"; do
base="$(basename "$f" .tar.gz)"
workdir="$(mktemp -d)"
tar -C "$workdir" -xzf "$f"
syft "dir:$workdir" -o spdx-json > "dist/${base}.spdx.json"
syft "dir:$workdir" -o cyclonedx-json > "dist/${base}.cdx.json"
rm -rf "$workdir"
done

- name: Generate SHA256SUMS and signatures
env:
MINISIGN_KEY: ${{ secrets.MINISIGN_KEY }}
MINISIGN_PUB: ${{ secrets.MINISIGN_PUB }}
run: |
set -euo pipefail

if [ -z "${MINISIGN_KEY:-}" ] || [ -z "${MINISIGN_PUB:-}" ]; then
echo "Missing minisign secrets (MINISIGN_KEY / MINISIGN_PUB)." >&2
exit 1
fi

mkdir -p out dist
printf '%s' "$MINISIGN_KEY" | base64 -d > out/minisign.key
printf '%s' "$MINISIGN_PUB" | base64 -d > out/minisign.pub
chmod 600 out/minisign.key
cp out/minisign.pub dist/minisign.pub

mapfile -d '' files < <(find dist -name 'bugleos-toolchain-*.tar.gz' -print0 | sort -z)
if [ "${#files[@]}" -eq 0 ]; then
echo "No toolchain tarballs found under dist/." >&2
exit 1
fi

mapfile -d '' sboms < <(find dist -maxdepth 1 \( -name 'bugleos-toolchain-*.spdx.json' -o -name 'bugleos-toolchain-*.cdx.json' \) -print0 | sort -z)
if [ "${#sboms[@]}" -eq 0 ]; then
echo "No SBOM files found under dist/." >&2
exit 1
fi

sha256sum "${files[@]}" "${sboms[@]}" > dist/SHA256SUMS
minisign -S -s out/minisign.key -m dist/SHA256SUMS
for f in "${files[@]}"; do
minisign -S -s out/minisign.key -m "$f"
done

- name: Publish GitHub Release
uses: softprops/action-gh-release@v2
with:
Expand All @@ -123,11 +283,44 @@ jobs:
draft: false
prerelease: ${{ env.PRERELEASE }}
body: |
Supported architectures:
Architecture | Download Link
------------ | -------------
x86_64 | [bugleos-toolchain-${{ env.VERSION }}-x86_64.tar.gz](dist/**/bugleos-toolchain-${{ env.VERSION }}-x86_64.tar.gz)
aarch64 | [bugleos-toolchain-${{ env.VERSION }}-aarch64.tar.gz](dist/**/bugleos-toolchain-${{ env.VERSION }}-aarch64.tar.gz)
# Supported architectures

## ![64-bit architecture (x86_64)](https://img.shields.io/badge/arch-x86__64-blue)
- Toolchain: https://github.com/${{ github.repository }}/releases/download/${{ github.ref_name }}/bugleos-toolchain-${{ env.VERSION }}-x86_64.tar.gz
- Signature (minisign): https://github.com/${{ github.repository }}/releases/download/${{ github.ref_name }}/bugleos-toolchain-${{ env.VERSION }}-x86_64.tar.gz.minisig

## ![ARM64 architecture (aarch64)](https://img.shields.io/badge/arch-aarch64-green)
- Toolchain: https://github.com/${{ github.repository }}/releases/download/${{ github.ref_name }}/bugleos-toolchain-${{ env.VERSION }}-aarch64.tar.gz
- Signature (minisign): https://github.com/${{ github.repository }}/releases/download/${{ github.ref_name }}/bugleos-toolchain-${{ env.VERSION }}-aarch64.tar.gz.minisig

## Verification
- Public key: https://github.com/${{ github.repository }}/releases/download/${{ github.ref_name }}/minisign.pub
- Checksums: https://github.com/${{ github.repository }}/releases/download/${{ github.ref_name }}/SHA256SUMS
- Checksums signature: https://github.com/${{ github.repository }}/releases/download/${{ github.ref_name }}/SHA256SUMS.minisig

files: |
dist/**/bugleos-toolchain-${{ env.VERSION }}-x86_64.tar.gz
dist/**/bugleos-toolchain-${{ env.VERSION }}-aarch64.tar.gz.minisig
dist/**/bugleos-toolchain-${{ env.VERSION }}-aarch64.tar.gz
dist/**/bugleos-toolchain-${{ env.VERSION }}-x86_64.tar.gz.minisig
dist/bugleos-toolchain-${{ env.VERSION }}-x86_64.spdx.json
dist/bugleos-toolchain-${{ env.VERSION }}-aarch64.spdx.json
dist/bugleos-toolchain-${{ env.VERSION }}-x86_64.cdx.json
dist/bugleos-toolchain-${{ env.VERSION }}-aarch64.cdx.json
dist/SHA256SUMS
dist/SHA256SUMS.minisig
dist/minisign.pub

provenance:
name: Generate SLSA provenance
needs: [hash-artifacts, publish]
permissions:
actions: read
id-token: write
contents: write
uses: slsa-framework/slsa-github-generator/.github/workflows/generator_generic_slsa3.yml@v2.1.0
with:
base64-subjects: "${{ needs.hash-artifacts.outputs.base64_subjects }}"
upload-assets: true
upload-tag-name: ${{ github.ref_name }}
provenance-name: bugleos-toolchain-${{ github.ref_name }}.intoto.jsonl
66 changes: 66 additions & 0 deletions CODE_OF_CONDUCT.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,66 @@
# Code of Conduct

## Our Pledge

We as contributors and maintainers pledge to make participation in this project
a harassment-free experience for everyone, regardless of age, body size,
visible or invisible disability, ethnicity, sex characteristics, gender
identity and expression, level of experience, education, socio-economic status,
nationality, personal appearance, race, religion, or sexual identity and
orientation.

## Our Standards

Examples of behavior that contributes to a positive environment include:

- Demonstrating empathy and kindness toward other people
- Being respectful of differing opinions, viewpoints, and experiences
- Giving and gracefully accepting constructive feedback
- Accepting responsibility and apologizing to those affected by our mistakes
- Focusing on what is best for the community

Examples of unacceptable behavior include:

- Sexualized language or imagery, and sexual attention or advances
- Trolling, insulting or derogatory comments, and personal or political attacks
- Public or private harassment
- Publishing others' private information without explicit permission
- Other conduct which could reasonably be considered inappropriate

## Enforcement Responsibilities

Project maintainers are responsible for clarifying and enforcing standards of
acceptable behavior and will take appropriate and fair corrective action in
response to any behavior they deem inappropriate, threatening, offensive, or
harmful.

## Scope

This Code of Conduct applies within all project spaces and also applies when an
individual is officially representing the project in public spaces.

## Reporting

Report incidents to the maintainers by contacting the repository owner via the
email listed on their GitHub profile. If you are unable to use email, open a
private GitHub discussion (if enabled) or request a private contact channel
through a maintainer.

We will acknowledge receipt within 5 business days and will keep you informed
about the process when possible.

## Enforcement Guidelines

Maintainers will follow these Community Impact Guidelines in determining the
consequences for any action they deem in violation of this Code of Conduct:

1. **Correction**: A private, written warning with clarification.
2. **Warning**: A formal warning with consequences for continued behavior.
3. **Temporary Ban**: A temporary ban from participation.
4. **Permanent Ban**: Permanent removal from the community.

## Attribution

This Code of Conduct is adapted from the Contributor Covenant, version 2.1.
For details, see:
https://www.contributor-covenant.org/version/2/1/code_of_conduct.html
21 changes: 21 additions & 0 deletions MAINTAINERS.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
# Maintainers

This document lists the active maintainers for the BugleOS Cross Toolchain
repository and their areas of responsibility.

## Active Maintainers

- Sebastiano Trombetta (@strombetta) — Lead Maintainer
- Toolchain build system (Makefiles, scripts)
- Release process and artifacts
- CI/CD workflows

## Contact

For questions or support, see SUPPORT.md.
For security issues, follow SECURITY.md.

## Changes to This File

Updates to this file should be made via pull request and require approval from
an existing maintainer.
Loading