diff --git a/README.md b/README.md index b4fa686..39cd30e 100644 --- a/README.md +++ b/README.md @@ -14,6 +14,7 @@ The filesystem no longer encodes release policy. Instead: - packages with `"release_ring": "fast"` also build directly for `stable` - all other packages reach `stable` by promoting tested edge artifacts with `bin/repo migrate` - AUR sync behavior is controlled by `source`, `sync`, `aur`, patches, and hooks in `.omarchy/` +- packages can opt out of unscoped builds with `skip_build`; explicit `--package` builds remain available ## Prerequisites ### aarch64 Builds (Optional) @@ -231,6 +232,10 @@ Minimal examples: { "source": "local" } ``` +```json +{ "source": "local", "skip_build": true } +``` + ```json { "source": "aur", "pkgrel": { "suffix": 1 } } ``` @@ -241,13 +246,15 @@ Fields: - `sync`: optional for AUR packages; defaults to `true`. Set `false` for AUR-origin packages that Omarchy maintains manually. - `aur`: optional AUR package name when it differs from the local package directory, usually for split packages. - `release_ring`: optional. `fast` means the package is built directly for stable as well as edge. Packages without a ring build in edge and reach stable through tested artifact promotion (`bin/repo migrate`). +- `skip_build`: optional boolean; defaults to `false`. Set `true` to exclude a package from scheduled version checks and unscoped builds. The package can still be built explicitly with `bin/repo release --package `. - `pkgrel`: optional Omarchy pkgrel suffix for a version-pinned rebuild bump. This emits `.` instead of replacing AUR's pkgrel. `offset` can be used only when preserving monotonic upgrades from old absolute pkgrel bumps. The metadata is removed automatically when AUR sync changes `pkgver`; the current package version is read from the checked-in PKGBUILD, so the version is not duplicated in JSON. - `upstream_commit`: set by `bin/sync-aur` for AUR packages. Used by `bin/package-worktree` to recreate the exact raw AUR package that Omarchy last synced. ### Build Matrix -- **Edge builds** (`--mirror edge`): all packages in `pkgbuilds/*` -- **Stable builds** (`--mirror stable`): packages with `"release_ring": "fast"` +- **Edge unscoped builds** (`--mirror edge`): packages in `pkgbuilds/*` unless `"skip_build": true` +- **Stable unscoped builds** (`--mirror stable`): packages with `"release_ring": "fast"` unless `"skip_build": true` +- **Explicit builds** (`--package `): the selected package, including packages with `"skip_build": true`, subject to mirror eligibility - **Stable promotion** (`bin/repo migrate`): copies tested edge artifacts into stable ## Adding Packages diff --git a/bin/build b/bin/build index 1051cc2..62cc623 100755 --- a/bin/build +++ b/bin/build @@ -54,8 +54,9 @@ while [[ $# -gt 0 ]]; do echo " -h, --help Show this help message" echo "" echo "This script builds packages from pkgbuilds/ based on .omarchy/package.json:" - echo " --mirror edge: builds all packages" - echo " --mirror stable: builds packages with release_ring=fast only" + echo " --mirror edge: builds packages not marked skip_build=true" + echo " --mirror stable: builds fast-ring packages not marked skip_build=true" + echo " --package: explicitly builds selected packages, even with skip_build=true" echo "" echo "Or build specific packages with --package:" echo " Package names should match directories in pkgbuilds/" @@ -120,7 +121,7 @@ mkdir -p "$BUILD_OUTPUT_DIR" if [[ -n "$PACKAGES" ]]; then print_info "Building packages: $PACKAGES" else - print_info "Building all packages for $MIRROR mirror" + print_info "Building unscoped packages for $MIRROR mirror" fi # Build/update the Docker image diff --git a/bin/check-versions b/bin/check-versions index 3fd57df..4ac27e3 100755 --- a/bin/check-versions +++ b/bin/check-versions @@ -129,7 +129,7 @@ check_mirror() { needs_build=true packages+=("$pkg") fi - done < <(packages_for_mirror "$mirror") + done < <(packages_for_unscoped_build "$mirror") echo "" diff --git a/bin/list-packages b/bin/list-packages index a2f5d5b..8cc4376 100755 --- a/bin/list-packages +++ b/bin/list-packages @@ -135,13 +135,14 @@ package_matches_filters() { } emit_package_json() { - local name="$1" source="$2" aur="$3" sync="$4" ring="$5" pkgrel="$6" upstream_commit="$7" patches="$8" hook="$9" version="${10}" path="${11}" + local name="$1" source="$2" aur="$3" sync="$4" skip_build="$5" ring="$6" pkgrel="$7" upstream_commit="$8" patches="$9" hook="${10}" version="${11}" path="${12}" jq -n \ --arg name "$name" \ --arg source "$source" \ --arg aur "$aur" \ --arg sync "$sync" \ + --arg skip_build "$skip_build" \ --arg release_ring "$ring" \ --argjson pkgrel "$pkgrel" \ --arg upstream_commit "$upstream_commit" \ @@ -149,7 +150,7 @@ emit_package_json() { --arg hook "$hook" \ --arg version "$version" \ --arg path "$path" \ - '{name: $name, source: $source, aur: $aur, sync: (if $sync == "" then null else $sync == "true" end), release_ring: $release_ring, pkgrel: $pkgrel, upstream_commit: $upstream_commit, patches: $patches, post_sync_hook: ($hook == "true"), version: $version, path: $path}' + '{name: $name, source: $source, aur: $aur, sync: (if $sync == "" then null else $sync == "true" end), skip_build: ($skip_build == "true"), release_ring: $release_ring, pkgrel: $pkgrel, upstream_commit: $upstream_commit, patches: $patches, post_sync_hook: ($hook == "true"), version: $version, path: $path}' } if [[ "$LIST_REPO" == true ]]; then @@ -178,6 +179,7 @@ while IFS= read -r pkgdir; do else sync="" fi + skip_build=$(jq -r 'if has("skip_build") then .skip_build else false end' "$metadata") package_matches_filters "$source" "$sync" "$ring" || continue @@ -191,11 +193,12 @@ while IFS= read -r pkgdir; do version=$(get_pkgbuild_version "$pkgdir") relpath=${pkgdir#"$BUILD_ROOT/"} - printf '%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\n' \ + printf '%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\n' \ "$name" \ "$source" \ "$aur_display" \ "$([[ -n "$sync" ]] && [[ "$sync" == true ]] && echo yes || ([[ "$sync" == false ]] && echo no || echo -))" \ + "$([[ "$skip_build" == true ]] && echo yes || echo no)" \ "$ring" \ "$pkgrel_display" \ "$upstream_display" \ @@ -207,7 +210,7 @@ while IFS= read -r pkgdir; do if [[ "$first_json" == false ]]; then printf ',\n' >> "$json_file" fi - emit_package_json "$name" "$source" "$aur" "$sync" "$ring" "$pkgrel" "$upstream_commit" "$patches" "$hook" "$version" "$relpath" >> "$json_file" + emit_package_json "$name" "$source" "$aur" "$sync" "$skip_build" "$ring" "$pkgrel" "$upstream_commit" "$patches" "$hook" "$version" "$relpath" >> "$json_file" first_json=false done < <(package_dirs) @@ -220,11 +223,11 @@ fi if command -v gum >/dev/null 2>&1; then gum table --print --separator $'\t' \ - --columns Package,Source,AUR,Sync,Release_Ring,Pkgrel,Upstream,Patches,Post_Sync,Version,Path \ + --columns Package,Source,AUR,Sync,Skip_Build,Release_Ring,Pkgrel,Upstream,Patches,Post_Sync,Version,Path \ < "$rows_file" else { - printf 'Package\tSource\tAUR\tSync\tRelease_Ring\tPkgrel\tUpstream\tPatches\tPost_Sync\tVersion\tPath\n' + printf 'Package\tSource\tAUR\tSync\tSkip_Build\tRelease_Ring\tPkgrel\tUpstream\tPatches\tPost_Sync\tVersion\tPath\n' cat "$rows_file" } | column -t -s $'\t' fi diff --git a/build/build.sh b/build/build.sh index 318bee1..092c381 100755 --- a/build/build.sh +++ b/build/build.sh @@ -1,6 +1,7 @@ #!/bin/bash # Build script - builds packages based on package metadata -# Edge builds all packages. Stable builds only packages in the fast release ring. +# Unscoped edge builds exclude skip_build packages. Stable also requires the fast release ring. +# Explicit --package selections may build packages with skip_build=true. # Setup directories ARCH=${ARCH:-x86_64} @@ -412,7 +413,7 @@ check_needs_build() { # Collect packages that should be built for the selected mirror collect_packages() { - packages_for_mirror "$MIRROR" + packages_for_unscoped_build "$MIRROR" } # Main execution diff --git a/helpers/package-metadata.sh b/helpers/package-metadata.sh index 213de85..1160fff 100644 --- a/helpers/package-metadata.sh +++ b/helpers/package-metadata.sh @@ -8,6 +8,7 @@ # { "source": "aur", "sync": false } # { "source": "aur", "aur": "different-aur-name" } # { "source": "aur", "release_ring": "fast" } +# { "source": "aur", "skip_build": true } # { "source": "aur", "pkgrel": { "suffix": 1, "offset": 1 } } # { "source": "local" } # @@ -75,6 +76,17 @@ package_is_fast_ring() { [[ "$(package_release_ring "$pkgdir")" == "fast" ]] } +package_build_skipped() { + local pkgdir="$1" + local metadata skip_build + + metadata=$(metadata_file_for_dir "$pkgdir") + [[ -f "$metadata" ]] || return 1 + + skip_build=$(jq -r 'if has("skip_build") then .skip_build else false end' "$metadata") + [[ "$skip_build" == "true" ]] +} + package_has_metadata() { local pkgdir="$1" [[ -f "$(metadata_file_for_dir "$pkgdir")" ]] @@ -133,6 +145,16 @@ packages_for_mirror() { done } +packages_for_unscoped_build() { + local mirror="$1" + + package_dirs | while IFS= read -r pkgdir; do + if package_builds_for_mirror "$pkgdir" "$mirror" && ! package_build_skipped "$pkgdir"; then + basename "$pkgdir" + fi + done +} + package_extract_vcs_hash_from_version() { local version="$1" local version_no_pkgrel="${version%-*}" @@ -212,7 +234,7 @@ package_git_upstream_hash() { validate_package_metadata() { local pkgdir="$1" - local metadata source sync aur ring pkgrel_type + local metadata source sync skip_build aur ring pkgrel_type metadata=$(metadata_file_for_dir "$pkgdir") [[ -f "$metadata" ]] || { echo "missing metadata: $metadata"; return 1; } @@ -231,6 +253,12 @@ validate_package_metadata() { *) echo "invalid sync for $(basename "$pkgdir"): must be boolean"; return 1 ;; esac + skip_build=$(jq -r 'if has("skip_build") then .skip_build | type else "missing" end' "$metadata") + case "$skip_build" in + boolean|missing) ;; + *) echo "invalid skip_build for $(basename "$pkgdir"): must be boolean"; return 1 ;; + esac + aur=$(jq -r 'if has("aur") then .aur | type else "missing" end' "$metadata") case "$aur" in string|missing) ;; diff --git a/pkgbuilds/linux-ptl/.omarchy/package.json b/pkgbuilds/linux-ptl/.omarchy/package.json index 2a9719d..c3ed389 100644 --- a/pkgbuilds/linux-ptl/.omarchy/package.json +++ b/pkgbuilds/linux-ptl/.omarchy/package.json @@ -1,3 +1,4 @@ { - "source": "local" + "source": "local", + "skip_build": true }