diff --git a/PACKAGING_FRAMEWORKS b/PACKAGING_FRAMEWORKS index ec479b5..f43ae05 100644 --- a/PACKAGING_FRAMEWORKS +++ b/PACKAGING_FRAMEWORKS @@ -1,72 +1,72 @@ This is a quick description on how KDE Frameworks packaging is done. [ ] Ensure everything is green in https://build.kde.org/view/Frameworks/ [ ] Ensure everything is green in http://ci-logs.kde.flaska.net/matrix.html - [x] Ensure that the tags from the last release have been pushed! - [x] ssh -A pkgframeworks@lxr.kde.org, and from there: + [ ] Ensure that the tags from the last release have been pushed! + [ ] ssh -A pkgframeworks@lxr.kde.org, and from there: Update version file with the correct version number, commit. Edit config, ensure dry_run=0 cd ~/release-tools/ ; git pull rm -rf sources versions REVISIONS_AND_HASHES l10n tags.git cd ../src && ./kdesrc-build --src-only && cd ../release-tools && ./list_frameworks.sh && ./update_l10n.sh ; ./increase_frameworks_version.sh step1 && ./increase_frameworks_version.sh step2 - [x] In case this detected new frameworks, check that step1/step2 worked. - [x] Pack the sources: + [ ] In case this detected new frameworks, check that step1/step2 worked. + [ ] Pack the sources: ./make_rc_tag.sh # takes 40 minutes - [x] Locally, ensure the rc tag compiles (to avoid e.g. a bad .po file breaking the build) + [ ] Locally, ensure the rc tag compiles (to avoid e.g. a bad .po file breaking the build) $ edit extragear/utils/kdesrc-build/kf5-frameworks-build-include to add tag v5.12.0-rc1 in module-set frameworks $ kdesrc-build frameworks - [x] All good, pack it up. + [ ] All good, pack it up. $ ./remote-gpg ./pack_all.sh # takes 10 minutes - [x] If you have ssh access to ftpadmin@racnoss.kde.org: + [ ] If you have ssh access to ftpadmin@racnoss.kde.org: ./upload_all.sh # cannot be done from a resumed screen... - [x] Locally, run + [ ] Locally, run $ ./grab_from_scripty.sh && ./mail_release_team.sh * To update a tag+tarball after making fixes (grabbing all changes from master) (this is the lazy version of the next solution, it re-commits all po files so it's not as good) ./make_rc_tag.sh kconfigwidgets && ./pack.sh kconfigwidgets && ./upload_all.sh (and re-run ./create_sources_inc if already done) * To update a tag+tarball by cherry-picking a single fix With a script: ./make_updated_tarball.sh newrc|patchrelease The manual way: git checkout local_release (if no such branch exists, there are no translations, just pull master and tag, or make a branch for cherry-picking) git fetch ; git cherry-pick -x sha1 (or git merge origin/master) ; git tag -a vx.y.z-rcN -m "" ; git push --tags Update N in tags.git, check version file, ./pack.sh ; ./upload_all.sh (and re-run ./create_sources_inc if already done) * cat versions/* > REVISIONS_AND_HASHES, if you want to send it all-in-one-go after updates [ ] Write the list of changes in markdown format, into a file called changelog send it to kde-frameworks-devel@kde.org for information and review. This is partly automated with ./generate_changelog.sh Several days later: [ ] 8 hours before the release: $ ssh ftpadmin@racnoss.kde.org "chmod a+rx ~/stable/frameworks/5.xx ; ls -l ~/stable/frameworks" - ./tag_all.sh && ./create_sources_inc + [ ] ./tag_all.sh && ./create_sources_inc # takes 20 minutes (not from a resumed screen, for the git push in inqlude-data) - cd ../www ; vi index.php # add entry at the top - svn commit + cd ../www ; vi index.php # add entry at the top + svn commit [ ] Email changelog text to kde-devel@kde.org and kde-core-devel@kde.org, and another mail to kde-announce@kde.org, by running, locally: $ ./grab_from_scripty.sh && ./mail_announcement.sh [ ] Post to the dot on https://dot.kde.org/content/contribute-story [ ] Update the version numbers right away in master. vi version ./increase_frameworks_version.sh step1 To make a patchlevel release: * Use the cherry-pick procedure above. Run "./create_sources_inc x.y.z", commit the new info file. Edit info/kde-frameworks-*.php: mention the "known bugs" and include the new info file under the main one. diff --git a/generate_changelog.sh b/generate_changelog.sh index 47bba8c..64db5e8 100755 --- a/generate_changelog.sh +++ b/generate_changelog.sh @@ -1,48 +1,48 @@ #!/bin/bash # Generate a changelog in markdown format set -e . config . version . utils.sh changelog=$releasetools/changelog-$version test -f $changelog && mv -f $changelog ${changelog}.orig script=$releasetools/parse_changelogs.pl out=$releasetools/changelogs test -d $out && rm -rf $out mkdir -p $out cat $releasetools/tags.git | while read repo tag; do echo $repo checkout=$(findCheckout $repo) test -d $checkout || exit 1 cd $checkout if [ -n "`git tag -l v$previousversion`" ]; then cmd="git --no-pager log v$previousversion..$tag" - if [ "$repo" = extra-cmake-modules ]; then - ( echo '# Extra CMake Modules' ; $cmd ) | $script > $out/extra-cmake-modules.changes - else + #if [ "$repo" = extra-cmake-modules ]; then + #( echo '# Extra CMake Modules' ; $cmd ) | $script > $out/extra-cmake-modules.changes + #else ( head -n1 README.md ; $cmd ) | $script > $out/$repo.changes - fi + #fi else - echo -e "# $repo\n\nNew module" > $out/$repo.changes + echo -e "### $repo\n\nNew module\n" > $out/$repo.changes fi done cd $out echo > $changelog cat *.changes >> $changelog echo "### Security information" >> $changelog echo >> $changelog echo "The released code has been GPG-signed using the following key:" >> $changelog echo "pub rsa2048/58D0EE648A48B3BB 2016-09-05 David Faure " >> $changelog echo "Primary key fingerprint: 53E6 B47B 45CE A3E0 D5B7 4577 58D0 EE64 8A48 B3BB" >> $changelog echo "Done, now fix by hand:" echo "Remove 'revert X' and 'X'" echo "Remove fixes to unittests" diff --git a/parse_changelogs.pl b/parse_changelogs.pl index 6c3eb2f..e1adf28 100755 --- a/parse_changelogs.pl +++ b/parse_changelogs.pl @@ -1,163 +1,164 @@ #!/usr/bin/perl use strict; use warnings; my $in_headers = 0; my $in_log = 0; my $firstline; my $changelog; my $bugline; my $skip = 1; my $firstchange = 1; my $fwname; sub process_commit() { if (defined $firstline && !defined $changelog) { $skip = 1 if ($firstline =~ /coding style/i); $skip = 1 if ($firstline =~ /autotest/i); $skip = 1 if ($firstline =~ /unit ?test/i); $skip = 1 if ($firstline =~ /unit-test/i); $skip = 1 if ($firstline =~ /documentation/i); $skip = 1 if ($firstline =~ /fix test/i); $skip = 1 if ($firstline =~ /fix runtime warning/i); $skip = 1 if ($firstline =~ /clang warning/i); $skip = 1 if ($firstline =~ /--warning/i); $skip = 1 if ($firstline =~ /missing license/i); $skip = 1 if ($firstline =~ /^doc$/i); $skip = 1 if ($firstline =~ /^docu /i); $skip = 1 if ($firstline =~ /fix docs/i); $skip = 1 if ($firstline =~ /apidox/i); $skip = 1 if ($firstline =~ /pedantic/i); $skip = 1 if ($firstline =~ /fix build/i); $skip = 1 if ($firstline =~ /fix debug/i); $skip = 1 if ($firstline =~ /debug statement/i); $skip = 1 if ($firstline =~ /debug area/i); $skip = 1 if ($firstline =~ /debug output/i); $skip = 1 if ($firstline =~ /test executable/i); $skip = 1 if ($firstline =~ /test application/i); $skip = 1 if ($firstline =~ /test file/i); $skip = 1 if ($firstline =~ /^fix comment/i); $skip = 1 if ($firstline =~ /adjust comment/i); $skip = 1 if ($firstline =~ /^pedantic/i); $skip = 1 if ($firstline =~ /^compile\+\+/i); $skip = 1 if ($firstline =~ /^comment\+\+/i); $skip = 1 if ($firstline =~ /minor/i); $skip = 1 if ($firstline =~ /krazy/i); $skip = 1 if ($firstline =~ /arcconfig/i); $skip = 1 if ($firstline =~ /kf6 todo/i); $skip = 1 if ($firstline =~ /normalize signal/i); $skip = 1 if ($firstline =~ /bump version/i); $skip = 1 if ($firstline =~ /reorder variable/i); $skip = 1 if ($firstline =~ /update version number/i); $skip = 1 if ($firstline =~ /add missing file/i); $skip = 1 if ($firstline =~ /fix typo/i); $skip = 1 if ($firstline =~ /fix compil/i); $skip = 1 if ($firstline =~ /typo fix/i); $skip = 1 if ($firstline =~ /remove dead code/i); $skip = 1 if ($firstline =~ /gitignore/i); $skip = 1 if ($firstline =~ /^cleanup$/i); $skip = 1 if ($firstline =~ /code cleanup/i); $skip = 1 if ($firstline =~ /Clazy/i); $skip = 1 if ($firstline =~ /clang/i); $skip = 1 if ($firstline =~ /unused variable/i); $skip = 1 if ($firstline =~ /unused function/i); $skip = 1 if ($firstline =~ /^Merge remote-tracking branch/i); $skip = 1 if ($firstline =~ /QStringLiteral/i); $skip = 1 if ($firstline =~ /Prefer nullptr over/i); $skip = 1 if ($firstline =~ /nullptr everywhere/i); $skip = 1 if ($firstline =~ /new connect/i); $skip = 1 if ($firstline =~ /qstring optimization/i); $skip = 1 if ($firstline =~ /fix binding loop/i); $skip = 1 if ($firstline =~ /CompilerSettings change the policies/i); $skip = 1 if ($firstline =~ /Individually specify supported platforms/i); $skip = 1 if ($firstline =~ /Promote Android support/i); $skip = 1 if ($firstline =~ /Add FreeBSD/i); $skip = 1 if ($firstline =~ /Require CMake 3.0/i); $skip = 1 if ($firstline =~ /Q_DECL_OVERRIDE/i); $skip = 1 if ($firstline =~ /Q_ENUMS -> Q_ENUM and Q_FLAGS -> Q_FLAG/i); $skip = 1 if ($firstline =~ /install QCH file with the public API dox/i); } if (!$skip) { if ($firstchange) { $firstchange = 0; print "##" . $fwname; print "\n"; } my $suffix = ""; if (defined $bugline) { $suffix = " (bug $bugline)"; } if (defined $changelog) { print "* " . $changelog . $suffix . "\n"; } elsif (defined $firstline) { print "* " . $firstline . $suffix . "\n"; } else { print "EMPTY COMMIT...\n"; } } # clear vars undef $firstline; undef $changelog; undef $bugline; $skip = 0; $in_headers = 1; } while (<>) { if (!defined $fwname) { $fwname = $_; } if (/^commit/) { # process previous commit process_commit(); } elsif (/^$/) { if ($in_headers) { $in_headers = 0; $in_log = 1; } else { $in_headers = 1; $in_log = 0; } } else { if ($in_log) { s/^ //; s/\.$//; # remove trailing dot + s/^-\s*//; # remove leading '-', which Markdown.pl turns into
    chomp; if (!defined $firstline && !/^\s*$/) { $firstline = $_; } if (/CHANGELOG:/) { s/\s*CHANGELOG:\ *//; $changelog = $_; } if (/BUG:/) { s/.*BUG:\ *//; $bugline = $_; } $skip = 1 if (/SVN_SILENT/ || /GIT_SILENT/); $skip = 1 if (/Upgrade ECM and KF5 version/); $skip = 1 if (/Commit translations/); $skip = 1 if (/Upgrade KF5 version/); $skip = 1 if (/Upgrade ECM version/); $skip = 1 if (/Update ECM version/); $skip = 1 if (/Upgrade Qt5? version requirement/); $skip = 1 if (/Qt 5.5.0 is now required, as discussed on kde-frameworks-devel/); $skip = 1 if (/reviewboardrc/); $skip = 1 if (/Add verbose (?:|ecm )message (?:|for )when ECM (?:isn\'t|is not) found/i); } } } # process last commit process_commit(); if (!$firstchange) { print "\n"; }