From 127d659e88484439d022f9749aac420e0ae27326 Mon Sep 17 00:00:00 2001 From: Shankar Easwaran Date: Tue, 31 Mar 2026 22:17:28 -0500 Subject: [PATCH 1/2] [workflow][test] add busybox workflow Signed-off-by: Shankar Easwaran --- .github/workflows/busybox-eld.yml | 213 +++++++++++++++++++++ .github/workflows/ci.yml | 2 + .github/workflows/clang-cross-download.yml | 61 +++--- 3 files changed, 254 insertions(+), 22 deletions(-) create mode 100644 .github/workflows/busybox-eld.yml diff --git a/.github/workflows/busybox-eld.yml b/.github/workflows/busybox-eld.yml new file mode 100644 index 000000000..c81ae3ad0 --- /dev/null +++ b/.github/workflows/busybox-eld.yml @@ -0,0 +1,213 @@ +name: BusyBox with ELD + +on: + pull_request: {} # Uncomment only to test this WF file update. + workflow_dispatch: + #schedule: + # - cron: "0 5 * * *" + +permissions: + contents: write + +concurrency: + group: ${{ github.workflow }}-${{ github.ref }} + cancel-in-progress: true + +jobs: + fetch-clang-cross-toolchain: + if: github.repository == 'qualcomm/eld' + strategy: + fail-fast: false + matrix: + include: + - arch: x86_64 + toolchain_asset: x86_64-unknown-linux-musl.tar.xz + enabled: 1 + - arch: riscv32 + toolchain_asset: riscv32-unknown-linux-musl.tar.xz + enabled: 0 + - arch: riscv64 + toolchain_asset: riscv64-unknown-linux-musl.tar.xz + enabled: 0 + - arch: arm + toolchain_asset: arm-unknown-linux-musleabi.tar.xz + enabled: 0 + - arch: aarch64 + toolchain_asset: aarch64-unknown-linux-musl.tar.xz + enabled: 0 + uses: ./.github/workflows/clang-cross-download.yml + with: + runner: ubuntu-latest + workspace: /home/runner/work/${{ github.event.repository.name }}/${{ github.event.repository.name }} + assets: ${{ matrix.toolchain_asset }} + upload_artifact: true + artifact_name: clang-cross-${{ matrix.arch }} + + build-busybox-with-eld: + if: github.repository == 'qualcomm/eld' + needs: fetch-clang-cross-toolchain + runs-on: ubuntu-latest + strategy: + fail-fast: false + matrix: + include: + - arch: x86_64 + busybox_arch: x86_64 + target_triple: x86_64-unknown-linux-musl + toolchain_dir: x86_64-unknown-linux-musl + toolchain_asset: x86_64-unknown-linux-musl.tar.xz + qemu_bin: "" + enabled: 1 + - arch: riscv32 + busybox_arch: riscv + target_triple: riscv32-unknown-linux-musl + toolchain_dir: riscv32-unknown-linux-musl + toolchain_asset: riscv32-unknown-linux-musl.tar.xz + qemu_bin: qemu-riscv32 + enabled: 0 + - arch: riscv64 + busybox_arch: riscv + target_triple: riscv64-unknown-linux-musl + toolchain_dir: riscv64-unknown-linux-musl + toolchain_asset: riscv64-unknown-linux-musl.tar.xz + qemu_bin: qemu-riscv64 + enabled: 0 + - arch: arm + busybox_arch: arm + target_triple: arm-unknown-linux-musleabi + toolchain_dir: arm-unknown-linux-musleabi + toolchain_asset: arm-unknown-linux-musleabi.tar.xz + qemu_bin: qemu-arm + enabled: 0 + - arch: aarch64 + busybox_arch: aarch64 + target_triple: aarch64-unknown-linux-musl + toolchain_dir: aarch64-unknown-linux-musl + toolchain_asset: aarch64-unknown-linux-musl.tar.xz + qemu_bin: qemu-aarch64 + enabled: 0 + steps: + - name: Checkout eld + if: matrix.enabled == 1 + uses: actions/checkout@v4 + with: + repository: qualcomm/eld + ref: main + fetch-depth: 1 + + - name: Install dependencies + if: matrix.enabled == 1 + shell: bash + run: | + sudo apt update + sudo apt install -y make + if [[ -n "${{ matrix.qemu_bin }}" ]]; then + sudo apt install -y qemu-user + fi + + - name: Fetch latest nightly toolset + if: matrix.enabled == 1 + uses: ./.github/workflows/FetchNightlyToolset + + - name: Download clang-cross toolchain artifact + if: matrix.enabled == 1 + uses: actions/download-artifact@v4 + with: + name: clang-cross-${{ matrix.arch }} + path: clang-cross + + - name: Extract clang-cross toolchain + if: matrix.enabled == 1 + shell: bash + env: + TOOLCHAIN_DIR: ${{ matrix.toolchain_dir }} + run: | + set -euo pipefail + mkdir -p "${{ github.workspace }}/${TOOLCHAIN_DIR}" + tar -xf clang-cross/clang-cross-*.tar -C "${{ github.workspace }}/${TOOLCHAIN_DIR}" --strip-components=1 + + - name: Resolve toolchain paths + if: matrix.enabled == 1 + shell: bash + env: + TARGET_TRIPLE: ${{ matrix.target_triple }} + TOOLCHAIN_DIR: ${{ matrix.toolchain_dir }} + run: | + set -euo pipefail + toolchain_base="${{ github.workspace }}/${TOOLCHAIN_DIR}" + cross_root="$(find "${toolchain_base}" -type f -path "*/bin/${TARGET_TRIPLE}-clang" -print -quit | sed 's|/bin/.*$||')" + if [[ -z "${cross_root}" ]]; then + echo "Could not find ${TARGET_TRIPLE}-clang under ${toolchain_base}" >&2 + find "${toolchain_base}" -maxdepth 4 -type d -name bin -print >&2 || true + exit 1 + fi + eld_bin="$(command -v ld.eld || true)" + if [[ -z "${eld_bin}" ]]; then + echo "Could not find ld.eld in PATH after FetchNightlyToolset" >&2 + exit 1 + fi + echo "CROSS_TOOLCHAIN_ROOT=${cross_root}" >> "${GITHUB_ENV}" + echo "ELD_BIN=${eld_bin}" >> "${GITHUB_ENV}" + echo "${cross_root}/bin" >> "${GITHUB_PATH}" + echo "Using cross toolchain root: ${cross_root}" + echo "Using ld.eld: ${eld_bin}" + + - name: Clone BusyBox + if: matrix.enabled == 1 + shell: bash + run: | + git clone https://github.com/mirror/busybox.git + + - name: Build BusyBox with ELD + if: matrix.enabled == 1 + shell: bash + env: + CROSS_TOOLCHAIN_ROOT: ${{ env.CROSS_TOOLCHAIN_ROOT }} + TARGET_TRIPLE: ${{ matrix.target_triple }} + BUSYBOX_ARCH: ${{ matrix.busybox_arch }} + ELD_BIN: ${{ env.ELD_BIN }} + run: | + set -euo pipefail + export PATH="${CROSS_TOOLCHAIN_ROOT}/bin:${PATH}" + command -v "${TARGET_TRIPLE}-clang" + command -v ld.eld + "${TARGET_TRIPLE}"-clang --version + "${ELD_BIN}" --version + + cd busybox + make defconfig + make -j"$(nproc)" \ + ARCH="${BUSYBOX_ARCH}" \ + CC="${TARGET_TRIPLE}-clang --ld-path=${ELD_BIN}" \ + HOSTCC=clang + + - name: Run BusyBox tests + if: matrix.enabled == 1 + shell: bash + env: + CROSS_TOOLCHAIN_ROOT: ${{ env.CROSS_TOOLCHAIN_ROOT }} + TARGET_TRIPLE: ${{ matrix.target_triple }} + QEMU_BIN: ${{ matrix.qemu_bin }} + run: | + set -euo pipefail + export PATH="${CROSS_TOOLCHAIN_ROOT}/bin:${PATH}" + + if [[ -n "${QEMU_BIN}" ]]; then + SYSROOT="${CROSS_TOOLCHAIN_ROOT}/${TARGET_TRIPLE}/sysroot" + if [[ ! -d "${SYSROOT}" ]]; then + SYSROOT="${CROSS_TOOLCHAIN_ROOT}/sysroot" + fi + if [[ ! -d "${SYSROOT}" ]]; then + echo "Unable to find sysroot under ${CROSS_TOOLCHAIN_ROOT}" >&2 + exit 1 + fi + + cd busybox + mv busybox busybox.bin + printf '%s\n' '#!/usr/bin/env bash' \ + "exec ${QEMU_BIN} -L ${SYSROOT} \"\$(dirname \"\$0\")/busybox.bin\" \"\$@\"" > busybox + chmod +x busybox + fi + + cd busybox/testsuite + env SKIP_KNOWN_BUGS=1 SKIP_INTERNET_TESTS=1 ./runtest diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 2c8846ba9..c6a59b299 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -11,7 +11,9 @@ on: - '.github/workflows/docs-multiversion.yaml' - '.github/workflows/ci-win.yml' - '.github/workflows/clang-cross-download.yml' + - '.github/workflows/FetchClangCrossToolchain.yml' - '.github/workflows/clang-cross-schedule.yml' + - '.github/workflows/busybox-eld.yml' - '.github/workflows/nightly-musl-builder.yml' - '.github/workflows/picolibc-builder.yml' - '.github/workflows/nightly-test.yml' diff --git a/.github/workflows/clang-cross-download.yml b/.github/workflows/clang-cross-download.yml index 0133e7c2b..8c117de42 100644 --- a/.github/workflows/clang-cross-download.yml +++ b/.github/workflows/clang-cross-download.yml @@ -17,6 +17,16 @@ on: description: "Comma-separated list of asset names to download" required: true type: string + upload_artifact: + description: "Upload extracted toolchains as a GitHub artifact" + required: false + type: boolean + default: false + artifact_name: + description: "Artifact name when upload_artifact is true" + required: false + type: string + default: "clang-cross-toolchains" permissions: @@ -26,11 +36,13 @@ jobs: runs-on: ${{ inputs.runner }} steps: - name: Download and extract release assets + id: fetch shell: bash env: WORKSPACE: ${{ inputs.workspace }} ASSETS: ${{ inputs.assets }} run: | + set -euo pipefail api_url="https://api.github.com/repos/cross-tools/clang-cross/releases/latest" release_json="$(curl -fsSL "${api_url}")" tag="$(printf '%s' "${release_json}" | jq -r '.tag_name')" @@ -57,31 +69,25 @@ jobs: if [[ "${all_extracted}" == "true" ]]; then echo "Latest release ${tag} already fully extracted." - exit 0 - fi - - if [[ -d "${root_dir}" ]]; then - find "${root_dir}" -mindepth 1 -maxdepth 1 -type d ! -name "${tag}" -exec rm -rf {} + - fi - rm -rf "${base_dir}" - mkdir -p "${base_dir}" - - for asset in "${asset_list[@]}"; do - asset="$(printf '%s' "${asset}" | xargs)" - if [[ -z "${asset}" ]]; then - continue + else + if [[ -d "${root_dir}" ]]; then + find "${root_dir}" -mindepth 1 -maxdepth 1 -type d ! -name "${tag}" -exec rm -rf {} + fi + rm -rf "${base_dir}" + mkdir -p "${base_dir}" - marker="${base_dir}/.extracted-${asset}" - url="$(printf '%s' "${release_json}" | jq -r --arg name "${asset}" '.assets[] | select(.name == $name) | .browser_download_url')" - if [[ -z "${url}" || "${url}" == "null" ]]; then - echo "Asset not found in release ${tag}: ${asset}" >&2 - exit 1 - fi + for asset in "${asset_list[@]}"; do + asset="$(printf '%s' "${asset}" | xargs)" + if [[ -z "${asset}" ]]; then + continue + fi - tmp_tar="${base_dir}/${asset}" - echo "Downloading ${asset}..." - curl -fsSL -o "${tmp_tar}" "${url}" + marker="${base_dir}/.extracted-${asset}" + url="$(printf '%s' "${release_json}" | jq -r --arg name "${asset}" '.assets[] | select(.name == $name) | .browser_download_url')" + if [[ -z "${url}" || "${url}" == "null" ]]; then + echo "Asset not found in release ${tag}: ${asset}" >&2 + exit 1 + fi echo "Extracting ${asset}..." tar -xJf "${tmp_tar}" -C "${base_dir}" @@ -114,3 +120,14 @@ jobs: echo "Symlinks in ${WORKSPACE}:" find "${WORKSPACE}" -maxdepth 1 -type l -lname "${root_dir}/*" -printf "%p -> %l\n" + + artifact_tar="${RUNNER_TEMP}/clang-cross-${tag}.tar" + tar -cf "${artifact_tar}" -C "${base_dir}" . + echo "artifact_tar=${artifact_tar}" >> "${GITHUB_OUTPUT}" + + - name: Upload extracted toolchains artifact + if: ${{ inputs.upload_artifact }} + uses: actions/upload-artifact@v4 + with: + name: ${{ inputs.artifact_name }} + path: ${{ steps.fetch.outputs.artifact_tar }} From f9ba48a8be5ea986297273a8daab4294acd212c1 Mon Sep 17 00:00:00 2001 From: Steven Ramirez Rosa Date: Tue, 21 Jul 2026 13:07:47 -0700 Subject: [PATCH 2/2] [Workflow] Fix busybox workflow build and test actions Signed-off-by: Steven Ramirez Rosa --- .github/workflows/busybox-eld.yml | 111 +++++++++++------- .github/workflows/ci.yml | 1 - .github/workflows/clang-cross-download.yml | 47 +++++--- .../workflows/update-build-dashboard-data.yml | 1 + test/BusyBox/x86_64/test-failures.txt | 23 ++++ 5 files changed, 120 insertions(+), 63 deletions(-) create mode 100644 test/BusyBox/x86_64/test-failures.txt diff --git a/.github/workflows/busybox-eld.yml b/.github/workflows/busybox-eld.yml index c81ae3ad0..5b9eeda0d 100644 --- a/.github/workflows/busybox-eld.yml +++ b/.github/workflows/busybox-eld.yml @@ -1,10 +1,10 @@ name: BusyBox with ELD on: - pull_request: {} # Uncomment only to test this WF file update. workflow_dispatch: - #schedule: - # - cron: "0 5 * * *" + # pull_request: {} + schedule: + - cron: "0 5 * * *" permissions: contents: write @@ -42,6 +42,7 @@ jobs: assets: ${{ matrix.toolchain_asset }} upload_artifact: true artifact_name: clang-cross-${{ matrix.arch }} + enabled: ${{ matrix.enabled == 1 }} build-busybox-with-eld: if: github.repository == 'qualcomm/eld' @@ -55,55 +56,66 @@ jobs: busybox_arch: x86_64 target_triple: x86_64-unknown-linux-musl toolchain_dir: x86_64-unknown-linux-musl - toolchain_asset: x86_64-unknown-linux-musl.tar.xz qemu_bin: "" enabled: 1 - arch: riscv32 busybox_arch: riscv target_triple: riscv32-unknown-linux-musl toolchain_dir: riscv32-unknown-linux-musl - toolchain_asset: riscv32-unknown-linux-musl.tar.xz qemu_bin: qemu-riscv32 enabled: 0 - arch: riscv64 busybox_arch: riscv target_triple: riscv64-unknown-linux-musl toolchain_dir: riscv64-unknown-linux-musl - toolchain_asset: riscv64-unknown-linux-musl.tar.xz qemu_bin: qemu-riscv64 enabled: 0 - arch: arm busybox_arch: arm target_triple: arm-unknown-linux-musleabi toolchain_dir: arm-unknown-linux-musleabi - toolchain_asset: arm-unknown-linux-musleabi.tar.xz qemu_bin: qemu-arm enabled: 0 - arch: aarch64 busybox_arch: aarch64 target_triple: aarch64-unknown-linux-musl toolchain_dir: aarch64-unknown-linux-musl - toolchain_asset: aarch64-unknown-linux-musl.tar.xz qemu_bin: qemu-aarch64 enabled: 0 steps: - name: Checkout eld - if: matrix.enabled == 1 - uses: actions/checkout@v4 + if: matrix.enabled == 1 && github.event_name != 'pull_request' + uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0 with: repository: qualcomm/eld ref: main fetch-depth: 1 - - name: Install dependencies + - name: Checkout eld PR branch + if: matrix.enabled == 1 && github.event_name == 'pull_request' + uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0 + with: + repository: ${{ github.event.pull_request.head.repo.full_name }} + ref: ${{ github.event.pull_request.head.ref }} + fetch-depth: 1 + + - name: Configure workflow environment variables if: matrix.enabled == 1 - shell: bash - run: | - sudo apt update - sudo apt install -y make - if [[ -n "${{ matrix.qemu_bin }}" ]]; then - sudo apt install -y qemu-user - fi + uses: ./.github/workflows/ConfigureBuildWorkflowENV + + - name: Record pre-build entry + if: github.event_name == 'schedule' && matrix.enabled == 1 + uses: ./.github/workflows/BuildStatusDataRecorder + with: + enabled: true + project: "llvm-project/llvm/tools/eld" + stage: "pre-" + workflow-name: "busybox" + record-mode: "record" + status: "fail" + run-id: ${{github.run_id}} + arch-name: "${{ matrix.arch }}" + branch-name: "${{env.BUILD_BRANCH}}" - name: Fetch latest nightly toolset if: matrix.enabled == 1 @@ -111,7 +123,7 @@ jobs: - name: Download clang-cross toolchain artifact if: matrix.enabled == 1 - uses: actions/download-artifact@v4 + uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c #v8.0.1 with: name: clang-cross-${{ matrix.arch }} path: clang-cross @@ -168,46 +180,55 @@ jobs: ELD_BIN: ${{ env.ELD_BIN }} run: | set -euo pipefail - export PATH="${CROSS_TOOLCHAIN_ROOT}/bin:${PATH}" command -v "${TARGET_TRIPLE}-clang" command -v ld.eld "${TARGET_TRIPLE}"-clang --version "${ELD_BIN}" --version + SYSROOT="${CROSS_TOOLCHAIN_ROOT}/${TARGET_TRIPLE}/sysroot" + MUSL_LINKER="$(find "${SYSROOT}/lib" -name 'ld-musl-*.so.1' | head -1)" + cd busybox make defconfig + make -j"$(nproc)" \ ARCH="${BUSYBOX_ARCH}" \ CC="${TARGET_TRIPLE}-clang --ld-path=${ELD_BIN}" \ - HOSTCC=clang + HOSTCC=clang \ + STRIP="${TARGET_TRIPLE}-strip" \ + LDFLAGS="-Wl,-dynamic-linker,${MUSL_LINKER} -Wl,-rpath,${SYSROOT}/lib" - name: Run BusyBox tests if: matrix.enabled == 1 + timeout-minutes: 5 shell: bash - env: - CROSS_TOOLCHAIN_ROOT: ${{ env.CROSS_TOOLCHAIN_ROOT }} - TARGET_TRIPLE: ${{ matrix.target_triple }} - QEMU_BIN: ${{ matrix.qemu_bin }} run: | set -euo pipefail - export PATH="${CROSS_TOOLCHAIN_ROOT}/bin:${PATH}" - - if [[ -n "${QEMU_BIN}" ]]; then - SYSROOT="${CROSS_TOOLCHAIN_ROOT}/${TARGET_TRIPLE}/sysroot" - if [[ ! -d "${SYSROOT}" ]]; then - SYSROOT="${CROSS_TOOLCHAIN_ROOT}/sysroot" - fi - if [[ ! -d "${SYSROOT}" ]]; then - echo "Unable to find sysroot under ${CROSS_TOOLCHAIN_ROOT}" >&2 - exit 1 - fi - - cd busybox - mv busybox busybox.bin - printf '%s\n' '#!/usr/bin/env bash' \ - "exec ${QEMU_BIN} -L ${SYSROOT} \"\$(dirname \"\$0\")/busybox.bin\" \"\$@\"" > busybox - chmod +x busybox - fi - cd busybox/testsuite - env SKIP_KNOWN_BUGS=1 SKIP_INTERNET_TESTS=1 ./runtest + + # env --default-signal resets all signals (including SIGPIPE) to their + # default handlers before exec-ing the shell. This is necessary because + # the GitHub Actions runner sets SIGPIPE to SIG_IGN, which is inherited + # by all child processes and causes 'yes' in md5sum.tests to spin + # forever instead of dying when the pipe is closed by 'head'. + env SKIP_KNOWN_BUGS=1 SKIP_INTERNET_TESTS=1 env --default-signal /bin/sh ./runtest 2>&1 | tee /tmp/busybox-test-output.txt || true + + - name: Validate test results with FileCheck + if: matrix.enabled == 1 + shell: bash + run: | + FileCheck --input-file=/tmp/busybox-test-output.txt "${{ github.workspace }}/test/BusyBox/${{ matrix.arch }}/test-failures.txt" + + - name: Update build entry + if: github.event_name == 'schedule' && matrix.enabled == 1 + uses: ./.github/workflows/BuildStatusDataRecorder + with: + enabled: true + project: "llvm-project/llvm/tools/eld" + stage: "post-" + workflow-name: "busybox" + record-mode: "update" + status: "pass" + run-id: ${{github.run_id}} + arch-name: "${{ matrix.arch }}" + branch-name: "${{env.BUILD_BRANCH}}" \ No newline at end of file diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index c6a59b299..f20c8319d 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -11,7 +11,6 @@ on: - '.github/workflows/docs-multiversion.yaml' - '.github/workflows/ci-win.yml' - '.github/workflows/clang-cross-download.yml' - - '.github/workflows/FetchClangCrossToolchain.yml' - '.github/workflows/clang-cross-schedule.yml' - '.github/workflows/busybox-eld.yml' - '.github/workflows/nightly-musl-builder.yml' diff --git a/.github/workflows/clang-cross-download.yml b/.github/workflows/clang-cross-download.yml index 8c117de42..4fc49857b 100644 --- a/.github/workflows/clang-cross-download.yml +++ b/.github/workflows/clang-cross-download.yml @@ -27,12 +27,18 @@ on: required: false type: string default: "clang-cross-toolchains" + enabled: + description: "Set to false to skip this job entirely (used to disable matrix entries)" + required: false + type: boolean + default: true permissions: contents: write jobs: download: + if: ${{ inputs.enabled }} runs-on: ${{ inputs.runner }} steps: - name: Download and extract release assets @@ -69,25 +75,31 @@ jobs: if [[ "${all_extracted}" == "true" ]]; then echo "Latest release ${tag} already fully extracted." - else - if [[ -d "${root_dir}" ]]; then - find "${root_dir}" -mindepth 1 -maxdepth 1 -type d ! -name "${tag}" -exec rm -rf {} + + exit 0 + fi + + if [[ -d "${root_dir}" ]]; then + find "${root_dir}" -mindepth 1 -maxdepth 1 -type d ! -name "${tag}" -exec rm -rf {} + + fi + rm -rf "${base_dir}" + mkdir -p "${base_dir}" + + for asset in "${asset_list[@]}"; do + asset="$(printf '%s' "${asset}" | xargs)" + if [[ -z "${asset}" ]]; then + continue fi - rm -rf "${base_dir}" - mkdir -p "${base_dir}" - for asset in "${asset_list[@]}"; do - asset="$(printf '%s' "${asset}" | xargs)" - if [[ -z "${asset}" ]]; then - continue - fi + marker="${base_dir}/.extracted-${asset}" + url="$(printf '%s' "${release_json}" | jq -r --arg name "${asset}" '.assets[] | select(.name == $name) | .browser_download_url')" + if [[ -z "${url}" || "${url}" == "null" ]]; then + echo "Asset not found in release ${tag}: ${asset}" >&2 + exit 1 + fi - marker="${base_dir}/.extracted-${asset}" - url="$(printf '%s' "${release_json}" | jq -r --arg name "${asset}" '.assets[] | select(.name == $name) | .browser_download_url')" - if [[ -z "${url}" || "${url}" == "null" ]]; then - echo "Asset not found in release ${tag}: ${asset}" >&2 - exit 1 - fi + tmp_tar="${base_dir}/${asset}" + echo "Downloading ${asset}..." + curl -fsSL -o "${tmp_tar}" "${url}" echo "Extracting ${asset}..." tar -xJf "${tmp_tar}" -C "${base_dir}" @@ -127,7 +139,8 @@ jobs: - name: Upload extracted toolchains artifact if: ${{ inputs.upload_artifact }} - uses: actions/upload-artifact@v4 + uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a #v7.0.1 with: name: ${{ inputs.artifact_name }} + retention-days: 1 path: ${{ steps.fetch.outputs.artifact_tar }} diff --git a/.github/workflows/update-build-dashboard-data.yml b/.github/workflows/update-build-dashboard-data.yml index 3ef9f4cb4..835dd1740 100644 --- a/.github/workflows/update-build-dashboard-data.yml +++ b/.github/workflows/update-build-dashboard-data.yml @@ -42,6 +42,7 @@ jobs: python3 record_builds.py --workflow reverse_iterator --emit python3 record_builds.py --workflow release --emit python3 record_builds.py --workflow windows_nightly --emit + python3 record_builds.py --workflow busybox --emit rm -f record_builds.py build-status.db rm -rf ${DASH_DIR} cd .. diff --git a/test/BusyBox/x86_64/test-failures.txt b/test/BusyBox/x86_64/test-failures.txt new file mode 100644 index 000000000..007209bd6 --- /dev/null +++ b/test/BusyBox/x86_64/test-failures.txt @@ -0,0 +1,23 @@ +#BEGIN_COMMENT +# BusyBox's awk_sub() implements gsub() by repeatedly calling regexec() while +# advancing a pointer through the string. Correctly handling anchors like +# \< (word start) on each iteration requires REG_STARTEND, a BSD/glibc regex +# extension not present in POSIX. musl's regex.h defines no REG_STARTEND, so +# the build falls back to the code path busybox's own source comments already +# flag as buggy: it reruns regexec() on the advanced pointer, so the regex +# engine treats that mid-string position as a word start too, and \