1 Commits

Author SHA1 Message Date
9002d19a40 port to meson cargo
All checks were successful
Gentoo Utils / build-oci-image (push) Successful in 7m41s
Gentoo Utils / grep (push) Successful in 1m23s
Gentoo Utils / docs (push) Successful in 1m34s
Gentoo Utils / check-format (push) Successful in 1m37s
Gentoo Utils / build (push) Successful in 1m44s
Gentoo Utils / test (push) Successful in 36s
Gentoo Utils / fuzz (push) Successful in 1m19s
Use the new unstable meson cargo support. This simplifies the
meson.build script and allows to use crates such as clap that require
picking up features from Cargo.toml.

This also allows us to not embed thiserror in subprojects, and instead
use a wrap file with a custom meson.build and some patches to make it
compile without running its build.rs script.
2025-12-21 07:57:41 +00:00
2 changed files with 59 additions and 61 deletions

View File

@@ -6,19 +6,22 @@ RUN getuto
RUN emerge-webrsync
RUN mkdir -p /var/cache/distfiles/git3-src && chown portage:portage /var/cache/distfiles/git3-src
ENV EGIT_OVERRIDE_REPO_MESONBUILD_MESON=https://jturnerusa.dev/cgit/meson
RUN emerge \
=dev-lang/rust-bin-9999 \
=dev-build/meson-9999::gentoo \
llvm-core/clang \
llvm-core/lld \
dev-vcs/git \
sys-process/parallel \
net-libs/nodejs
RUN git clone https://jturnerusa.dev/cgit/ebuilds/ /var/db/repos/spawns
COPY etc/portage/repos.conf /etc/portage/
RUN mkdir -p /var/cache/distfiles/git3-src && chown portage:portage /var/cache/distfiles/git3-src
RUN emerge =dev-build/meson-9999::spawns
RUN useradd -m gentooligan
USER gentooligan

View File

@@ -22,48 +22,54 @@ jobs:
key: gitea-repo-${{ gitea.repository }}-${{ gitea.ref }}
- name: Checkout repo
uses: actions/checkout@v6
uses: actions/checkout@v5
with:
fetch-depth: 0
- name: Detect Changes
uses: dorny/paths-filter@v3
- name: Check for changes before building
id: image-changes
with:
filters: |
docker:
- ".docker/**"
- name: Metadata
id: metadata
# build image only if 1. changes are detected or 2. an image for the working branch doesnt exist
run: |
branch_name="${GITHUB_HEAD_REF:-${GITHUB_REF#refs/heads/}}"
default_branch_name="${{ gitea.event.repository.default_branch }}"
image_tag=latest
if [[ $default_branch_name != $branch_name ]]; then
this_image_tag="$(echo "$branch_name" | sed -E 's/[^a-zA-Z0-9]/-/g')"
echo "steps... ${{ steps.image-changes.outputs.docker }}"
if [[ ${{ steps.image-changes.outputs.docker }} == true ]] || docker manifest inspect ${{ vars.REGISTRY_URL }}/${{ gitea.repository }}:${this_image_tag} >/dev/null 2>&1; then
image_tag=$this_image_tag
fi
else
comparison_hash="${{ gitea.event.before }}"
if [[ "$branch_name" != "$default_branch_name" ]]; then
image_tag=$branch_name
fi
# slugify
image_tag="$(echo "$image_tag" | sed -E 's/[^a-zA-Z0-9]/-/g')"
# rebase breaks gitea.event.before, so check to make sure the hash provided exists
if ! git merge-base --is-ancestor $comparison_hash $branch_name >/dev/null 2>&1; then
comparison_hash=$(git merge-base origin/$default_branch_name $branch_name)
fi
if ! git diff $comparison_hash ${{ gitea.sha }} --no-patch --exit-code .docker; then
build_image=true
else
if ! docker manifest inspect ${{ vars.REGISTRY_URL }}/${{ gitea.repository }}:${image_tag} >/dev/null 2>&1; then
build_image=true
else
build_image=false
fi
fi
echo "default_branch_name=$default_branch_name" >> $GITEA_OUTPUT
echo "branch_name=$branch_name" >> $GITEA_OUTPUT
echo "image_tag=$image_tag" >> $GITEA_OUTPUT
echo "build_image=${build_image:-${{ steps.image-changes.outputs.docker }}}" >> $GITEA_OUTPUT
echo "comparison_hash=$comparison_hash" >> $GITEA_OUTPUT
echo "build_image=$build_image" >> $GITEA_OUTPUT
cat $GITEA_OUTPUT
- name: Set up Docker buildx
if: steps.metadata.outputs.build_image == 'true'
if: steps.image-changes.outputs.build_image == 'true'
uses: docker/setup-buildx-action@v3
with:
driver-opts: network=runners-net
- name: Log in to Github Container Registry
if: steps.metadata.outputs.build_image == 'true'
if: steps.image-changes.outputs.build_image == 'true'
uses: docker/login-action@v3
with:
registry: ${{ vars.REGISTRY_URL }}
@@ -71,58 +77,47 @@ jobs:
password: ${{ secrets.CI_BOT_TOKEN }}
- name: Build and push
if: steps.metadata.outputs.build_image == 'true'
if: steps.image-changes.outputs.build_image == 'true'
uses: docker/build-push-action@v6
with:
push: true
tags: ${{ vars.REGISTRY_URL }}/${{ gitea.repository }}:${{ steps.metadata.outputs.image_tag }}
tags: ${{ vars.REGISTRY_URL }}/${{ gitea.repository }}:${{ steps.image-changes.outputs.image_tag }}
context: "{{defaultContext}}:.docker"
cache-from: type=gha
cache-to: type=gha,mode=max
outputs:
image_tag: ${{ steps.metadata.outputs.image_tag }}
image_tag: ${{ steps.image-changes.outputs.image_tag }}
build:
runs-on: gentoo
runs-on: brutalisk
env:
CC: "clang"
CXX: "clang++"
CC: 'clang'
CXX: 'clang++'
needs: build-oci-image
container:
image: ${{ vars.REGISTRY_URL }}/${{ gitea.repository }}:${{ needs.build-oci-image.outputs.image_tag }}
steps:
- name: Checkout repo
uses: actions/checkout@v6
uses: actions/checkout@v5
# TODO: This is currently unused by other jobs. I couldn't make meson not regenerate things regardless of
# the build dir already existing.
- name: Build Cache Setup
uses: actions/cache@v5
with:
path: |
subprojects
build
key: build-${{ gitea.repository }}-${{ gitea.sha }}
- name: Build
- name: build and check
run: |
meson setup -Dfuzz=enabled -Dtests=enabled -Dbuildtype=debugoptimized -Ddocs=enabled build
meson compile -C build
# FIXME: Currently this rebuilds everything. Instead we should bring over the build dir from the build job. This will come in handy
# when we have multiple build targets and configs. What we have currently is fine until we get lots of builds going
test:
runs-on: gentoo
runs-on: brutalisk
env:
CC: "clang"
CXX: "clang++"
needs: [build-oci-image]
CC: 'clang'
CXX: 'clang++'
needs: [build-oci-image, build]
container:
image: ${{ vars.REGISTRY_URL }}/${{ gitea.repository }}:${{ needs.build-oci-image.outputs.image_tag }}
steps:
- name: Checkout repo
uses: actions/checkout@v6
uses: actions/checkout@v5
- name: test
run: |
@@ -131,17 +126,17 @@ jobs:
ninja test -C build
fuzz:
runs-on: gentoo
runs-on: brutalisk
env:
CC: "clang"
CXX: "clang++"
CC: 'clang'
CXX: 'clang++'
FUZZER_TIMEOUT_S: 300
needs: [build-oci-image]
needs: [build-oci-image, build]
container:
image: ${{ vars.REGISTRY_URL }}/${{ gitea.repository }}:${{ needs.build-oci-image.outputs.image_tag }}
steps:
- name: Checkout repo
uses: actions/checkout@v6
uses: actions/checkout@v5
# FIXME: Get rid of this step when portage has fixes merged?
# needed because portage has fixes upstream we need that arent stable yet
@@ -163,13 +158,13 @@ jobs:
continue-on-error: true
check-format:
runs-on: gentoo
runs-on: brutalisk
needs: [build-oci-image]
container:
image: ${{ vars.REGISTRY_URL }}/${{ gitea.repository }}:${{ needs.build-oci-image.outputs.image_tag }}
steps:
- name: Checkout repo
uses: actions/checkout@v6
uses: actions/checkout@v5
- name: Check Formatting
run: |
@@ -178,13 +173,13 @@ jobs:
ninja rustfmt -C build
docs:
runs-on: gentoo
runs-on: brutalisk
needs: [build-oci-image]
container:
image: ${{ vars.REGISTRY_URL }}/${{ gitea.repository }}:${{ needs.build-oci-image.outputs.image_tag }}
steps:
- name: Checkout repo
uses: actions/checkout@v6
uses: actions/checkout@v5
- name: Build Documentation
run: |
@@ -192,13 +187,13 @@ jobs:
ninja rustdoc -C docs
grep:
runs-on: gentoo
runs-on: brutalisk
needs: [build-oci-image]
container:
image: ${{ vars.REGISTRY_URL }}/${{ gitea.repository }}:${{ needs.build-oci-image.outputs.image_tag }}
steps:
- name: Checkout repo
uses: actions/checkout@v6
uses: actions/checkout@v5
- name: grep for patterns
# negate git grep ret code because 1 means no findings