Compare commits

..

11 Commits

Author SHA1 Message Date
473a5ce6aa artixpkg: add basic token check 2023-06-26 18:57:56 +02:00
f511f7c0e9 merge branch 'admin' 2023-06-26 16:15:00 +02:00
bbca425bf8 artixpkg: fix migration of non compliant pkgbase names 2023-06-26 15:58:36 +02:00
10fe40eccb artixpkg: make maintainer flags consistent 2023-06-26 15:33:16 +02:00
6ce9a5b751 artixpkg: fix repo args (#79)
Co-authored-by: Artoo <artoo@artixlinux.org>
Reviewed-on: artix/artools#79
2023-06-26 15:10:30 +02:00
108dcf620a migrate-ci (#78)
Co-authored-by: Artoo <artoo@artixlinux.org>
Reviewed-on: artix/artools#78
2023-06-25 17:16:55 +02:00
7fc2909a29 Merge pull request 'Add other kernels to patch_pkgbase()' (#77) from Qontinuum/artools:master into master
Reviewed-on: artix/artools#77
2023-06-25 17:16:22 +02:00
Qontinuum
f248c20401 Add other kernels to patch_pkgbase() 2023-06-24 14:56:24 +02:00
1516ef432e artixpkg repo: show git status if changes 2023-06-23 00:13:57 +02:00
cc3bd8049c artixpkg (#76)
Co-authored-by: Artoo <artoo@artixlinux.org>
Reviewed-on: artix/artools#76
2023-06-22 23:03:49 +02:00
13d6f8ba37 artools/0.31rc (#75)
Co-authored-by: Artoo <artoo@artixlinux.org>
Reviewed-on: artix/artools#75
2023-06-22 20:19:42 +02:00
19 changed files with 421 additions and 158 deletions

55
src/lib/pkg/admin.sh Normal file
View File

@@ -0,0 +1,55 @@
#!/hint/bash
#
# SPDX-License-Identifier: GPL-3.0-or-later
[[ -z ${ARTOOLS_INCLUDE_ADMIN_SH:-} ]] || return 0
ARTOOLS_INCLUDE_ADMIN_SH=1
set -e
artixpkg_admin_usage() {
local -r COMMAND=${_ARTOOLS_COMMAND:-${BASH_SOURCE[0]##*/}}
cat <<- _EOF_
Usage: ${COMMAND} [COMMAND] [OPTIONS]
COMMANDS
transfer Clone a package repository
OPTIONS
-h, --help Show this help text
EXAMPLES
$ ${COMMAND} transfer libfoo libbar
_EOF_
}
artixpkg_admin() {
if (( $# < 1 )); then
artixpkg_admin_usage
exit 0
fi
# option checking
while (( $# )); do
case $1 in
-h|--help)
artixpkg_admin_usage
exit 0
;;
transfer)
_ARTOOLS_COMMAND+=" $1"
shift
# shellcheck source=src/lib/pkg/admin/transfer.sh
source "${LIBDIR}"/pkg/admin/transfer.sh
artixpkg_admin_transfer "$@"
exit 0
;;
-*)
die "invalid argument: %s" "$1"
;;
*)
die "invalid command: %s" "$1"
;;
esac
done
}

View File

@@ -0,0 +1,66 @@
#!/bin/bash
#
# SPDX-License-Identifier: GPL-3.0-or-later
[[ -z ${ARTOOLS_INCLUDE_ADMIN_TRANSFER_SH:-} ]] || return 0
ARTOOLS_INCLUDE_ADMIN_TRANSFER_SH=1
set -e
artixpkg_admin_transfer_usage() {
local -r COMMAND=${_ARTOOLS_COMMAND:-${BASH_SOURCE[0]##*/}}
cat <<- _EOF_
Usage: ${COMMAND} [OPTIONS] [PKGBASE]...
OPTIONS
-h, --help Show this help text
EXAMPLES
$ ${COMMAND} libfoo
$ ${COMMAND} libfoo libbar
_EOF_
}
artixpkg_admin_transfer() {
if (( $# < 1 )); then
artixpkg_admin_transfer_usage
exit 0
fi
# options
local pkgbases=()
local pkgbase
local waste_org="landfill"
local command=${_ARTOOLS_COMMAND:-${BASH_SOURCE[0]##*/}}
while (( $# )); do
case $1 in
-h|--help)
artixpkg_admin_transfer_usage
exit 0
;;
--)
shift
break
;;
-*)
die "invalid argument: %s" "$1"
;;
*)
break
;;
esac
done
pkgbases+=("$@")
if [[ -n ${GIT_TOKEN} ]]; then
for pkgbase in "${pkgbases[@]}"; do
transfer_repo "${pkgbase}" "${waste_org}"
done
fi
}

View File

@@ -4,24 +4,15 @@
#{{{ gitea api
get_compliant() {
get_compliant_name() {
local name=$1
printf "%s" "${name}" \
printf "%s\n" "${name}" \
| sed -E 's/([a-zA-Z0-9]+)\+([a-zA-Z]+)/\1-\2/g' \
| sed -E 's/\+/plus/g' \
| sed -E 's/[^a-zA-Z0-9_\-\.]/-/g' \
| sed -E 's/[_\-]{2,}/-/g'
}
get_compliant_name(){
local gitname="$1"
case "$gitname" in
*+) gitname=${gitname//+/plus} ;;
*+*) gitname=${gitname//+/-} ;;
esac
printf "%s\n" "$gitname"
}
api_put() {
curl -s -X PUT "$@"
}
@@ -72,7 +63,7 @@ create_repo() {
local pkgbase="$1"
local url json
url="${GIT_HTTPS}/api/v1/org/${GIT_ORG}/repos"
json="{ \"auto_init\": true, \"name\": \"$pkgbase\", \"gitignores\": \"ArchLinuxPackages\", \"readme\": \"Default\" }"
json="{ \"auto_init\": true, \"name\": \"$pkgbase\", \"gitignores\": \"ArtixLinuxPackages\", \"readme\": \"Default\" }"
stat_busy "Create package repo [$pkgbase] in org (${GIT_ORG})"
api_post "$url" \
@@ -107,23 +98,6 @@ list_all_repos() {
-H "accept: application/json"
}
replace_topic() {
local url
local repo="$1"
local maintainer="$2"
url="${GIT_HTTPS}/api/v1/repos/${GIT_ORG}/$repo/topics"
api_put "$url" \
-H "accept: application/json" \
-H "Content-Type: application/json" \
-H "Authorization: token ${GIT_TOKEN}" \
-d "{
\"topics\": [
\"${maintainer}\"
]
}"
}
list_topics() {
local url
local pkgbase="$1"

View File

@@ -19,6 +19,8 @@ readonly ARTIX_DB=(
readonly REPO_DB='.artixlinux/pkgbase.yaml'
readonly REPO_CI='.artixlinux/Jenkinsfile'
yaml_array() {
local array
@@ -135,13 +137,14 @@ update_yaml_base() {
local name
local pkgnames
local arches
local pkgbase
name="${pkgbase:-${pkgname}}"
pkgbase="${pkgbase:-${pkgname}}"
version="$(get_full_version)"
pkgnames=$(yaml_array "${pkgname[@]}")
arches=$(yaml_array "${arch[@]}")
name="${name}" version="${version}" pkgnames="${pkgnames}" arches="${arches}" \
name="${pkgbase}" version="${version}" pkgnames="${pkgnames}" arches="${arches}" \
yq -P 'with(
.pkgbase;
.name = env(name) |
@@ -277,3 +280,11 @@ show_db() {
yq -rP '. | .repos |= with_entries(select(.value.version))' "${REPO_DB}"
return 0
}
show_srcinfo_base() {
pkg2yaml . | yq '.pkgbase'
}
show_srcinfo_pkgs() {
pkg2yaml . | yq '.pkgnames'
}

View File

@@ -1,35 +0,0 @@
#!/hint/bash
#
# SPDX-License-Identifier: GPL-3.0-or-later
local_head(){
git log --pretty=%H ...refs/heads/master^ | head -n 1
}
remote_head(){
git ls-remote origin -h refs/heads/master | cut -f1
}
has_changeset(){
msg "Checking remote for changes"
if [[ "$(local_head)" != "$(remote_head)" ]]; then
msg2 "remote changes: yes"
return 0
fi
msg2 "remote changes: no"
return 1
}
commit_ci(){
local ci=Jenkinsfile
printf "@Library('artix-ci') import org.artixlinux.RepoPackage\n" > "${ci}"
{
printf '\n'
printf 'PackagePipeline(new RepoPackage(this))\n'
} >> "${ci}"
git add "${ci}"
git commit -m "initial ci commit"
}

View File

@@ -19,9 +19,17 @@ declare -rA REPO_MAP=(
[community]=galaxy
)
update_gitignore() {
{
printf '*.service\n'
printf '*.timer\n'
printf '*.socket\n'
} >> .gitignore
}
migrate_to_yaml() {
if [[ -f trunk/PKGBUILD ]]; then
cp -r trunk/* ./
stat_busy "Migrating ${pkgbase} to new layout"
create_repo_db
stat_done
@@ -55,13 +63,39 @@ migrate_to_yaml() {
.version = env(version) |
.packages = env(pkgs) )' \
-i "${REPO_DB}"
if [[ -n ${GIT_TOKEN} ]]; then
local topic gitname
gitname=$(get_compliant_name "${pkgbase}")
topic="${REPO_MAP[$r]}"
if ! add_topic "${gitname}" "${topic}"; then
warning "failed to add topic: ${topic}"
fi
topic="${r}"
if ! remove_topic "${gitname}" "${topic}"; then
warning "failed to remove topic: ${topic}"
fi
fi
done
git rm -r x86_64
fi
cp -r trunk/* ./
git rm -r trunk
if [[ -f .artixlinux/agent.yaml ]]; then
git rm .artixlinux/agent.yaml
fi
if [[ -f .gitignore ]]; then
update_gitignore
fi
if [[ -f Jenkinsfile ]]; then
git mv Jenkinsfile "${REPO_CI}"
fi
git add .
git commit -m "migrate to new layout"
fi

View File

@@ -7,21 +7,30 @@ ARTOOLS_INCLUDE_GIT_CONFIG_SH=1
# shellcheck source=src/lib/pkg/db/db.sh
source "${LIBDIR}"/pkg/db/db.sh
# shellcheck source=src/lib/pkg/db/git.sh
source "${LIBDIR}"/pkg/db/git.sh
# shellcheck source=src/lib/pkg/db/migrate.sh
source "${LIBDIR}"/pkg/db/migrate.sh
set -e
commit_ci(){
printf "@Library('artix-ci') import org.artixlinux.RepoPackage\n" > "${REPO_CI}"
{
printf '\n'
printf 'PackagePipeline(new RepoPackage(this))\n'
} >> "${REPO_CI}"
git add "${REPO_CI}"
git commit -m "initial ci commit"
}
artixpkg_git_config_usage() {
local -r COMMAND=${_ARTOOLS_COMMAND:-${BASH_SOURCE[0]##*/}}
cat <<- _EOF_
Usage: ${COMMAND} [OPTIONS] [PKGBASE]...
OPTIONS
-t, --topic Set the maintainer topic via gitea api
-m, --maintainer Set the maintainer topic via gitea api
-u, --upstream Add upstream arch remote
--protocol https Configure remote url to use https
-j, --jobs N Run up to N jobs in parallel (default: $(nproc))
@@ -106,7 +115,7 @@ artixpkg_git_config() {
artixpkg_git_config_usage
exit 0
;;
-t|--topic)
-m|--maintainer)
SET_TOPIC=1
shift
;;
@@ -201,7 +210,7 @@ artixpkg_git_config() {
for path in "${paths[@]}"; do
if ! realpath=$(realpath -e "${path}"); then
error "No such directory: ${path}"
# continue
continue
fi
pkgbase=$(basename "${realpath}")
@@ -210,7 +219,7 @@ artixpkg_git_config() {
if [[ ! -d "${path}/.git" ]]; then
error "Not a Git repository: ${path}"
# continue
continue
fi
( cd "${path}" || return
git config pull.rebase true
@@ -255,14 +264,19 @@ artixpkg_git_config() {
migrate_to_yaml
if [[ ! -f Jenkinsfile ]]; then
if [[ -f Jenkinsfile ]]; then
git mv Jenkinsfile "${REPO_CI}"
git commit -m "move jenkinsfile"
fi
if [[ ! -f ${REPO_CI} ]]; then
msg "Adding ci support ..."
commit_ci
fi
if [[ ! -f ${REPO_DB} ]]; then
msg "Adding repo db ..."
msg "Creating repo db ..."
create_repo_db
if [[ -f PKGBUILD ]]; then

View File

@@ -92,6 +92,7 @@ artixpkg_git_create() {
for pkgbase in "${pkgbases[@]}"; do
local gitname
gitname=$(get_compliant_name "${pkgbase}")
if [[ -n ${GIT_TOKEN} ]]; then
if ! create_repo "${gitname}" >/dev/null; then
die "failed to create project: ${pkgbase}"
fi
@@ -99,6 +100,7 @@ artixpkg_git_create() {
warning "failed to assign team: ${TEAM}"
fi
msg_success "Successfully created ${pkgbase}"
fi
if (( clone )); then
artixpkg_git_clone "${pkgbase}"
elif (( config )); then

View File

@@ -21,7 +21,6 @@ artixpkg_git_pull_usage() {
-t, --topic=NAME Pull all packages of the named topic
-j, --jobs N Run up to N jobs in parallel (default: $(nproc))
--universe Pull all existing packages
--fetch Fetch only
-h, --help Show this help text
EXAMPLES
@@ -42,7 +41,6 @@ artixpkg_git_pull() {
# options
local PULL_ALL=0
local FETCH=0
local MAINTAINER=
local TOPIC=
local CONFIGURE_OPTIONS=()
@@ -79,10 +77,6 @@ artixpkg_git_pull() {
PULL_ALL=1
shift
;;
--fetch)
FETCH=1
shift
;;
-j|--jobs)
(( $# <= 1 )) && die "missing argument for %s" "$1"
jobs=$2
@@ -140,17 +134,12 @@ artixpkg_git_pull() {
for pkgbase in "${pkgbases[@]}"; do
if [[ -d ${pkgbase} ]]; then
( cd ${pkgbase} || return
if (( FETCH )); then
msg "Fetching ${pkgbase} ..."
if ! git fetch origin; then
die 'failed to fetch %s' "${pkgbase}"
fi
else
msg "Pulling ${pkgbase} ..."
if ! git pull origin master; then
die 'failed to pull %s' "${pkgbase}"
fi
fi
)
else
warning "Skip pulling ${pkgbase}: Directory does not exist"

View File

@@ -5,9 +5,6 @@
[[ -z ${ARTOOLS_INCLUDE_REPO_ADD_SH:-} ]] || return 0
ARTOOLS_INCLUDE_REPO_ADD_SH=1
# shellcheck source=src/lib/pkg/db/git.sh
source "${LIBDIR}"/pkg/db/git.sh
set -e
@@ -72,6 +69,7 @@ artixpkg_repo_add() {
done
DEST="$1"
shift
pkgbases+=("$@")
if ! in_array "${DEST}" "${ARTIX_DB[@]}"; then
@@ -88,10 +86,6 @@ artixpkg_repo_add() {
fi
( cd "${pkgbase}" || return
# if has_changeset; then
# die "Remote changes detected! Please pull (%s)" "${pkgbase}"
# fi
if [[ ! -f PKGBUILD ]]; then
die "No PKGBUILD found in (%s)" "${pkgbase}"
fi

View File

@@ -22,7 +22,7 @@ patch_pkgbase(){
-e '/nscd.service/d' \
-i "${pkgbuild}"
;;
linux|linux-lts)
linux|linux-lts|linux-zen|linux-hardened|linux-rt|linux-rt-lts)
msg "Patching %s" "${name}"
sed -e 's|KBUILD_BUILD_HOST=.*|KBUILD_BUILD_HOST=artixlinux|' -i "${pkgbuild}"
sed -e 's|CONFIG_DEFAULT_HOSTNAME=.*|CONFIG_DEFAULT_HOSTNAME="artixlinux"|' \
@@ -65,7 +65,7 @@ artixpkg_repo_import() {
local TAG
local rsync_args=()
rsync_args+=(-aWxvci --progress --delete-before --no-R --no-implied-dirs)
rsync_args+=(--exclude '.git' --exclude 'Jenkinsfile' --exclude '.gitignore' --exclude 'README.md')
rsync_args+=(--exclude '.git' --exclude '.gitignore' --exclude 'README.md')
while (( $# )); do
case $1 in
@@ -98,10 +98,6 @@ artixpkg_repo_import() {
fi
( cd "${pkgbase}" || return
# if has_changeset; then
# die "Remote changes detected! Please pull (%s)" "${pkgbase}"
# fi
stat_busy "Checking for upstream url"
if ! git config --local --get remote.upstream.url &>/dev/null; then
git remote add upstream "${GIT_UPSTREAM_URL}/${pkgbase}".git

View File

@@ -5,9 +5,6 @@
[[ -z ${ARTOOLS_INCLUDE_REPO_MOVE_SH:-} ]] || return 0
ARTOOLS_INCLUDE_REPO_MOVE_SH=1
# shellcheck source=src/lib/pkg/db/git.sh
source "${LIBDIR}"/pkg/db/git.sh
set -e
@@ -83,10 +80,6 @@ artixpkg_repo_move() {
fi
( cd "${pkgbase}" || return
# if has_changeset; then
# die "Remote changes detected! Please pull (%s)" "${pkgbase}"
# fi
if [[ ! -f PKGBUILD ]]; then
die "No PKGBUILD found in (%s)" "${pkgbase}"
fi

View File

@@ -5,9 +5,6 @@
[[ -z ${ARTOOLS_INCLUDE_REPO_REMOVE_SH:-} ]] || return 0
ARTOOLS_INCLUDE_REPO_REMOVE_SH=1
# shellcheck source=src/lib/pkg/db/git.sh
source "${LIBDIR}"/pkg/db/git.sh
set -e
@@ -59,6 +56,7 @@ artixpkg_repo_remove() {
done
DEST="$1"
shift
pkgbases=("$@")
if ! in_array "${DEST}" "${ARTIX_DB[@]}"; then
@@ -75,10 +73,6 @@ artixpkg_repo_remove() {
fi
( cd "${pkgbase}" || return
# if has_changeset; then
# die "Remote changes detected! Please pull (%s)" "${pkgbase}"
# fi
if [[ ! -f PKGBUILD ]]; then
die "No PKGBUILD found in (%s)" "${pkgbase}"
fi

115
src/lib/pkg/repo/show.sh Normal file
View File

@@ -0,0 +1,115 @@
#!/hint/bash
#
# SPDX-License-Identifier: GPL-3.0-or-later
[[ -z ${ARTOOLS_INCLUDE_REPO_SHOW_SH:-} ]] || return 0
ARTOOLS_INCLUDE_REPO_SHOW_SH=1
set -e
has_changeset(){
git fetch origin &>/dev/null
if [[ $(git rev-parse HEAD) != $(git rev-parse @{u}) ]]; then
msg2 "changes: yes"
git status -sb
return 0
fi
msg2 "changes: no"
return 1
}
artixpkg_repo_show_usage() {
local -r COMMAND=${_ARTOOLS_COMMAND:-${BASH_SOURCE[0]##*/}}
cat <<- _EOF_
Usage: ${COMMAND} [OPTIONS] [DEST_REPO] [PKGBASE]...
OPTIONS
-b, --base Show srcinfo base
-p, --pkgs Show srcinfo pkgs
-h, --help Show this help text
EXAMPLES
$ ${COMMAND} libfoo
$ ${COMMAND} -b libfoo
$ ${COMMAND} -p libfoo
_EOF_
}
artixpkg_repo_show() {
if (( $# < 1 )); then
artixpkg_repo_show_usage
exit 0
fi
# options
local pkgbases=()
local pkgbase
local SRC_BASE=0
local SRC_PKGS=0
while (( $# )); do
case $1 in
-h|--help)
artixpkg_repo_show_usage
exit 0
;;
-b|--base)
SRC_BASE=1
shift
;;
-p|--pkgs)
SRC_PKGS=1
shift
;;
-*)
die "invalid argument: %s" "$1"
;;
*)
break
;;
esac
done
pkgbases=("$@")
for pkgbase in "${pkgbases[@]}"; do
if [[ -d "${pkgbase}" ]];then
if [[ ! -d "${pkgbase}/.git" ]]; then
error "Not a Git repository: ${pkgbase}"
continue
fi
( cd "${pkgbase}" || return
msg "Checking origin for changes"
if has_changeset; then
warning "Remote changes detected! Please update (%s)" "${pkgbase}"
fi
if [[ ! -f PKGBUILD ]]; then
die "No PKGBUILD found in (%s)" "${pkgbase}"
fi
msg "Querying ${pkgbase} ..."
if ! show_db; then
warning "Could not query ${REPO_DB}"
fi
if (( SRC_BASE )); then
msg "Showing srcinfo base ..."
show_srcinfo_base
fi
if (( SRC_PKGS )); then
msg "Showing srcinfo pkgs ..."
show_srcinfo_pkgs
fi
)
fi
done
}

View File

@@ -0,0 +1,43 @@
#!/hint/bash
#
# SPDX-License-Identifier: GPL-3.0-or-later
[[ -z ${ARTOOLS_INCLUDE_VERSION_SH:-} ]] || return 0
ARTOOLS_INCLUDE_VERSION_SH=1
set -e
artixpkg_version_usage() {
COMMAND=${_ARTOOLS_COMMAND:-${BASH_SOURCE[0]##*/}}
cat <<- _EOF_
Usage: ${COMMAND} [OPTIONS]
Shows the current version information of artixpkg
OPTIONS
-h, --help Show this help text
_EOF_
}
artixpkg_version_print() {
cat <<- _EOF_
artixpkg @buildtoolver@
_EOF_
}
artixpkg_version() {
while (( $# )); do
case $1 in
-h|--help)
artixpkg_version_usage
exit 0
;;
*)
die "invalid argument: %s" "$1"
;;
esac
done
artixpkg_version_print
}

View File

@@ -22,6 +22,7 @@ usage() {
COMMANDS
repo Pacman database modification for packge update, move etc
git Manage Git packaging repositories and their configuration
version Show artixpkg version information
OPTIONS
-h, --help Show this help text
@@ -67,6 +68,22 @@ while (( $# )); do
artixpkg_git "$@"
exit 0
;;
admin)
_ARTOOLS_COMMAND+=" $1"
shift
# shellcheck source=src/lib/pkg/admin.sh
source "${LIBDIR}"/pkg/admin.sh
artixpkg_admin "$@"
exit 0
;;
version|--version|-V)
_ARTOOLS_COMMAND+=" $1"
shift
# shellcheck source=src/lib/pkg/version/version.sh
source "${LIBDIR}"/pkg/version/version.sh
artixpkg_version "$@"
exit 0
;;
*)
die "invalid command: %s" "$1"
;;

View File

@@ -46,7 +46,7 @@ pkgbuild_extract_to_yaml() {
if get_pkgbuild_attribute "$pkgname" "$attrname" "$isarray" 'outvalue'; then
[[ -z $pkgname ]] && srcyaml_write_attr 2 4 2 "$attrname" "${outvalue[@]}"
[[ -n $pkgname ]] && srcyaml_write_attr 6 8 4 "$attrname" "${outvalue[@]}"
[[ -n $pkgname ]] && srcyaml_write_attr 4 6 2 "$attrname" "${outvalue[@]}"
fi
}
@@ -82,12 +82,8 @@ yaml_write_global() {
noextract options backup
source validpgpkeys "${known_hash_algos[@]/%/sums}")
local version
version=$(get_full_version)
Yaml+=$(write_yaml_map 0 "pkgbase")
Yaml+=$(write_yaml_map 2 "name" "${pkgbase:-${pkgname}}")
Yaml+=$(write_yaml_map 2 "version" "${version}")
srcyaml_write_section_details ""
}
@@ -97,9 +93,9 @@ yaml_write_package() {
local multivalued=(arch groups license checkdepends depends optdepends
provides conflicts replaces options backup)
Yaml+=$(write_yaml_map 2 "packages")
Yaml+=$(write_yaml_map 0 "pkgnames")
for pkg in "${pkgname[@]}"; do
Yaml+=$(write_yaml_seq_map 4 "pkgname" "$pkg")
Yaml+=$(write_yaml_seq_map 2 "pkgname" "$pkg")
srcyaml_write_section_details "$pkg"
done
}
@@ -108,6 +104,11 @@ write_srcyaml() {
Yaml=$(write_yaml_header)
yaml_write_global
yaml_write_package
# local version
# version=$(get_full_version)
# Yaml+=$(write_yaml_map 2 "version" "${version}")
printf '%s\n' "${Yaml}"
}