Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
22 commits
Select commit Hold shift + click to select a range
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
8 changes: 7 additions & 1 deletion .github/repository-settings.json
Original file line number Diff line number Diff line change
Expand Up @@ -41,7 +41,13 @@
},
"required_status_checks": {
"contexts": [
"build-and-test"
"build-and-test",
"compiler-gcc",
"compiler-clang",
"starlong-build-and-smoke",
"release-portability",
"codeql-c-cpp",
"codeql-python"
],
"strict": true
},
Expand Down
190 changes: 176 additions & 14 deletions .github/workflows/blackstar-ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,8 @@ name: BlackSTAR CI

on:
push:
branches:
- main
pull_request:
workflow_dispatch:

Expand All @@ -26,7 +28,7 @@ jobs:
- name: Install build dependencies
run: |
sudo apt-get update
sudo apt-get install -y g++ jq make python3-yaml zlib1g-dev
sudo apt-get install -y g++ jq make python3-yaml samtools zlib1g-dev

- name: Install architecture renderer
run: npm ci --prefix extras/docs
Expand All @@ -41,13 +43,18 @@ jobs:
bash -n extras/benchmarks/preparePublicAlignmentFixture.sh
bash -n extras/benchmarks/runAlignmentA00.sh
python3 -m py_compile \
extras/benchmarks/makeFastqSubset.py \
extras/benchmarks/makePairedFastqSubset.py \
extras/benchmarks/quietSystemGate.py \
extras/benchmarks/summarizeAlignmentA00.py \
extras/benchmarks/compareAlignmentRuns.py \
extras/benchmarks/compareGeneralizationRuns.py \
extras/benchmarks/evaluateAlignmentNoninferiority.py \
extras/benchmarks/runAlignmentPairs.py
extras/benchmarks/runAlignmentPairs.py \
extras/benchmarks/runGeneralizationPairs.py
bash -n extras/benchmarks/runGeneralizationMode.sh
extras/tests/scripts/testBenchmarkHarness.sh
extras/tests/scripts/testGeneralizationHarness.sh

- name: Validate successor metadata
run: |
Expand All @@ -57,13 +64,16 @@ jobs:
extras/maintenance/check_detachment_readiness.py \
extras/maintenance/finalize_successor_repo.py \
extras/maintenance/validate_successor_metadata.py \
extras/scripts/inspectBlackSTARBinary.py \
extras/scripts/generateBlackSTARSbom.py
python3 extras/maintenance/validate_successor_metadata.py

- name: Build BlackSTAR
- name: Build BlackSTAR release variants
env:
JOBS: "2"
run: extras/scripts/buildBlackSTARRelease.sh
run: |
CPU_TARGET=baseline extras/scripts/buildBlackSTARRelease.sh
CPU_TARGET=avx2 extras/scripts/buildBlackSTARRelease.sh

- name: Build independent release reproduction
env:
Expand All @@ -72,34 +82,84 @@ jobs:
run: |
git worktree add --detach "${RUNNER_TEMP}/release-source-2" HEAD
cd "${RUNNER_TEMP}/release-source-2"
extras/scripts/buildBlackSTARRelease.sh
CPU_TARGET=baseline extras/scripts/buildBlackSTARRelease.sh
CPU_TARGET=avx2 extras/scripts/buildBlackSTARRelease.sh

- name: Verify cross-path release reproducibility
run: extras/scripts/compareBlackSTARReleases.sh dist "${RUNNER_TEMP}/release-build-2"
run: |
CPU_TARGET=baseline extras/scripts/compareBlackSTARReleases.sh dist "${RUNNER_TEMP}/release-build-2"
CPU_TARGET=avx2 extras/scripts/compareBlackSTARReleases.sh dist "${RUNNER_TEMP}/release-build-2"

- name: Verify release identity and OpenMP linkage
run: |
version="$(sed -n 's/^#define BLACKSTAR_VERSION "\(.*\)"$/\1/p' source/VERSION)"
baseline="dist/blackstar-${version}-linux-x86_64-baseline"
avx2="dist/blackstar-${version}-linux-x86_64-avx2"
test "$(source/STAR --version)" = "2.7.11b-blackstar.3"
extras/tests/scripts/testBlackstarVersion.sh
EXPECTED_CPU_TARGET=avx2 extras/tests/scripts/testBlackstarVersion.sh
ldd source/STAR | grep -Eq 'libgomp|libomp'
test -f dist/blackstar-1.0.0-linux-x86_64.spdx.json
test -f dist/blackstar-1.0.0-linux-x86_64/LICENSE
test -f dist/blackstar-1.0.0-linux-x86_64/ATTRIBUTION.md
jq -e '
test -f "${baseline}.spdx.json"
test -x "${baseline}.STAR"
test -f "${baseline}.STAR.sha256"
test -f "${baseline}.build-info.tsv"
test -f "${baseline}.compatibility.tsv"
test -f "${baseline}.ldd.txt"
test -f "${baseline}/LICENSE"
test -f "${baseline}/ATTRIBUTION.md"
test -f "${avx2}.spdx.json"
test -x "${avx2}.STAR"
test -f "${avx2}.STAR.sha256"
test -f "${avx2}.build-info.tsv"
test -f "${avx2}.compatibility.tsv"
test -f "${avx2}.ldd.txt"
(
cd dist
sha256sum -c "$(basename "${baseline}").STAR.sha256"
sha256sum -c "$(basename "${avx2}").STAR.sha256"
)
grep -Fxq $'cpu_target\tbaseline' \
"${baseline}/compatibility.tsv"
grep -Fxq $'ymm_instructions\tabsent' \
"${baseline}/compatibility.tsv"
grep -Fxq $'cpu_target\tavx2' \
"${avx2}/compatibility.tsv"
grep -Fxq $'ymm_instructions\tpresent' \
"${avx2}/compatibility.tsv"
jq -e --arg version "${version}" '
.spdxVersion == "SPDX-2.3" and
(.packages[] | select(.name == "BlackSTAR").versionInfo) == "1.0.0"
' dist/blackstar-1.0.0-linux-x86_64.spdx.json
(.packages[] | select(.name == "BlackSTAR").versionInfo) == $version
' "${baseline}.spdx.json"
test "$(
jq -r .documentNamespace \
"${baseline}.spdx.json"
)" != "$(
jq -r .documentNamespace \
"${avx2}.spdx.json"
)"

- name: Verify release variant result equivalence
run: extras/tests/scripts/testReleaseVariants.sh

- name: Build upstream 2.7.11b compatibility oracle
run: |
git worktree add "${RUNNER_TEMP}/star-upstream-2.7.11b" 2.7.11b
make -C "${RUNNER_TEMP}/star-upstream-2.7.11b/source" -j2 STAR
echo "UPSTREAM_STAR_BIN=${RUNNER_TEMP}/star-upstream-2.7.11b/source/STAR" >> "${GITHUB_ENV}"

- name: Run specialized-mode compatibility tests
env:
KEEP_TEST_OUTPUT: "1"
OUT_DIR: ${{ runner.temp }}/specialized-modes
THREADS: "4"
run: extras/tests/scripts/testSpecializedModes.sh

- name: Run focused sanitizer tests
run: |
extras/tests/scripts/testAlignmentThreadAffinity.sh
extras/tests/scripts/testNumaMemoryPolicy.sh
extras/tests/scripts/testReadChunkConfig.sh
extras/tests/scripts/testTranscriptomePrimary.sh
extras/tests/scripts/testSystemMemory.sh
extras/tests/scripts/testPackedArray.sh
extras/tests/scripts/testSuffixComparator.sh
extras/tests/scripts/testTranscriptInitialization.sh
Expand Down Expand Up @@ -141,6 +201,7 @@ jobs:
${{ runner.temp }}/release-build-2
${{ runner.temp }}/genome-insert-hardening
${{ runner.temp }}/saindex-strategies
${{ runner.temp }}/specialized-modes

compiler-build:
name: compiler-${{ matrix.name }}
Expand Down Expand Up @@ -169,6 +230,107 @@ jobs:
CXX: ${{ matrix.cxx }}
run: |
make -C source -j2 STAR CXX="${CXX}"
version="$(sed -n 's/^#define BLACKSTAR_VERSION "\(.*\)"$/\1/p' source/VERSION)"
test "$(source/STAR --version)" = "2.7.11b-blackstar.3"
source/STAR --version-json | jq -e '.blackstar_version == "1.0.0"'
source/STAR --version-json |
jq -e --arg version "${version}" '.blackstar_version == $version'
ldd source/STAR | grep -Eq 'libgomp|libomp'

starlong-build-and-smoke:
runs-on: ubuntu-24.04
timeout-minutes: 35
steps:
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
with:
fetch-depth: 0

- name: Install build dependencies
run: |
sudo apt-get update
sudo apt-get install -y g++ make zlib1g-dev

- name: Build short-read and long-read binaries in one tree
run: |
make -C source -j2 STAR
make -C source -j2 STARlong
test -x source/STAR
test -x source/STARlong

- name: Build official STARlong compatibility oracle
run: |
git worktree add --detach "${RUNNER_TEMP}/star-upstream-long" 2.7.11b
make -C "${RUNNER_TEMP}/star-upstream-long/source" -j2 STARlong
echo "UPSTREAM_STARLONG_BIN=${RUNNER_TEMP}/star-upstream-long/source/STARlong" >> "${GITHUB_ENV}"

- name: Exercise STARlong-only code and high-thread chunk sizing
env:
THREADS: "96"
KEEP_TEST_OUTPUT: "1"
OUT_DIR: ${{ runner.temp }}/starlong-smoke
REQUIRE_UPSTREAM_STARLONG: "1"
run: extras/tests/scripts/testSTARlong.sh

- name: Upload STARlong smoke evidence
if: always()
uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1
with:
name: blackstar-starlong-${{ github.run_id }}
if-no-files-found: ignore
retention-days: 14
path: ${{ runner.temp }}/starlong-smoke

release-portability:
runs-on: ubuntu-24.04
container: ubuntu:20.04
timeout-minutes: 45
steps:
- name: Install older-userspace build dependencies
env:
DEBIAN_FRONTEND: noninteractive
run: |
apt-get update
apt-get install -y binutils g++ git gzip make python3 xxd zlib1g-dev

- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
with:
fetch-depth: 0

- name: Build explicit CPU variants on glibc 2.31
env:
DIST_DIR: ${{ runner.temp }}/portable-dist
JOBS: "2"
run: |
git config --global --add safe.directory "${GITHUB_WORKSPACE}"
CPU_TARGET=baseline extras/scripts/buildBlackSTARRelease.sh
CPU_TARGET=avx2 extras/scripts/buildBlackSTARRelease.sh

- name: Verify ABI and ISA floors
env:
DIST_DIR: ${{ runner.temp }}/portable-dist
run: |
version="$(sed -n 's/^#define BLACKSTAR_VERSION "\(.*\)"$/\1/p' source/VERSION)"
for target in baseline avx2; do
compatibility="${DIST_DIR}/blackstar-${version}-linux-x86_64-${target}/compatibility.tsv"
minimum_glibc="$(awk -F '\t' '$1=="minimum_glibc" {print $2}' "${compatibility}")"
dpkg --compare-versions "${minimum_glibc}" le "2.31"
done
awk -F '\t' \
'$1=="ymm_instructions" && $2=="absent" {found=1} END {exit !found}' \
"${DIST_DIR}/blackstar-${version}-linux-x86_64-baseline/compatibility.tsv"
awk -F '\t' \
'$1=="ymm_instructions" && $2=="present" {found=1} END {exit !found}' \
"${DIST_DIR}/blackstar-${version}-linux-x86_64-avx2/compatibility.tsv"

- name: Verify release variant result equivalence
env:
DIST_DIR: ${{ runner.temp }}/portable-dist
run: extras/tests/scripts/testReleaseVariants.sh

- name: Upload portability evidence
if: always()
uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1
with:
name: blackstar-portable-release-${{ github.run_id }}
if-no-files-found: error
retention-days: 14
path: ${{ runner.temp }}/portable-dist
Loading
Loading