Merge pull request #195 from oceanapplications/aarch64-arch-support

Own and build nine ARM-compatible packages
This commit is contained in:
Ryan Hughes authored and GitHub committed 2026-09-03 22:19:39 -04:00
commit 7860c4b2e4
19 files changed
+398 -74

No files matched your search

+43 -3
View File
@@ -322,9 +322,49 @@ recent releases are considered. The provider fails closed on anything it cannot
read — an unusable tag, timestamp, or checksum stops the sync rather than being read — an unusable tag, timestamp, or checksum stops the sync rather than being
skipped. skipped.
A package may also declare `"min_release_age": "24h"` (`s`/`m`/`h`/`d` suffix or Projects that publish version tags but no checksum manifest can declare the
bare seconds) to quarantine fresh releases until maintainers have had time to tag repository, the exact tag shape, and every source that should be hashed:
pull a bad or compromised one. The newest release that has cleared the window
```json
"upstream": {
"git_tags": "https://github.com/owner/project.git",
"tag_pattern": "v{pkgver}",
"sources": {
"any": ["https://github.com/owner/project/archive/refs/tags/{tag}.tar.gz"]
}
}
```
The newest matching tag is selected with pacman's `vercmp`; unrelated tags are
ignored. `tag_pattern` must contain exactly one `{pkgver}`. Source templates may
use `{tag}` and `{pkgver}`. Each expanded URL must be HTTPS and is downloaded
only when the discovered version is newer. A checked-in patch or other local
source can be included as `file:patch-name.patch`; it is hashed from the package
directory. Keys such as `any`, `x86_64`, and `aarch64` select the corresponding
`sha256sums` array.
npm packages use the same source mapping, with `{npm_tarball}` available for
the tarball named by the selected dist-tag:
```json
"upstream": {
"npm": "@scope/package",
"dist_tag": "latest",
"sources": {
"any": ["{npm_tarball}", "https://example.com/v{pkgver}/CHANGELOG.md"]
}
}
```
`dist_tag` defaults to `latest`. The registry's publication timestamp is
carried into the provider result, so `min_release_age` works for npm packages.
Exactly one of `github`, `git_tags`, or `npm` may appear in a declaration.
A timestamped provider may also declare `"min_release_age": "24h"`
(`s`/`m`/`h`/`d` suffix or bare seconds) to quarantine fresh releases until
maintainers have had time to pull a bad or compromised one. GitHub Releases and
npm provide publication times; raw git tags do not, so combining `git_tags`
with this policy fails closed. The newest release that has cleared the window
ships, so a fast release cadence cannot starve updates. The window is enforced ships, so a fast release cadence cannot starve updates. The window is enforced
centrally: whatever reports the release must prove its age via `published_at`, centrally: whatever reports the release must prove its age via `published_at`,
or the sync fails. A maintainer deliberately shipping inside the window runs or the sync fails. A maintainer deliberately shipping inside the window runs
+90 -16
View File
@@ -18,11 +18,11 @@ Usage: $0 [PACKAGE...]
Update packages that track an upstream vendor release feed instead of the AUR. Update packages that track an upstream vendor release feed instead of the AUR.
A package whose upstream ships tagged GitHub releases with a checksum manifest Packages opt in declaratively through "upstream" in .omarchy/package.json.
opts in declaratively, via "upstream" in .omarchy/package.json (see Providers cover GitHub Releases with checksum manifests, semver-shaped git
helpers/upstream-github.sh for the schema); no code needed. Anything with a tags whose source URLs can be hashed, and npm dist-tags. See README.md for the
bespoke feed provides pkgbuilds/<package>/.omarchy/upstream.sh instead, a hook schemas. Anything outside those conventions may provide
that reports the newest upstream release as JSON on stdout: pkgbuilds/<package>/.omarchy/upstream.sh, a hook that reports JSON on stdout:
{ {
"pkgver": "1.2.3", "pkgver": "1.2.3",
@@ -332,27 +332,27 @@ sync_package() {
return 0 return 0
fi fi
local github_repo has_upstream=false local provider has_upstream=false
github_repo=$(package_upstream_github_repo "$package_dir") provider=$(package_upstream_provider "$package_dir")
if package_has_upstream_provider "$package_dir"; then if package_has_upstream_provider "$package_dir"; then
has_upstream=true has_upstream=true
fi fi
# A present-but-unusable declaration fails loudly; treating it like "no # A present-but-unusable declaration fails loudly; treating it like "no
# upstream source" would silently drop the package from scheduled runs. # upstream source" would silently drop the package from scheduled runs.
if [[ "$has_upstream" == true && -z "$github_repo" ]]; then if [[ "$has_upstream" == true && -z "$provider" ]]; then
print_error "Package $package has an unusable upstream declaration (needs a github owner/repo)" print_error "Package $package has an unusable or ambiguous upstream declaration"
((++FAILED)) ((++FAILED))
return 0 return 0
fi fi
if [[ -n "$github_repo" && -f "$hook" ]]; then if [[ -n "$provider" && -f "$hook" ]]; then
print_error "Package $package declares both upstream.github and an upstream.sh hook; keep exactly one" print_error "Package $package declares both an upstream provider and an upstream.sh hook; keep exactly one"
((++FAILED)) ((++FAILED))
return 0 return 0
fi fi
if [[ -z "$github_repo" && ! -f "$hook" ]]; then if [[ -z "$provider" && ! -f "$hook" ]]; then
if [[ "$SPECIFIC_MODE" == true ]]; then if [[ "$SPECIFIC_MODE" == true ]]; then
print_error "Package $package has neither an upstream declaration nor .omarchy/upstream.sh" print_error "Package $package has neither an upstream declaration nor .omarchy/upstream.sh"
((++FAILED)) ((++FAILED))
@@ -372,10 +372,15 @@ sync_package() {
print_info "Checking $package for upstream releases..." print_info "Checking $package for upstream releases..."
local release local release release_status=0
if [[ -n "$github_repo" ]]; then if [[ -n "$provider" ]]; then
if ! release=$(github_upstream_release "$package_dir" "$min_age"); then case "$provider" in
print_error "GitHub release provider failed for $package" github) release=$(github_upstream_release "$package_dir" "$min_age") || release_status=$? ;;
git_tags) release=$(git_tags_upstream_release "$package_dir") || release_status=$? ;;
npm) release=$(npm_upstream_release "$package_dir") || release_status=$? ;;
esac
if [[ ${release_status:-0} -ne 0 ]]; then
print_error "$provider upstream provider failed for $package"
((++FAILED)) ((++FAILED))
return 0 return 0
fi fi
@@ -614,10 +619,79 @@ EOF
echo '{"source": "local", "upstream": {"github": "example/tool"}}' > "$agepkg/.omarchy/package.json" echo '{"source": "local", "upstream": {"github": "example/tool"}}' > "$agepkg/.omarchy/package.json"
vst=0; validate_package_metadata "$agepkg" >/dev/null || vst=$? vst=0; validate_package_metadata "$agepkg" >/dev/null || vst=$?
check "upstream without checksums/assets is rejected" "1" "$vst" check "upstream without checksums/assets is rejected" "1" "$vst"
echo '{"source":"local","upstream":{"github":"example/tool","git_tags":"https://example/tool.git","checksums":"sums","assets":{"any":"tool"}}}' > "$agepkg/.omarchy/package.json"
vst=0; validate_package_metadata "$agepkg" >/dev/null || vst=$?
check "multiple provider types are rejected" "1" "$vst"
cp "$pkg/.omarchy/package.json" "$agepkg/.omarchy/package.json" cp "$pkg/.omarchy/package.json" "$agepkg/.omarchy/package.json"
vst=0; validate_package_metadata "$agepkg" >/dev/null || vst=$? vst=0; validate_package_metadata "$agepkg" >/dev/null || vst=$?
check "the real declaration shape is accepted" "0" "$vst" check "the real declaration shape is accepted" "0" "$vst"
echo "Git-tag provider:"
local tagpkg="$TEMP_DIR/selftest-tags" tag_sum remote_sum local_sum
mkdir -p "$tagpkg/.omarchy"
printf 'pkgver=1.0.0\npkgrel=4\nsha256sums=("old" "old")\n' > "$tagpkg/PKGBUILD"
printf 'local fixture\n' > "$tagpkg/local.patch"
cat > "$tagpkg/.omarchy/package.json" <<'EOF'
{
"source": "local",
"upstream": {
"git_tags": "https://example.test/tool.git",
"tag_pattern": "release/{pkgver}",
"sources": {
"any": ["https://downloads.example.test/tool-{pkgver}.tar.gz", "file:local.patch"]
}
}
}
EOF
git_tags_fetch_refs() {
printf '%s\n' \
'aaaa refs/tags/release/1.9.0' \
'bbbb refs/tags/release/1.10.0' \
'cccc refs/tags/not-a-release'
}
upstream_fetch_source() { printf 'remote fixture for %s\n' "$1" > "$2"; }
tag_sum=$(git_tags_upstream_release "$tagpkg")
remote_sum=$(printf 'remote fixture for %s\n' 'https://downloads.example.test/tool-1.10.0.tar.gz' | sha256sum | cut -d' ' -f1)
local_sum=$(sha256sum "$tagpkg/local.patch" | cut -d' ' -f1)
check "pacman ordering selects 1.10.0 over 1.9.0" "1.10.0" "$(jq -r '.pkgver' <<<"$tag_sum")"
check "remote source template is downloaded and hashed" "$remote_sum" "$(jq -r '.sha256sums.any[0]' <<<"$tag_sum")"
check "local source entry is hashed" "$local_sum" "$(jq -r '.sha256sums.any[1]' <<<"$tag_sum")"
vst=0; validate_package_metadata "$tagpkg" >/dev/null || vst=$?
check "git-tags declaration validates" "0" "$vst"
echo "npm provider:"
local npmpkg="$TEMP_DIR/selftest-npm" npm_sum npm_tar_sum npm_notes_sum
mkdir -p "$npmpkg/.omarchy"
printf 'pkgver=1.0.0\npkgrel=1\nsha256sums=("old" "old")\n' > "$npmpkg/PKGBUILD"
cat > "$npmpkg/.omarchy/package.json" <<'EOF'
{
"source": "local",
"upstream": {
"npm": "@example/tool",
"dist_tag": "latest",
"sources": {
"any": ["{npm_tarball}", "https://example.test/tool/{pkgver}/notes"]
}
}
}
EOF
npm_fetch_metadata() {
jq -n '{
"dist-tags": {latest: "2.0.0"},
versions: {"2.0.0": {dist: {tarball: "https://registry.npmjs.org/@example/tool/-/tool-2.0.0.tgz"}}},
time: {"2.0.0": "2024-01-02T03:04:05.000Z"}
}'
}
npm_sum=$(npm_upstream_release "$npmpkg")
npm_tar_sum=$(printf 'remote fixture for %s\n' 'https://registry.npmjs.org/@example/tool/-/tool-2.0.0.tgz' | sha256sum | cut -d' ' -f1)
npm_notes_sum=$(printf 'remote fixture for %s\n' 'https://example.test/tool/2.0.0/notes' | sha256sum | cut -d' ' -f1)
check "npm dist-tag selects its version" "2.0.0" "$(jq -r '.pkgver' <<<"$npm_sum")"
check "npm tarball placeholder is hashed" "$npm_tar_sum" "$(jq -r '.sha256sums.any[0]' <<<"$npm_sum")"
check "npm pkgver template is hashed" "$npm_notes_sum" "$(jq -r '.sha256sums.any[1]' <<<"$npm_sum")"
check "npm publication time is preserved" "2024-01-02T03:04:05.000Z" "$(jq -r '.published_at' <<<"$npm_sum")"
vst=0; validate_package_metadata "$npmpkg" >/dev/null || vst=$?
check "npm declaration validates" "0" "$vst"
# End to end over the real mise-bin package: its checked-in metadata and # End to end over the real mise-bin package: its checked-in metadata and
# PKGBUILD, the full sync_package path (selection, validation, backstop, # PKGBUILD, the full sync_package path (selection, validation, backstop,
# rewrite, read-back verification), with only the two network fetches # rewrite, read-back verification), with only the two network fetches
+24 -6
View File
@@ -16,6 +16,8 @@
# { "source": "local", "channels": ["edge", "rc", "stable"] } # { "source": "local", "channels": ["edge", "rc", "stable"] }
# { "source": "local", "min_release_age": "24h" } # { "source": "local", "min_release_age": "24h" }
# { "source": "local", "upstream": { "github": "owner/repo", "checksums": "SHASUMS256.txt", "assets": { "x86_64": "name-{tag}-x64.tar.xz" } } } # { "source": "local", "upstream": { "github": "owner/repo", "checksums": "SHASUMS256.txt", "assets": { "x86_64": "name-{tag}-x64.tar.xz" } } }
# { "source": "local", "upstream": { "git_tags": "https://example/repo.git", "tag_pattern": "v{pkgver}", "sources": { "any": ["https://example/archive/{tag}.tar.gz"] } } }
# { "source": "local", "upstream": { "npm": "@scope/package", "sources": { "any": ["{npm_tarball}"] } } }
# #
# bin/sync-aur also writes upstream_commit for AUR-backed packages, and # bin/sync-aur also writes upstream_commit for AUR-backed packages, and
# bin/sync-rebuilds writes rebuilt_against for packages declaring rebuild_on. # bin/sync-rebuilds writes rebuilt_against for packages declaring rebuild_on.
@@ -446,17 +448,33 @@ validate_package_metadata() {
# `has` rather than `// {}`: jq's // treats false as absent, which would # `has` rather than `// {}`: jq's // treats false as absent, which would
# let "upstream": false slip through as an empty declaration. # let "upstream": false slip through as an empty declaration.
if ! jq -e ' if ! jq -e '
def valid_sources:
type == "object" and length > 0 and (to_entries | all(
(.key | test("\\A[a-z0-9_]+\\z"))
and (.value | type == "array" and length > 0 and all(type == "string" and length > 0))
));
if has("upstream") | not then true if has("upstream") | not then true
elif (.upstream | type) != "object" then false elif (.upstream | type) != "object" then false
else .upstream | else .upstream |
((.github // "") | type == "string" and test("\\A[A-Za-z0-9_.-]+/[A-Za-z0-9_.-]+\\z")) ([has("github"), has("git_tags"), has("npm")] | map(select(.)) | length) == 1
and ((.checksums // "") | type == "string" and length > 0) and if has("github") then
and ((.assets // {}) | type == "object" and length > 0 and (to_entries | all( (.github | type == "string" and test("\\A[A-Za-z0-9_.-]+/[A-Za-z0-9_.-]+\\z"))
(.key | test("\\A[a-z0-9_]+\\z")) and (.value | type == "string" and length > 0) and (.checksums | type == "string" and length > 0)
))) and (.assets | type == "object" and length > 0 and (to_entries | all(
(.key | test("\\A[a-z0-9_]+\\z")) and (.value | type == "string" and length > 0)
)))
elif has("git_tags") then
(.git_tags | type == "string" and test("\\Ahttps://[^[:space:]]+\\.git\\z"))
and (.tag_pattern | type == "string" and (split("{pkgver}") | length) == 2)
and (.sources | valid_sources)
else
(.npm | type == "string" and test("\\A(@[a-z0-9_.-]+/)?[a-z0-9_.-]+\\z"))
and ((.dist_tag // "latest") | type == "string" and test("\\A[a-z0-9_.-]+\\z"))
and (.sources | valid_sources)
end
end end
' "$metadata" >/dev/null; then ' "$metadata" >/dev/null; then
echo "invalid upstream for $(basename "$pkgdir"): needs github owner/repo, checksums asset name, and an assets arch->name map" echo "invalid upstream for $(basename "$pkgdir"): configure exactly one valid github, git_tags, or npm provider"
return 1 return 1
fi fi
+159 -7
View File
@@ -1,4 +1,4 @@
# GitHub-releases upstream provider for bin/sync-upstream. # Declarative upstream providers for bin/sync-upstream.
# #
# A package whose upstream ships tagged GitHub releases with a checksum # A package whose upstream ships tagged GitHub releases with a checksum
# manifest asset needs no upstream.sh hook: the whole feed is data, declared # manifest asset needs no upstream.sh hook: the whole feed is data, declared
@@ -17,13 +17,20 @@
# "v", which is stripped for pkgver. Drafts and prereleases are ignored. The # "v", which is stripped for pkgver. Drafts and prereleases are ignored. The
# provider emits the same JSON contract as an upstream.sh hook, so # provider emits the same JSON contract as an upstream.sh hook, so
# bin/sync-upstream's validation and min_release_age backstop apply # bin/sync-upstream's validation and min_release_age backstop apply
# unchanged; a feed that fits no convention keeps a bespoke upstream.sh. # unchanged. Git-tag and npm providers below cover projects without a release
# checksum manifest; a feed that fits no convention keeps a bespoke hook.
package_upstream_github_repo() { # Return the single declarative provider selected by a package. An empty
local pkgdir="$1" # result means either no provider or an invalid/ambiguous declaration; the
# `objects` drops a non-object upstream value (validation rejects those # caller distinguishes those through package_has_upstream_provider().
# separately) instead of erroring the jq pipeline. package_upstream_provider() {
package_metadata_value "$pkgdir" '(.upstream? | objects | .github)' "" local pkgdir="$1" metadata
metadata=$(metadata_file_for_dir "$pkgdir")
jq -r '
(.upstream? | objects) as $u
| [$u | keys[] | select(. == "github" or . == "git_tags" or . == "npm")]
| if length == 1 then .[0] else "" end
' "$metadata"
} }
# Fetches sit behind functions so the self-test can replace them with fixture # Fetches sit behind functions so the self-test can replace them with fixture
@@ -43,6 +50,151 @@ github_fetch_checksums() {
curl -fsSL "https://github.com/$repo/releases/download/$tag/$asset" curl -fsSL "https://github.com/$repo/releases/download/$tag/$asset"
} }
git_tags_fetch_refs() {
local repo="$1"
git ls-remote --tags "$repo"
}
npm_fetch_metadata() {
local package="$1" encoded
encoded=$(jq -rn --arg package "$package" '$package | @uri')
curl -fsSL "https://registry.npmjs.org/$encoded"
}
upstream_fetch_source() {
local url="$1" output="$2"
curl --proto '=https' --proto-redir '=https' -fsSL -o "$output" "$url"
}
# Hash every URL template in upstream.sources and emit hook-contract JSON.
# Templates may use {pkgver}, {tag}, and (for npm) {npm_tarball}. Downloads
# happen only after discovery reports a version newer than the PKGBUILD.
upstream_hash_sources() {
local package_dir="$1" pkgver="$2" tag="${3:-}" npm_tarball="${4:-}"
local metadata sources work result arch template url file sum sums index=0
metadata=$(metadata_file_for_dir "$package_dir")
sources=$(jq -c '.upstream.sources' "$metadata")
work=$(mktemp -d)
result=$(jq -n --arg pkgver "$pkgver" '{pkgver: $pkgver, sha256sums: {}}')
while IFS= read -r arch; do
sums='[]'
while IFS= read -r template; do
if [[ "$template" == file:* ]]; then
file=${template#file:}
if [[ ! "$file" =~ ^[A-Za-z0-9._+-]+$ || ! -f "$package_dir/$file" ]]; then
echo "upstream source names an unsafe or missing local file: '$file'" >&2
rm -rf "$work"
return 1
fi
sum=$(sha256sum "$package_dir/$file" | cut -d' ' -f1)
sums=$(jq -c --arg sum "$sum" '. + [$sum]' <<<"$sums")
continue
fi
url=${template//\{pkgver\}/$pkgver}
url=${url//\{tag\}/$tag}
url=${url//\{npm_tarball\}/$npm_tarball}
if [[ ! "$url" =~ ^https://[^[:space:]{}]+$ ]]; then
echo "upstream source template produced an unsafe URL: '$url'" >&2
rm -rf "$work"
return 1
fi
file="$work/source-$((index += 1))"
if ! upstream_fetch_source "$url" "$file"; then
echo "could not fetch upstream source: $url" >&2
rm -rf "$work"
return 1
fi
sum=$(sha256sum "$file" | cut -d' ' -f1)
sums=$(jq -c --arg sum "$sum" '. + [$sum]' <<<"$sums")
done < <(jq -r --arg arch "$arch" '.[$arch][]' <<<"$sources")
result=$(jq -c --arg arch "$arch" --argjson sums "$sums" '.sha256sums[$arch] = $sums' <<<"$result")
done < <(jq -r 'keys[]' <<<"$sources")
rm -rf "$work"
printf '%s\n' "$result"
}
git_tags_upstream_release() {
local package_dir="$1" metadata repo pattern prefix suffix refs
metadata=$(metadata_file_for_dir "$package_dir")
repo=$(jq -r '.upstream.git_tags // ""' "$metadata")
pattern=$(jq -r '.upstream.tag_pattern // ""' "$metadata")
prefix=${pattern%%\{pkgver\}*}
suffix=${pattern#*\{pkgver\}}
if [[ ! "$repo" =~ ^https://[^[:space:]]+\.git$ || "$pattern" != *'{pkgver}'* || "$suffix" == *'{pkgver}'* ]]; then
echo "invalid git_tags provider configuration" >&2
return 1
fi
if ! refs=$(git_tags_fetch_refs "$repo"); then
echo "could not fetch tags from $repo" >&2
return 1
fi
local best_pkgver="" best_tag="" tag candidate
declare -A version_tags=()
while read -r tag; do
tag=${tag%\^\{\}}
[[ "$tag" == "$prefix"*"$suffix" ]] || continue
candidate=${tag#"$prefix"}
[[ -z "$suffix" ]] || candidate=${candidate%"$suffix"}
[[ "$candidate" =~ ^[A-Za-z0-9][A-Za-z0-9._+]*$ ]] || continue
if [[ -n "${version_tags[$candidate]:-}" && "${version_tags[$candidate]}" != "$tag" ]]; then
echo "multiple tags map to pkgver $candidate: ${version_tags[$candidate]} and $tag" >&2
return 1
fi
version_tags[$candidate]="$tag"
if [[ -z "$best_pkgver" || $(vercmp "$candidate" "$best_pkgver") -gt 0 ]]; then
best_pkgver="$candidate"
best_tag="$tag"
fi
done < <(sed -n 's#^.*refs/tags/##p' <<<"$refs")
[[ -n "$best_pkgver" ]] || { echo "no usable tags found at $repo" >&2; return 1; }
local current_pkgver
current_pkgver=$(grep -m1 '^pkgver=' "$package_dir/PKGBUILD" | cut -d= -f2- | tr -d "\"'")
if [[ $(vercmp "$best_pkgver" "$current_pkgver") -le 0 ]]; then
echo '{}'
return 0
fi
upstream_hash_sources "$package_dir" "$best_pkgver" "$best_tag"
}
npm_upstream_release() {
local package_dir="$1" metadata package dist_tag npm_metadata pkgver tarball published_at release
metadata=$(metadata_file_for_dir "$package_dir")
package=$(jq -r '.upstream.npm // ""' "$metadata")
dist_tag=$(jq -r '.upstream.dist_tag // "latest"' "$metadata")
if [[ ! "$package" =~ ^(@[a-z0-9_.-]+/)?[a-z0-9_.-]+$ || ! "$dist_tag" =~ ^[a-z0-9_.-]+$ ]]; then
echo "invalid npm provider configuration" >&2
return 1
fi
if ! npm_metadata=$(npm_fetch_metadata "$package"); then
echo "could not fetch npm metadata for $package" >&2
return 1
fi
pkgver=$(jq -r --arg tag "$dist_tag" '."dist-tags"[$tag] // ""' <<<"$npm_metadata")
tarball=$(jq -r --arg version "$pkgver" '.versions[$version].dist.tarball // ""' <<<"$npm_metadata")
published_at=$(jq -r --arg version "$pkgver" '.time[$version] // ""' <<<"$npm_metadata")
if [[ ! "$pkgver" =~ ^[A-Za-z0-9][A-Za-z0-9._+]*$ || ! "$tarball" =~ ^https://registry\.npmjs\.org/ ]]; then
echo "npm returned an unusable $package release" >&2
return 1
fi
local current_pkgver
current_pkgver=$(grep -m1 '^pkgver=' "$package_dir/PKGBUILD" | cut -d= -f2- | tr -d "\"'")
if [[ $(vercmp "$pkgver" "$current_pkgver") -le 0 ]]; then
echo '{}'
return 0
fi
release=$(upstream_hash_sources "$package_dir" "$pkgver" "$pkgver" "$tarball") || return 1
if [[ -n "$published_at" ]]; then
release=$(jq -c --arg published_at "$published_at" '.published_at = $published_at' <<<"$release")
fi
printf '%s\n' "$release"
}
# Emits the newest qualifying release as hook-contract JSON. min_release_age # Emits the newest qualifying release as hook-contract JSON. min_release_age
# is honored during selection (newest release older than the window wins, # is honored during selection (newest release older than the window wins,
# even when a younger one exists) and BYPASS_MIN_RELEASE_AGE=1 lifts it. # even when a younger one exists) and BYPASS_MIN_RELEASE_AGE=1 lifts it.
+1 -1
View File
@@ -4,7 +4,7 @@ epoch=1
pkgver=0.6.0 pkgver=0.6.0
pkgrel=2 pkgrel=2
pkgdesc="Control brightness on Apple Displays connected via USB-C" pkgdesc="Control brightness on Apple Displays connected via USB-C"
arch=('x86_64') arch=('x86_64' 'aarch64')
url="https://github.com/omakasui/asdcontrol" url="https://github.com/omakasui/asdcontrol"
license=('GPL2') license=('GPL2')
options=('!debug') options=('!debug')
@@ -1,5 +1,13 @@
{ {
"source": "aur", "source": "local",
"release_ring": "fast", "release_ring": "fast",
"upstream_commit": "fc4db00ecaf6c2669422b32c023a16bf6eb4e6c7" "upstream": {
"npm": "@github/copilot",
"sources": {
"any": [
"{npm_tarball}",
"https://raw.githubusercontent.com/github/copilot-cli/v{pkgver}/changelog.md"
]
}
}
} }
+3 -4
View File
@@ -14,7 +14,7 @@ pkgdesc="GitHub Copilot CLI brings the power of Copilot coding agent directly to
url="https://github.com/github/copilot-cli" url="https://github.com/github/copilot-cli"
_urlraw="https://raw.githubusercontent.com/github/copilot-cli/v${pkgver}" _urlraw="https://raw.githubusercontent.com/github/copilot-cli/v${pkgver}"
arch=("x86_64") arch=("x86_64" "aarch64")
license=("LicenseRef-GitHub-Copilot") license=("LicenseRef-GitHub-Copilot")
@@ -30,8 +30,8 @@ source=("https://registry.npmjs.org/${_npmmodule}/-/copilot-${pkgver}.tgz"
"CHANGELOG-${pkgver}.md::${_urlraw}/changelog.md") "CHANGELOG-${pkgver}.md::${_urlraw}/changelog.md")
noextract=("copilot-${pkgver}.tgz") noextract=("copilot-${pkgver}.tgz")
b2sums=('41c8306b58a142afe162bad9822b150babb0f3903fe7392aa7106fcb0ffce4483c0a2ebda8bb1d2036199deb52dc83d9a0e9408b8e11f7b0bc2a8f57c6841425' sha256sums=('563cbfe9b873fa52e998376cfea499eb77a5a300fb6db48fcc85f8eb297da4b9'
'5d2dfc870356f83b9b890d351b21bc9339100b0bfdce405ee77751e934dbeab0f8656f5eee85119a06aa3b01dcf3c91224ce28c24ff318eb1b13fdb6082037cd') '653b32793f5e5d29952c0e301649473c8097afc15270aa488efa08aa9399afcf')
# Document: https://wiki.archlinux.org/title/Node.js_package_guidelines # Document: https://wiki.archlinux.org/title/Node.js_package_guidelines
package() { package() {
@@ -124,4 +124,3 @@ package() {
ln -sf "/usr/lib/node_modules/${_npmmodule}/LICENSE.md" "${pkgdir}/usr/share/licenses/${pkgname}/LICENSE" ln -sf "/usr/lib/node_modules/${_npmmodule}/LICENSE.md" "${pkgdir}/usr/share/licenses/${pkgname}/LICENSE"
} }
@@ -4,7 +4,7 @@ pkgname="hyprland-preview-share-picker"
pkgver=0.2.1 pkgver=0.2.1
pkgrel=1 pkgrel=1
pkgdesc="An alternative share picker for hyprland with window and monitor previews" pkgdesc="An alternative share picker for hyprland with window and monitor previews"
arch=(x86_64) arch=(x86_64 aarch64)
url="https://github.com/WhySoBad/hyprland-preview-share-picker" url="https://github.com/WhySoBad/hyprland-preview-share-picker"
license=(MIT) license=(MIT)
depends=('gtk4' 'gtk4-layer-shell' 'xdg-desktop-portal-hyprland' 'hyprland') depends=('gtk4' 'gtk4-layer-shell' 'xdg-desktop-portal-hyprland' 'hyprland')
+1 -1
View File
@@ -4,7 +4,7 @@ pkgname=omasnap
pkgver=1.20.1 pkgver=1.20.1
pkgrel=1 pkgrel=1
pkgdesc="Native Wayland screenshot and annotation overlay for Hyprland" pkgdesc="Native Wayland screenshot and annotation overlay for Hyprland"
arch=('x86_64') arch=('x86_64' 'aarch64')
url="https://github.com/tobi/omasnap" url="https://github.com/tobi/omasnap"
license=('MIT' 'OFL-1.1') license=('MIT' 'OFL-1.1')
depends=( depends=(
+8 -2
View File
@@ -1,4 +1,10 @@
{ {
"source": "aur", "source": "local",
"upstream_commit": "a850f2d07e825f61cb01b87931d2ae5f1802dde1" "upstream": {
"git_tags": "https://github.com/FrameworkComputer/qmk_hid.git",
"tag_pattern": "v{pkgver}",
"sources": {
"any": ["https://github.com/FrameworkComputer/qmk_hid/archive/refs/tags/{tag}.tar.gz"]
}
}
} }
+4 -4
View File
@@ -2,16 +2,16 @@
pkgname=qmk-hid pkgname=qmk-hid
_srcname=qmk_hid _srcname=qmk_hid
pkgver=0.1.11 pkgver=0.1.13
pkgrel=3 pkgrel=1
pkgdesc="Commandline tool for interacting with QMK devices over HID" pkgdesc="Commandline tool for interacting with QMK devices over HID"
arch=('x86_64') arch=('x86_64' 'aarch64')
url="https://github.com/FrameworkComputer/qmk_hid" url="https://github.com/FrameworkComputer/qmk_hid"
license=('BSD') license=('BSD')
depends=('gcc-libs' 'systemd-libs' 'libcap') depends=('gcc-libs' 'systemd-libs' 'libcap')
makedepends=('cargo') makedepends=('cargo')
source=("$pkgname-$pkgver.tar.gz::$url/archive/v$pkgver.tar.gz") source=("$pkgname-$pkgver.tar.gz::$url/archive/v$pkgver.tar.gz")
b2sums=('e898d27cfe8350f4a8cd2938a3d066935093daf1292f41fc10b8f1937059f2b59e4ac34a987f26c8258a5d3b15a900059024fe3a18ed793f7e3b524939ab4c71') sha256sums=('8a058395b8ba56ff54308a681223f11a6032c54df42b4d0223143ccf09d0c858')
options=('!lto') options=('!lto')
prepare() { prepare() {
+8 -2
View File
@@ -1,5 +1,11 @@
{ {
"source": "aur", "source": "local",
"release_ring": "fast", "release_ring": "fast",
"upstream_commit": "39667376addf3916b7bed3ecbe3ec6ed2af367e4" "upstream": {
"github": "symfony-cli/symfony-cli",
"checksums": "checksums.txt",
"assets": {
"any": "symfony-cli-{pkgver}.tar.gz"
}
}
} }
+13 -9
View File
@@ -1,23 +1,27 @@
# Maintainer: Florian Moser <arch@famoser.ch> # Maintainer: Florian Moser <arch@famoser.ch>
pkgname=symfony-cli pkgname=symfony-cli
pkgrel=8 pkgrel=9
pkgver=5.20.0 pkgver=5.20.0
pkgdesc="The Symfony client helps developers create and manage Symfony applications." pkgdesc="The Symfony client helps developers create and manage Symfony applications."
url="https://symfony.com/" url="https://symfony.com/"
arch=('x86_64') arch=('x86_64' 'aarch64')
license=('AGPL3') license=('AGPL3')
depends=('glibc') depends=('glibc')
makedepends=('git' 'go') makedepends=('go')
provides=('symfony-cli') provides=('symfony-cli')
conflicts=('symfony-cli') conflicts=('symfony-cli')
source=( source=("$pkgname-$pkgver.tar.gz::https://github.com/symfony-cli/symfony-cli/releases/download/v${pkgver}/symfony-cli-${pkgver}.tar.gz")
"git+https://github.com/symfony-cli/symfony-cli#tag=v${pkgver}" sha256sums=('11354f7206740dc8b31410bf7fbcb20debccb4a92935da84729fd7d754b2082f')
) noextract=("$pkgname-$pkgver.tar.gz")
sha256sums=('SKIP')
prepare() {
mkdir "$pkgname-$pkgver"
bsdtar -xf "$pkgname-$pkgver.tar.gz" -C "$pkgname-$pkgver"
}
build() { build() {
cd "symfony-cli" cd "$pkgname-$pkgver"
DATE=$(date -u +"%Y-%m-%dT%H:%M:%SZ") DATE=$(date -u +"%Y-%m-%dT%H:%M:%SZ")
PKGVER=${pkgver} PKGVER=${pkgver}
@@ -27,5 +31,5 @@ build() {
} }
package() { package() {
install -D -m 755 "${srcdir}/symfony-cli/symfony-cli" "${pkgdir}/usr/bin/symfony" install -D -m 755 "${srcdir}/${pkgname}-${pkgver}/symfony-cli" "${pkgdir}/usr/bin/symfony"
} }
+8 -2
View File
@@ -1,4 +1,10 @@
{ {
"source": "aur", "source": "local",
"upstream_commit": "c6fe8f2c6dc43a5c2f0c95df5656037b351dacb7" "upstream": {
"git_tags": "https://github.com/jondkinney/tensaku.git",
"tag_pattern": "v{pkgver}",
"sources": {
"any": ["https://github.com/jondkinney/tensaku/archive/refs/tags/{tag}.tar.gz"]
}
}
} }
+1 -1
View File
@@ -9,7 +9,7 @@ pkgname=tensaku
pkgver=0.28.0 pkgver=0.28.0
pkgrel=1 pkgrel=1
pkgdesc='Modern screenshot annotation tool for Wayland' pkgdesc='Modern screenshot annotation tool for Wayland'
arch=('x86_64') arch=('x86_64' 'aarch64')
url='https://github.com/jondkinney/tensaku' url='https://github.com/jondkinney/tensaku'
license=('MPL-2.0') license=('MPL-2.0')
depends=('gtk4' 'gtk4-layer-shell' 'libadwaita' 'libepoxy' 'fontconfig') depends=('gtk4' 'gtk4-layer-shell' 'libadwaita' 'libepoxy' 'fontconfig')
+8 -2
View File
@@ -1,4 +1,10 @@
{ {
"source": "aur", "source": "local",
"upstream_commit": "1b3c3bdf6289a348da09eed57d653d3f6dce1956" "upstream": {
"git_tags": "https://github.com/cdown/tzupdate.git",
"tag_pattern": "{pkgver}",
"sources": {
"any": ["https://github.com/cdown/tzupdate/archive/refs/tags/{tag}.tar.gz"]
}
}
} }
+1 -1
View File
@@ -5,7 +5,7 @@ pkgver=3.1.0
pkgrel=1 pkgrel=1
pkgdesc='Set the system timezone based on IP geolocation' pkgdesc='Set the system timezone based on IP geolocation'
url=https://github.com/cdown/tzupdate url=https://github.com/cdown/tzupdate
arch=('x86_64') arch=('x86_64' 'aarch64')
options=(!lto) options=(!lto)
license=('MIT') license=('MIT')
makedepends=('cargo') makedepends=('cargo')
+12 -7
View File
@@ -1,9 +1,14 @@
{ {
"source": "aur", "source": "local",
"sync": false, "upstream": {
"pkgrel": { "git_tags": "https://gitlab.com/vicamo/v4l2-relayd.git",
"suffix": 2, "tag_pattern": "upstream/{pkgver}",
"offset": 1 "sources": {
}, "any": [
"upstream_commit": "086fa284d7f5ad562ea6ba79b3cb4fd798e759d3" "https://gitlab.com/vicamo/v4l2-relayd/-/archive/upstream/{pkgver}/v4l2-relayd-upstream-{pkgver}.tar.gz",
"file:0001-reset-output-on-idle.patch",
"file:0002-escape-optional-splashsrc-expansion.patch"
]
}
}
} }
+3 -3
View File
@@ -4,7 +4,7 @@ pkgname=v4l2-relayd
pkgver=0.2.0 pkgver=0.2.0
pkgrel=2.2 pkgrel=2.2
pkgdesc="Plays gstreamer sources into v4l2loopback devices." pkgdesc="Plays gstreamer sources into v4l2loopback devices."
arch=('x86_64') arch=('x86_64' 'aarch64')
url="https://gitlab.com/vicamo/v4l2-relayd" url="https://gitlab.com/vicamo/v4l2-relayd"
license=('GPL') license=('GPL')
depends=( depends=(
@@ -19,8 +19,8 @@ source=("https://gitlab.com/vicamo/v4l2-relayd/-/archive/upstream/${pkgver}/v4l2
"0001-reset-output-on-idle.patch" "0001-reset-output-on-idle.patch"
"0002-escape-optional-splashsrc-expansion.patch") "0002-escape-optional-splashsrc-expansion.patch")
sha256sums=('0c063edf18dcc6edcdef46e695128cfc2b2d60964ea8538c7e79a2454310c53d' sha256sums=('0c063edf18dcc6edcdef46e695128cfc2b2d60964ea8538c7e79a2454310c53d'
'SKIP' '07722a8708ced48d2db9575f3eae5b1266868d259d260635e06e9a10baddec78'
'SKIP') '3cb89056af276eed7a45dfc96435e8e48558e4e11c96560360d46d631b1c0b6c')
prepare() { prepare() {
cd "$srcdir/${pkgname}-upstream-${pkgver}" cd "$srcdir/${pkgname}-upstream-${pkgver}"