From fd95bcde938eff1faade5f3fd21ff5190dd8df31 Mon Sep 17 00:00:00 2001 From: Silvan Calarco Date: Sat, 21 Jul 2012 22:01:04 +0200 Subject: [PATCH] makedist-announcement: add new tool for announcements automatization --- makedist-announcement | 63 +++++ makedist/makedist-announcement.sh | 453 ++++++++++++++++++++++++++++++ 2 files changed, 516 insertions(+) create mode 100755 makedist-announcement create mode 100755 makedist/makedist-announcement.sh diff --git a/makedist-announcement b/makedist-announcement new file mode 100755 index 0000000..f4bee33 --- /dev/null +++ b/makedist-announcement @@ -0,0 +1,63 @@ +#!/bin/bash +# makedist-announcement +# Copyright (c) 2012 by Silvan Calarco +# + +VERSION=0.1 +outputlangs="en it" +distribution="openmamba" + +TEXTDOMAIN="makedist"; export TEXTDOMAIN + +function usage() { + echo "Usage: makedist-announcement distversion [mediumname] + +Example: + +makedist-announcement milestone2 livecd +" + + exit 1 + +} + +[ "$1" ] || usage + +distversion=$1 +mediumname=$2 + +if [ "$distversion" != "devel" ]; then + RELEASE=1 + DISTVERSION=$distversion +else + RELEASE= +fi +. /etc/sysconfig/makedist + +echo "makedist-announcement $VERSION" +echo "=========================" + +if [ "$mediumname" ]; then + for outputlang in $outputlangs; do + case $outputlang in + en) export LC_ALL=en_US.UTF8 ;; + it) export LC_ALL=it_IT.UTF8 ;; + *) echo "Error: unsupported language $outputlang; aborting."; exit 1 ;; + esac + /usr/share/makedist/makedist-announcement.sh $distversion $mediumname $outputlang || exit 1 + done +fi + +echo $"Generating $distversion announcements index" +for outputlang in $outputlangs; do + indexfile=/var/ftp/pub/$distribution/media/$distversion/release-announcement-index.$outputlang.html.inc + > $indexfile + for i in `seq 0 ${#MEDIA_NAME[*]}`; do + mediumdir=/var/ftp/pub/$distribution/media/$distversion/${MEDIA_NAME[i]} + for f in $mediumdir/info/release-announcement-*.$outputlang.html; do + [ -r $f ] || continue + version=`echo $f | sed "s|.*/release-announcement-\(.*\)\.$outputlang.html|\1|"` + echo "${MEDIA_NAME[i]} ${version}
" >> $indexfile + done + done +done diff --git a/makedist/makedist-announcement.sh b/makedist/makedist-announcement.sh new file mode 100755 index 0000000..e5b9257 --- /dev/null +++ b/makedist/makedist-announcement.sh @@ -0,0 +1,453 @@ +#!/bin/bash + +VERSION=0.1 + +archs=(i586 arm x86_64) + +distribution=openmamba +mediumarch=i586 +mediumlang=en +signer="Silvan Calarco" +siteaddress=www.openmamba.org +sitedomain=openmamba.org +forumaddress=forum.openmamba.org +bugsaddress=bugs.openmamba.org +wikiaddress=wiki.openmamba.org + +TEXTDOMAIN="makedist"; export TEXTDOMAIN + +function usage() { + echo "Usage: makedist-announcement distversion mediumname language + +Example: + +makedist-announcement milestone2 livecd it +" + + exit 1 + +} + +[ "$1" -a "$2" -a "$3" ] || usage + +distversion=$1 +mediumname=$2 +outputlang=$3 + +case $outputlang in + it) announcementdate=`date +%d/%m/%Y` ;; + *) announcementdate=`date +%m/%d/%Y` ;; +esac + +if [ "$distversion" != "devel" ]; then + RELEASE=1 + DISTVERSION=$distversion + MAKEDIST_TARGET=$distribution-$distversion + buildinfourl=/var/ftp/pub/$distribution/distromatic/${distversion}-updates +else + RELEASE= + MAKEDIST_TARGET=$distribution + buildinfourl=/var/ftp/pub/$distribution/distromatic/devel-makedist +fi + +. /etc/sysconfig/makedist +. /usr/share/makedist/functions.inc.sh + +# get_pkg_buildinfo - uses distromatic generated build file for +# getting information on the repository +# +# $1: distromatic files base url for repository +# $2: architecture +# $3: pkg name +function get_pkg_buildinfo() { + + local pkg i a local_arch local_distromatic + + [ $1 ] && local_distromatic=$1 || exit 1 + [ $2 ] && local_arch=$2 || exit 1 + [ $3 ] && pkg=$3 + + if [ ! "$pkg" ]; then + [ -e $local_distromatic/builds-${local_arch}.sh ] && . $local_distromatic/builds-${local_arch}.sh + return 0 + fi + + pkg_header=(); + pkg_builds=(); + pkg_obsoletes=(); + pkg_list=(); + + DISTROMATIC_BUILD_FILE=$local_distromatic/builds-${local_arch}.sh + [ -e $DISTROMATIC_BUILD_FILE ] && . $DISTROMATIC_BUILD_FILE + + [ ${pkg_header[0]} ] && pkg_archs=(${pkg_archs[*]} ${local_arch}) + +# { +# echo "Error: missing distromatic generated file $DISTROMATIC_BUILD_FILE; aborting." +# return; +# } +# . $DISTROMATIC_BUILD_FILE + + if [ "${pkg_header[0]}" ]; then + pkg_name=${pkg_header[0]}; + # Note: pkg_arch reported in builds file is just last arch source was + # built for, so we use repository arch instead + pkg_arch=${pkg_header[1]}; + [ "$pkg_arch" = "noarch" ] || pkg_arch=${local_arch} + pkg_version=${pkg_header[2]}; + pkg_release=${pkg_header[3]}; + pkg_group=${pkg_header[4]}; + pkg_license=${pkg_header[5]}; + pkg_size=${pkg_header[6]}; + pkg_buildtime=${pkg_header[7]}; + pkg_altrep=${pkg_header[8]}; + pkg_repository=${pkg_header[9]}; + return 0 + else + unset pkg_name pkg_arch pkg_version pkg_release \ + pkg_group pkg_license pkg_size pkg_buildtime pkg_altrep pkg_repository + + return 1 + fi +} + +function package_is_in_medium() { + local s + + for s in $INSTALLED; do + [ "$s" = "$1" ] && return 0 + done + return 1 +} + +function installed_packages_in_medium() { + local p + + for p in ${pkg_builds[*]}; do + package_is_in_medium $p && echo -n "$p " + done +} + +function source_is_in_medium() { + local s + + for s in $SOURCES; do + [ "$s" = "$1" ] && return 0 + done + return 1 +} + +function print_pkg_in_medium_line() { + + local descr=$1 + local searchpkg=$2 + + source_is_in_medium $searchpkg && print_pkg_line "
  • $descr" $2 >> $outputfile +} + +function block_start() { + blocktmpfile=`mktemp` +} + +function block_end() { + [ "$1" ] || { + echo "Error: block_end: no description given; skipping." + [ -f "$blocktmpfile" ] && rm -f $blocktmpfile + blocktmpfile= + return 1 + } + if [ -s $blocktmpfile ]; then + echo "

    $1

    " >> $outputfile + cat $blocktmpfile >> $outputfile + echo "
    " >> $outputfile + + fi + [ "$blocktmpfile" ] && rm -f $blocktmpfile + blocktmpfile= +} + +function print_pkg_line() { + + local descr=$1 + local searchpkg=$2 + + [ -f "$blocktmpfile" ] || { + echo "Error: print_pkg_line: you must call block_start first; skipping." + return 1 + } + + get_pkg_buildinfo $buildinfourl $mediumarch $searchpkg + if [ "${pkg_name}" ]; then + source_is_in_medium $pkg_name && echo "$1$pkg_version`installed_packages_in_medium`" >> $blocktmpfile + fi +} + +function print_group() { + + searchgroup=$1 + + [ -f "$blocktmpfile" ] || { + echo "Error: print_pkg_line: you must call block_start first; skipping." + return 1 + } + + + grep " $searchgroup " $catalogfile | \ + while read line; do + set -- $line + get_pkg_buildinfo $buildinfourl $mediumarch $1 + echo "${pkg_name}${pkg_version}`installed_packages_in_medium`" >> $blocktmpfile + done +} + +for i in `seq 0 ${#MEDIA_NAME[*]}`; do + [ "$mediumname" = "${MEDIA_NAME[i]}" ] && break; +done + +if [ ! "${MEDIA_NAME[i]}" ]; then + echo "Error: medium ${MEDIA_NAME[i]} not found; aborting." + exit 1 +fi + +mediumplatform=${MEDIA_PLATFORM[i]} +mediumsubplatform=${MEDIA_SUBPLATFORM[i]} + +echo $"Generating announcement for"" $distribution $distversion ${MEDIA_NAME[i]}"" ($outputlang)" + +mediumdir=/var/ftp/pub/$distribution/media/$distversion/${MEDIA_NAME[i]} + +if [ $mediumsubplatform ]; then + . /var/makedist/targets/$MAKEDIST_TARGET/platforms/$mediumsubplatform/settings.inc + medium_name=`arch=_SPLIT_ PLATFORM=$mediumsubplatform media_name` + sub_medium_suffix=${medium_name/*_SPLIT_\./} + sub_medium_name=${medium_name/\._SPLIT_*/} + . /var/makedist/targets/$MAKEDIST_TARGET/platforms/$mediumplatform/settings.inc + medium_name=`arch=_SPLIT_ PLATFORM=$mediumplatform media_name` + medium_suffix=${medium_name/*_SPLIT_\./} + medium_name=${medium_name/\._SPLIT_*/} +else + . /var/makedist/targets/$MAKEDIST_TARGET/platforms/$mediumplatform/settings.inc + medium_name=`arch=_SPLIT_ PLATFORM=$mediumplatform media_name` + medium_suffix=${medium_name/*_SPLIT_\./} + medium_name=${medium_name/\._SPLIT_*/} + sub_medium_suffix=${medium_suffix} + sub_medium_name=${medium_name} +fi + +[ -e /var/makedist/.$medium_name-$mediumlang.$mediumarch.$sub_medium_suffix.distinfo ] || { + echo "Error: missing distinfo file /var/makedist/.$medium_name-$mediumlang.$mediumarch.$sub_medium_suffix.distinfo; aborting." + exit 1 +} +. /var/makedist/.$medium_name-$mediumlang.$mediumarch.$sub_medium_suffix.distinfo + +CONFIGFILE=/etc/makedist/config +. $CONFIGFILE +[ -r $CONFIGFILE-$MAKEDIST_TARGET ] && . $CONFIGFILE-$MAKEDIST_TARGET +[ -r $CONFIGFILE-$MAKEDIST_TARGET-$mediumplatform ] && . $CONFIGFILE-$MAKEDIST_TARGET-$mediumplatform + +[ -e $mediumdir/info ] || mkdir $mediumdir/info +catalogfile=$mediumdir/info/sources.catalog + +[ -e $catalogfile ] || for i in $SOURCES; do + get_pkg_buildinfo /var/ftp/pub/openmamba/distromatic/milestone2-makedist/ $mediumarch $i + echo $pkg_name $pkg_version $pkg_group ${pkg_builds[*]} >> $catalogfile +done + +#for i in $SOURCES; do +# get_pkg_buildinfo /var/ftp/pub/openmamba/distromatic/milestone2-makedist/ i586 $i +# if [ "$pkg_name" ]; then +# echo $pkg_name $pkg_version $pkg_release $pkg_group +# else +# echo "Error: can't find $i package; skipping." +# fi +#done + +version=`ls $mediumdir/en/latest-is-$distversion-*.txt 2>/dev/null| sed "s/.*latest-is-$distversion-\(.*\)\.txt/\1/"` + +outputfile=$mediumdir/info/release-announcement-$version.$outputlang.html + +echo "

    "$"$distribution $distversion ${MEDIA_NAME[i]} $version release announcement""

    " > $outputfile +echo "
    $sitedomain - $announcementdate
    " >> $outputfile +echo "

    "$"The $distribution maintainer is happy to announce the immediate availability of the $distversion $version release of the $distribution ${MEDIA_NAME[i]} distribution." >> $outputfile +[ -e $mediumdir/info/release-notes.$outputlang.html.inc ] && { + echo "

    "$"Release notes""

    " >> $outputfile + cat $mediumdir/info/release-notes.$outputlang.html.inc >> $outputfile +} + +echo "

    "$"Description""

    " >> $outputfile + +# [ -e $mediumdir/$outputlang/preview/preview.jpg ] && \ +# echo "" >> $outputfile + +cat $mediumdir/info/description.$outputlang.html.inc >> $outputfile + +if [ -e $mediumdir/info/target.$outputlang.html.inc ]; then + echo "

    "$"Who is it for""

    " >> $outputfile + cat $mediumdir/info/target.$outputlang.html.inc >> $outputfile +fi + +if [ -e $mediumdir/info/requirements.$outputlang.html.inc ]; then + echo "

    "$"Requirements""

    " >> $outputfile + cat $mediumdir/info/requirements.$outputlang.html.inc >> $outputfile +fi + +if [ -e $mediumdir/info/features.$outputlang.html.inc ]; then + echo "

    "$"Features""

    " >> $outputfile + cat $mediumdir/info/features.$outputlang.html.inc >> $outputfile +fi + + +echo "

    "$"Downloads""

    \ +" >> $outputfile +for l in ${MEDIA_LANGUAGES[i]}; do + mediummd5=`cat $mediumdir/$l/$distribution-${MEDIA_NAME[i]}-$l-$distversion-$version.${mediumarch}.${medium_suffix}.MD5.txt | awk '{ print $1; }'` + mediumdate=`stat -c %z $mediumdir/$l/$distribution-${MEDIA_NAME[i]}-$l-$distversion-$version.${mediumarch}.${medium_suffix} | sed "s| .*||"` + mediumsize=`stat -c %s $mediumdir/$l/$distribution-${MEDIA_NAME[i]}-$l-$distversion-$version.${mediumarch}.${medium_suffix}` + mediumsizeMB=`expr $mediumsize / 1048576` + + echo -n " +" >> $outputfile +done +echo -n "
    "$"Language"""$"Arch"""$"Download link"""$"Size"""$"Date""MD5
    " >> $outputfile + case $l in + en) echo -n $"english" >> $outputfile ;; + it) echo -n $"italian" >> $outputfile ;; + es) echo -n $"spanish" >> $outputfile ;; + *) echo -n $"unknown" >> $outputfile ;; + esac + echo "${mediumarch}\ +\ +$distribution-${MEDIA_NAME[i]}-$l-$distversion-$version.${mediumarch}.${medium_suffix}$mediumsizeMB MB$mediumdate$mediummd5
    " >> $outputfile + +echo "

    "$"Operating system information""

      \ +
    • "$"Name"": openmamba +
    • "$"Type"": "$"GNU/Linux operating system"" +
    • "$"License"": "$"GNU General Public License (GPL) version 3"" +
    • "$"Release branch"": $distversion +" >> $outputfile + +if [ "$distversion" = "milestone2" ]; then + echo "\ +
    • "$"Planned maintenance"": "$"long term"" +
    • "$"Updates level"": "$"bugfix"", "$"security"", "$"end-user applications"" +
    • "$"Default updates channels"": milestone2, milestone2-updates, milestone2-games +" >> $outputfile +elif [ "$distversion" = "devel" ]; then + echo "\ +
    • "$"Planned maintenance"": "$"long term"" +
    • "$"Updates level"": "$"architectural changes"" +
    • "$"Updates default channels"": devel, devel-games +" >> $outputfile +fi +echo -n "
    " >> $outputfile + +block_start +print_pkg_line $"Linux kernel" kernel +print_pkg_line $"bootloader (grub)" grub +print_pkg_line $"boot system (dracut)" dracut +print_pkg_line $"NVIDIA proprietary driver" NVIDIA +print_pkg_line $"AMD/ATI proprietary driver" ati-driver +block_end $"Kernel, boot and drivers" + +block_start +print_pkg_line gcc gcc +print_pkg_line glibc glibc +print_pkg_line binutils binutils +block_end $"GNU Toolchain" + +block_start +print_pkg_line "RPM" rpm +print_pkg_line "Smart Package Manager" smart +print_pkg_line "PackageKit" PackageKit +print_pkg_line "KDE PackageKit GUI" kpackagekit +print_pkg_line "Gnome PackageKit GUI" gnome-packagekit +block_end $"Packages and updates management" + +block_start +print_pkg_line X.org xorg-server +print_pkg_line Mesa Mesa +print_pkg_line KDE kde-workspace +print_pkg_line GNOME gnome-session +print_pkg_line LXDE lxde-common +block_end $"Graphical and Desktop environment" + +block_start +print_group "Graphical Desktop/Applications/Graphics" +block_end $"Graphics packages" + +block_start +print_group "Graphical Desktop/Applications/Internet" +print_pkg_line "NetworkManager" NetworkManager +print_pkg_line "KDE network management applet" plasma-applet-networkmanagement +print_pkg_line "Gnome network management applet" network-manager-applet +print_pkg_line "KDE Firewall interface" kcm_ufw +print_pkg_line "Gnome Firewall interface" gufw +block_end $"Internet/Networking packages" + +block_start +print_group "Graphical Desktop/Applications/Multimedia" +block_end $"Multimedia packages" + +block_start +print_group "Graphical Desktop/Applications/Office" +print_group "Graphical Desktop/Applications/Publishing" +block_end $"Office/Publishing packages" + +block_start +print_group "Graphical Desktop/Applications/Games" +block_end $"Games packages" + +block_start +print_pkg_line VirtualBox VirtualBox +print_pkg_line qemu qemu +print_pkg_line Wine wine +block_end $"Emulation/Virtualization packages" + +block_start +print_pkg_line $"Partition editor" gparted +print_pkg_line $"Data recovery" testdisk +print_pkg_line $"MBR boot loader" mbr +print_pkg_line $"NTFS recovery tools" ntfs-3g +print_pkg_line $"Serial terminal emulator" minicom +block_end $"Recovery and diagnostic tools" + +echo "

    "$"Links""

    \ + " >> $outputfile + +echo "

    "$"Announcement automatically generated by"" makedist-announcement $VERSION "$"and signed off by"" $signer" >> $outputfile +#gpg --clearsign $outputfile > $outputfile.sig + +rm $mediumdir/info/release-announcement.$outputlang.html +ln -s release-announcement-$version.$outputlang.html $mediumdir/info/release-announcement.$outputlang.html + +> $mediumdir/info/index.$outputlang.html.inc +for f in ls $mediumdir/info/release-announcement-*.$outputlang.html; do + version=`echo $f | sed "s|.*/release-announcement-\(.*\)\.$outputlang.html|\1|"` + echo "${MEDIA_NAME[i]}
    " >>$mediumdir/info/index.$outputlang.html.inc +done + +case $outputlang in + en) SENDADDRESSES="openmamba-users@openmamba.org openmamba-devel@openmamba.org" ;; + it) SENDADDRESSES="openmamba-users-it@openmamba.org openmamba-devel-it@openmamba.org" ;; + *) SENDADDRESSES= +esac + +if [ "$SENDEMAIL" ]; then + for a in $SENDADDRESSES; do + echo -n "Send email to $a [y/N]?" + read ans + if [ "$ans" = "y" -o "$ans" = "Y" ]; then + cat $tmpfile $outputfile | mail \ + -a "From: openmamba " \ + -a "Content-Type: text/html" \ + -s $"$distribution $distversion ${MEDIA_NAME[i]} $version release announcement" \ + $a + fi + done +fi