.github/workflows/duplicates.yml: add script to check for potential duplicates

Signed-off-by: Andrew Ammerlaan <andrewammerlaan@riseup.net>
This commit is contained in:
Andrew Ammerlaan
2021-02-17 16:17:36 +01:00
parent 31efcfdfb0
commit 16f5492d54
2 changed files with 98 additions and 0 deletions

23
.github/workflows/duplicates.yml vendored Normal file
View File

@@ -0,0 +1,23 @@
name: repoman
on:
push:
branches: [ dev ]
pull_request:
branches: [ dev ]
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- name: Setup master gentoo repository
run: |
sudo mkdir -p /var/db/repos/gentoo /etc/portage /var/cache/distfiles
wget -qO - "https://github.com/gentoo-mirror/gentoo/archive/master.tar.gz" | sudo tar xz -C /var/db/repos/gentoo --strip-components=1
sudo wget "https://www.gentoo.org/dtd/metadata.dtd" -O /var/cache/distfiles/metadata.dtd
sudo wget "https://gitweb.gentoo.org/proj/portage.git/plain/cnf/repos.conf" -O /etc/portage/repos.conf
sudo ln -s /var/db/repos/gentoo/profiles/default/linux/amd64/17.1 /etc/portage/make.profile
- name: Check for duplicates
run: |
./scripts/check-duplicates.sh

75
scripts/check-duplicates.sh Executable file
View File

@@ -0,0 +1,75 @@
#!/usr/bin/env bash
# Maintainer: Andrew Ammerlaan <andrewammerlaan@riseup.net>
#
# This checks if packages in ::guru are also in ::gentoo
#
# Note that this is not going to be 100% accurate
#
#
printf "\nChecking for duplicates....\n"
gentoo_location="/var/db/repos/gentoo"
guru_location="../"
gentoo_packs=$(find ${gentoo_location} -mindepth 2 -maxdepth 2 -printf "%P\n" | sort | grep -Ev "^(.git|.github|metadata|profiles|scripts)/")
guru_packs=$(find ${guru_location} -mindepth 2 -maxdepth 2 -printf "%P\n" | sort | grep -Ev "^(.git|.github|metadata|profiles|scripts)/")
pack_overrides="" pack_close_match_in_cat="" pack_close_match=""
for guru_pack in ${guru_packs}; do
# separate category and packages
guru_pack_cat="${guru_pack%%/*}"
guru_pack_name="${guru_pack##*/}"
# convert all to lowercase
guru_pack_name="${guru_pack_name,,}"
# stip all numbers, dashes, underscores and pluses
guru_pack_name="${guru_pack_name/[0-9-_+]}"
for gentoo_pack in ${gentoo_packs}; do
# separate category and packages
gentoo_pack_cat="${gentoo_pack%%/*}"
gentoo_pack_name="${gentoo_pack##*/}"
# convert all to lowercase
gentoo_pack_name="${gentoo_pack_name,,}"
# stip all numbers, dashes, underscores and pluses
gentoo_pack_name="${gentoo_pack_name/[0-9-_+]}"
#TODO: check DESCRIPTION, HOMEPAGE and SRC_URI for close matches
if [[ "${gentoo_pack_name}" == "${guru_pack_name}" ]]; then
if [[ "${gentoo_pack_cat}" == "${guru_pack_cat}" ]]; then
if [[ "${gentoo_pack}" == "${guru_pack}" ]]; then
pack_overrides+="\t${guru_pack}::guru exact match of ${gentoo_pack}::gentoo\n"
else
pack_close_match_in_cat+="\t${guru_pack}::guru possible duplicate of ${gentoo_pack}::gentoo\n"
fi
else
pack_close_match+="\t${guru_pack}::guru possible duplicate of ${gentoo_pack}::gentoo\n"
fi
fi
done
done
if [ -n "${pack_close_match}" ]; then
printf "\nWARNING: The following packages closely match packages in the main Gentoo repository\n"
printf "${pack_close_match}"
printf "Please check these manually\n"
fi
if [ -n "${pack_close_match_in_cat}" ]; then
printf "\nWARNING: The following packages closely match packages in the main Gentoo repository in the same category\n"
printf "${pack_close_match_in_cat}"
printf "Please check these manually\n"
fi
if [ -n "${pack_overrides}" ]; then
printf "\nERROR: The following packages override packages in the main Gentoo repository\n"
printf "${pack_overrides}"
printf "Please remove these packages\n"
exit 1
fi
exit 0