Compare commits

...

15 Commits

Author SHA1 Message Date
Sławomir Nizio 12e2ccd510 git-hooks: new scripts 2017-05-23 21:01:01 +02:00
Ettore Di Giacinto b91870c72d sabayon-buildpackages: add support for DETECT_OBSOLETE and TARGET_OVERLAY 2017-05-21 14:16:04 +02:00
Ettore Di Giacinto b1726fdb4d builder: add DETECT_OBSOLETE 2017-05-21 14:13:59 +02:00
Ettore Di Giacinto 6d0f26ceb7 sabayon-detectobsolete: more perlish 2017-03-29 14:46:34 +02:00
Ettore Di Giacinto 49ba945b63 builder: running emerge -C anyway 2017-03-29 14:19:39 +02:00
Ettore Di Giacinto f55338b552 sabayon-detectobsolete: utility to list possible obsolete packages in overlays 2017-03-29 14:19:39 +02:00
Ettore Di Giacinto 0c964e4b64 builder: PRETEND changes
move up the adjustment of emerge/equo arguments, avoid to copy artifacts when PRETEND mode is on
2017-03-22 14:40:27 +01:00
Ettore Di Giacinto 5f75f6e64b builder: do not emerge preserved rebuild if PRETEND is set 2017-03-20 11:19:17 +01:00
Ettore Di Giacinto 9fd7ce2582 builder: PRETEND avoids also package removals. 2017-03-20 11:17:59 +01:00
Ettore Di Giacinto a62baaf0ea builder: PRETEND, add -p to equo/emerge arguments 2017-03-19 11:50:09 +01:00
Ettore Di Giacinto bf78080418 Revert "builder: add PRETEND environment variable"
This reverts commit 575ec04147.
2017-03-18 13:54:12 +01:00
Ettore Di Giacinto 218dfa9dcd sabayon-buildpackages: add PRETEND support 2017-03-15 14:12:12 +01:00
Ettore Di Giacinto 575ec04147 builder: add PRETEND environment variable 2017-03-15 11:50:41 +01:00
Ben Roberts 903aa0fa0d add SYS_PTRACE capability to docker build, to prevent sandbox ptrace errors 2016-11-02 11:21:03 +00:00
Ettore Di Giacinto ada5793612 sabayondevkit-functions: set -e and make non-fatal commands return always true 2016-11-02 12:11:47 +01:00
6 changed files with 206 additions and 13 deletions
+24 -5
View File
@@ -40,6 +40,9 @@ my $remote_overlay = $ENV{REMOTE_OVERLAY};
my $qualityassurance_checks = $ENV{QA_CHECKS} // 0; my $qualityassurance_checks = $ENV{QA_CHECKS} // 0;
my $remote_conf_portdir = $ENV{REMOTE_CONF_PORTDIR}; my $remote_conf_portdir = $ENV{REMOTE_CONF_PORTDIR};
my $remote_portdir = $ENV{REMOTE_PORTDIR}; my $remote_portdir = $ENV{REMOTE_PORTDIR};
my $pretend = $ENV{PRETEND} // 0;
my $obsoleted = $ENV{DETECT_OBSOLETE} // 0;
my $target_overlay = $ENV{TARGET_OVERLAY};
my $make_conf = $ENV{MAKE_CONF}; my $make_conf = $ENV{MAKE_CONF};
@@ -235,8 +238,9 @@ sub uniq {
keys %{ { map { $_ => 1 } @_ } }; keys %{ { map { $_ => 1 } @_ } };
} }
sub detect_useflags # Detect useflags defined as [-alsa,avahi] in atom,
{ # Detect useflags defined as [-alsa,avahi] in atom, and fill $hash within the $target sub-hash # and fill $hash within the $target sub-hash
sub detect_useflags {
my ( $target, $packages ) = @_; my ( $target, $packages ) = @_;
my @packs = @{$packages}; my @packs = @{$packages};
for my $i ( 0 .. $#packs ) { for my $i ( 0 .. $#packs ) {
@@ -315,6 +319,14 @@ say "\t* " . $_ for @ARGV;
say "[*] Syncing configurations files, Layman and Portage"; say "[*] Syncing configurations files, Layman and Portage";
if ($pretend) {
say "[*] PRETEND enabled, no real action will be performed.";
say " Bear in mind that in such way the list of packages";
say " that emerge will try to compile will be bigger";
$equo_install_args .= " -p";
$emerge_defaults_args .= " -p";
}
# Syncronizing portage configuration and adding overlays # Syncronizing portage configuration and adding overlays
system("echo 'en_US.UTF-8 UTF-8' > /etc/locale.gen"); #be sure about that. system("echo 'en_US.UTF-8 UTF-8' > /etc/locale.gen"); #be sure about that.
@@ -523,7 +535,8 @@ if ($use_equo) {
safe_call("equo i $equo_install_args --bdeps $_") safe_call("equo i $equo_install_args --bdeps $_")
for ( @packages_deps, @equo_install ) for ( @packages_deps, @equo_install )
; ## bail out here, if installs fails. emerge will compile a LOT of stuff ; ## bail out here, if installs fails. emerge will compile a LOT of stuff
if ( @equo_remove > 0 ) { if ( @equo_remove > 0 and !$pretend ) {
say "Removing with equo: @equo_remove";
system("equo rm --nodeps $_") for (@equo_remove); system("equo rm --nodeps $_") for (@equo_remove);
} }
} }
@@ -554,6 +567,7 @@ system("emerge --info")
my $rt; my $rt;
if ( $emerge_remove and $emerge_remove ne "" ) { if ( $emerge_remove and $emerge_remove ne "" ) {
say "Removing with emerge: $emerge_remove";
system("emerge -C $_") for split( / /, $emerge_remove ); system("emerge -C $_") for split( / /, $emerge_remove );
} }
@@ -570,7 +584,7 @@ my $return = $rt >> 8;
# best effort -B # best effort -B
compile_packs( "injected_targets", @injected_packages ); compile_packs( "injected_targets", @injected_packages );
if ($preserved_rebuild) { if ( $preserved_rebuild and !$pretend ) {
system("emerge -j $jobs --buildpkg \@preserved-rebuild"); system("emerge -j $jobs --buildpkg \@preserved-rebuild");
system("revdep-rebuild"); system("revdep-rebuild");
@@ -586,9 +600,14 @@ if ( $qualityassurance_checks == 1 ) {
} }
} }
if ( $obsoleted and $target_overlay ) {
say "*** Detecting obsoletes ***";
system("sabayon-detectobsolete --overlay ${target_overlay}");
}
# Copy files to artifacts folder # Copy files to artifacts folder
system( system(
"mkdir -p $artifacts_folder;cp -rfv /usr/portage/packages $artifacts_folder" "mkdir -p $artifacts_folder;cp -rfv /usr/portage/packages $artifacts_folder"
) if ( $artifacts_folder and !$return ); ) if ( $artifacts_folder and !$return and !$pretend );
exit($return); exit($return);
+84
View File
@@ -0,0 +1,84 @@
#!/usr/bin/env perl
# This code is licenced GPLv2 or newer.
use warnings;
use strict;
use 5.010;
my $g_thres = shift // 3;
sub set_atoms {
my %atoms = ();
my $fh = shift;
while (my $line = <$fh>) {
chomp $line;
my @words = split(' ', $line, 2);
next if $words[0] eq "??"; # allow "dangling" files
my $what = $words[1];
@words = split(m:/:, $what);
my $pkg;
if (@words >= 2) {
$pkg = join("/", @words[0..1]);
} else {
$pkg = $words[0]
}
$atoms{$pkg} = 1;
}
keys %atoms
}
sub num {
my $what = shift;
my @arr = @_;
my $num = 0;
for (@arr) {
$num++ if index($_, "$what-") == 0
}
$num
}
sub replace {
my $atom = shift;
my @arr = @_;
my @new_arr;
for my $item (@arr) {
if( index($item, $atom) == 0 ) {
1;
} else {
push @new_arr, $item;
}
}
push @new_arr, "$atom*";
@new_arr;
}
# try to make (a*, b, c*) from (a-1, a, a-2, b, c, c-1),
# for example, if numberOf(/^a-?/) >= $thres
sub do_reduce {
my $thres = shift;
my @atoms = @_;
my @processed_atoms = @atoms;
for my $atom (@atoms) {
@processed_atoms = replace($atom, @processed_atoms)
if (num($atom, @processed_atoms) >= $thres);
}
@processed_atoms
}
#my @atoms = set_atoms(*DATA);
my @atoms = set_atoms(*STDIN);
@atoms = do_reduce($g_thres, @atoms);
say join ",", sort @atoms;
__DATA__
M net-p2p/transmission-base/metadata.xml
M net-p2p/transmission-cli/metadata.xml
M net-p2p/transmission-daemon/metadata.xml
M net-p2p/transmission-gtk/metadata.xml
M net-p2p/transmission-qt4/metadata.xml
M net-p2p/transmission/metadata.xml
M cat/pkg-1
M cat/pkg-2
M cat/pkg
M net-p2p/nic
?? betr.pl
+20
View File
@@ -0,0 +1,20 @@
#!/bin/sh
# This code is licenced GPLv2 or newer.
# An example hook script to prepare the commit log message.
# Called by "git commit" with the name of the file that has the
# commit message, followed by the description of the commit
# message's source. The hook's purpose is to edit the commit
# message file. If the hook fails with a non-zero status,
# the commit is aborted.
_out=$(git status -s | overlays-commit-msg.pl)
_ver=$(git status -s | sed -rn 's/^[AR] *(.* -> )?.*-([^-]+)\.ebuild$/\2/p' | head -n 1)
_bump=${_ver:+version bump to $_ver}
case $2 in
#message)
# sed -i -e "1s:^:[$_subdir/$_curdir] :" "$1" ;;
"")
sed -i -e "1i[$_out] $_bump" "$1" ;;
esac
+4 -1
View File
@@ -8,7 +8,7 @@ MAKE_CONF="${MAKE_CONF:-$SAB_WORKSPACE/specs/make.conf}"
OUTPUT_DIR="${OUTPUT_DIR:-$SAB_WORKSPACE/portage_artifacts/}" OUTPUT_DIR="${OUTPUT_DIR:-$SAB_WORKSPACE/portage_artifacts/}"
LOCAL_OVERLAY="${LOCAL_OVERLAY:-$SAB_WORKSPACE/local_overlay}" LOCAL_OVERLAY="${LOCAL_OVERLAY:-$SAB_WORKSPACE/local_overlay}"
ENTROPY_REPOSITORY="${ENTROPY_REPOSITORY:-main}" # Can be weekly, main, testing ENTROPY_REPOSITORY="${ENTROPY_REPOSITORY:-main}" # Can be weekly, main, testing
DOCKER_OPTS="${DOCKER_OPTS:--ti --rm}" DOCKER_OPTS="${DOCKER_OPTS:--ti --rm --cap-add=SYS_PTRACE}"
. /sbin/sabayondevkit-functions.sh . /sbin/sabayondevkit-functions.sh
@@ -56,6 +56,9 @@ docker_volumes=( -v "$OUTPUT_DIR:/usr/portage/packages" )
[ -z "$REMOTE_CONF_PORTDIR" ] || docker_env+=(-e "REMOTE_CONF_PORTDIR=$REMOTE_CONF_PORTDIR") [ -z "$REMOTE_CONF_PORTDIR" ] || docker_env+=(-e "REMOTE_CONF_PORTDIR=$REMOTE_CONF_PORTDIR")
[ -z "$REMOTE_PORTDIR" ] || docker_env+=(-e "REMOTE_PORTDIR=$REMOTE_PORTDIR") [ -z "$REMOTE_PORTDIR" ] || docker_env+=(-e "REMOTE_PORTDIR=$REMOTE_PORTDIR")
[ -z "$ETP_NOCACHE" ] || docker_env+=(-e "ETP_NOCACHE=$ETP_NOCACHE") [ -z "$ETP_NOCACHE" ] || docker_env+=(-e "ETP_NOCACHE=$ETP_NOCACHE")
[ -z "$PRETEND" ] || docker_env+=(-e "PRETEND=$PRETEND")
[ -z "$DETECT_OBSOLETE" ] || docker_env+=(-e "DETECT_OBSOLETE=$DETECT_OBSOLETE")
[ -z "$TARGET_OVERLAY" ] || docker_env+=(-e "TARGET_OVERLAY=$TARGET_OVERLAY")
[ -d "$LOCAL_OVERLAY" ] && docker_volumes+=(-v "$LOCAL_OVERLAY:/usr/local/local_portage") [ -d "$LOCAL_OVERLAY" ] && docker_volumes+=(-v "$LOCAL_OVERLAY:/usr/local/local_portage")
if [ -e $MAKE_CONF ]; then if [ -e $MAKE_CONF ]; then
+65
View File
@@ -0,0 +1,65 @@
#!/usr/bin/perl
# mudler <mudler@sabayon.org>
# this tool requires querypkg
use Getopt::Long;
use strict;
use warnings;
my $arch;
my $verbose;
my $overlay;
GetOptions(
"arch=s" => \$arch,
"overlay=s" => \$overlay,
"verbose" => \$verbose
) or die("Error in command line arguments\n");
die("You should at least supply an overlay with --overlay") if !$overlay;
# Input: Overlay absolute path
# Output: array with package names (category/name)
sub get_packages {
keys %{
{ map {
s/$overlay\/|\.ebuild//g;
$_ = join( '/', ( split( /\//, $_ ) )[ 0, 1 ] );
$_ => 1
} glob( $_[0] . "/*/*/*.ebuild" )
}
};
}
# Input: package (category/name)
# Output: returns 1 if obsolete and can be removed
sub obsolete_package($$) {
my $package = $_[0];
my $arch = $_[1];
my $l_arch = ( defined $arch and $arch ne "" ? "--arch $arch" : "" );
print "querypkg -q $l_arch $package --show spm_repo\n" if $verbose;
my @out = `querypkg -q $l_arch $package --show spm_repo`;
chomp(@out);
return 1 if "@out" eq "";
foreach my $l (@out) {
print " >> $l\n" if $verbose;
return 1 if ( $l =~ /$package.*\{spm_repo\:gent.*/ );
}
return 0;
}
my @packages = get_packages($overlay);
my @obsoletes;
foreach my $p (@packages) {
print "[$p] Checking if there is a version in the repositories.... ";
print "\n" if $verbose;
if ( obsolete_package( $p, $arch ) ) {
print " OBSOLETE! \n";
push( @obsoletes, $p );
}
else {
print " ok \n";
}
}
print "\n";
print "Obsoletes found:\n\n";
print "$_\n" for @obsoletes;
+9 -7
View File
@@ -1,5 +1,7 @@
#!/bin/bash #!/bin/bash
set -e
check_docker_requirements(){ check_docker_requirements(){
if [ "$(id -u)" != "0" ]; then if [ "$(id -u)" != "0" ]; then
groups | grep -q docker || echo "--> If you are not running the script as root, your user should be in the docker group to use it. (sudo gpasswd -a $USER docker)" groups | grep -q docker || echo "--> If you are not running the script as root, your user should be in the docker group to use it. (sudo gpasswd -a $USER docker)"
@@ -12,12 +14,12 @@ die() { echo "$@" 1>&2 ; exit 1; }
build_sync() { build_sync() {
layman -S layman -S
emerge --sync emerge --sync
eix-update || exit 1 eix-update
pushd /opt/sabayon-build/ pushd /opt/sabayon-build/
git stash git stash
git fetch --all git fetch --all || true
git checkout master git checkout master || true
git reset --hard origin/master git reset --hard origin/master || true
popd popd
} }
@@ -27,7 +29,7 @@ build_category() {
for i in $(EIX_LIMIT=0 eix --only-names --pure-packages "$SEARCH/" | xargs echo | uniq); for i in $(EIX_LIMIT=0 eix --only-names --pure-packages "$SEARCH/" | xargs echo | uniq);
do do
echo "Building $i" echo "Building $i"
emerge ${EMERGE_DEFAULT_ARGS:---accept-properties=-interactive --verbose --oneshot --nospinner --noreplace --quiet-build=y --quiet-fail --fail-clean=y --complete-graph --buildpkg} $i emerge ${EMERGE_DEFAULT_ARGS:---accept-properties=-interactive --verbose --oneshot --nospinner --noreplace --quiet-build=y --quiet-fail --fail-clean=y --complete-graph --buildpkg} $i || true
done done
} }
@@ -36,7 +38,7 @@ build_obsolete() {
for i in $(EIX_LIMIT=0 eix-test-obsolete | grep '\[U\]' | awk '{ print $2 }' | xargs echo | uniq); for i in $(EIX_LIMIT=0 eix-test-obsolete | grep '\[U\]' | awk '{ print $2 }' | xargs echo | uniq);
do do
echo "Build $i" echo "Build $i"
emerge ${EMERGE_DEFAULT_ARGS:---accept-properties=-interactive -u --verbose --oneshot --nospinner --quiet-build=y --quiet-fail --fail-clean=y --complete-graph --buildpkg --noreplace} $i emerge ${EMERGE_DEFAULT_ARGS:---accept-properties=-interactive -u --verbose --oneshot --nospinner --quiet-build=y --quiet-fail --fail-clean=y --complete-graph --buildpkg --noreplace} $i || true
done done
} }
@@ -46,7 +48,7 @@ build_category_installed() {
for i in $(EIX_LIMIT=0 eix -I --only-names --pure-packages "$SEARCH/" | xargs echo | uniq); for i in $(EIX_LIMIT=0 eix -I --only-names --pure-packages "$SEARCH/" | xargs echo | uniq);
do do
echo "Building $i" echo "Building $i"
emerge ${EMERGE_DEFAULT_ARGS:---accept-properties=-interactive -u --newuse --noreplace --changed-use --update --verbose --oneshot --nospinner --quiet-build=y --quiet-fail --fail-clean=y --complete-graph --buildpkg} $i emerge ${EMERGE_DEFAULT_ARGS:---accept-properties=-interactive -u --newuse --noreplace --changed-use --update --verbose --oneshot --nospinner --quiet-build=y --quiet-fail --fail-clean=y --complete-graph --buildpkg} $i || true
done done
} }