Skip to content

Commit

Permalink
Keep each release note in a single file
Browse files Browse the repository at this point in the history
To avoid annoying merge conflicts.

Perl script is provided for convenience and simple format checking in
PRs.
  • Loading branch information
orestisfl committed Nov 5, 2021
1 parent 3e0fc25 commit c083e02
Show file tree
Hide file tree
Showing 6 changed files with 103 additions and 6 deletions.
13 changes: 8 additions & 5 deletions .github/CONTRIBUTING.md
Original file line number Diff line number Diff line change
Expand Up @@ -41,11 +41,14 @@ Note that bug reports and feature requests for related projects should be filed
* Use `clang-format` to format your code.
* Run the [testsuite](https://i3wm.org/docs/testsuite.html)
* If your changes should be reported on the next release's changelog, also
update the [RELEASE-notes-next](../RELEASE-notes-next) file in the root
folder. Example of changes that should be reported are bug fixes present in
the latest stable version of i3 and new enhancements. Example of changes that
should not be reported are minor code improvements, documentation, regression
and fixes for bugs that were introduced in the `next` branch.
add a small single-line file starting with a number (see examples) containing
a short explanation of your change either in the
[changes](../release-notes/changes) or the
[bugfixes](../release-notes/bugfixes/) folder. Example of changes that should
be reported are bug fixes present in the latest stable version of i3 and new
enhancements. Example of changes that should not be reported are minor code
improvements, documentation, regression and fixes for bugs that were
introduced in the `next` branch.

## Finding something to do

Expand Down
2 changes: 2 additions & 0 deletions .github/workflows/main.yml
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,8 @@ jobs:
steps:
- uses: actions/checkout@v2
- run: git fetch --prune --unshallow
- name: check & print release notes
run: ./release-notes/generator.pl
- name: construct container name
run: |
echo "BASENAME=i3wm/travis-base:$(date +'%Y-%m')-$(./travis/ha.sh travis/travis-base.Dockerfile)" >> $GITHUB_ENV
Expand Down
1 change: 1 addition & 0 deletions release-notes/bugfixes/0-example
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
fix crash with "layout default"
1 change: 1 addition & 0 deletions release-notes/changes/0-example
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
Acquire the WM_Sn selection when starting as required by ICCCM
89 changes: 89 additions & 0 deletions release-notes/generator.pl
Original file line number Diff line number Diff line change
@@ -0,0 +1,89 @@
#!/usr/bin/env perl
use strict;
use warnings;
use v5.10;
use Getopt::Long;

my @template = (
'
┌──────────────────────────────┐
│ Release notes for i3 v4.21 │
└──────────────────────────────┘
This is i3 v4.21. This version is considered stable. All users of i3 are
strongly encouraged to upgrade.
┌────────────────────────────┐
│ Changes in i3 v4.21 │
└────────────────────────────┘
',
'
┌────────────────────────────┐
│ Bugfixes │
└────────────────────────────┘
');

my $print_urls = 0;
my $result = GetOptions('print-urls' => \$print_urls);

sub read_changefiles {
my $dirpath = shift;
opendir my $dir, $dirpath or die "Cannot open directory $dirpath: $!";
my @files = readdir $dir;
closedir $dir;

my $s = '';
for my $filename (@files) {
next if $filename eq '.';
next if $filename eq '..';
next if $filename eq '0-example';

die "Filename $filename should start with a number (e.g. the pull request number)" unless ($filename =~ /^\d+/);

$filename = $dirpath . '/' . $filename;
open my $in, '<', $filename or die "can't open $filename: $!";
my @lines = <$in>;
close $in or die "can't close $filename: $!";

my $content = trim(join("\n ", map { trim($_) } @lines));
die "$filename can't be empty" unless length($content) > 0;

my $commit = `git log --diff-filter=A --pretty=format:"%H" $filename`;
$commit = trim($commit) if defined($commit);
die "$filename: git log failed to find commit" if ($?) || (length($commit) == 0);

my $url = '';
if ($print_urls) {
my $pr = find_pr($commit);
my $url = 'https://github.com/i3/i3/commit/' . $commit;
$url = 'https://github.com/i3/i3/pull/' . $pr if defined($pr);
$url = $url . "\n";
}

$s = $s . '' . $content . "\n" . $url;
}
return $s;
}

sub find_pr {
my $hash = shift;
my $result = `git log --merges --ancestry-path --oneline $hash..next | grep 'Merge pull request' | tail -n1`;
return unless defined($result);

return unless ($result =~ /Merge pull request .([0-9]+)/);
return $1;
}

sub trim {
(my $s = $_[0]) =~ s/^\s+|\s+$//g;
return $s;
}

# Expected to run for i3's git root
my $changes = read_changefiles('release-notes/changes');
my $bugfixes = read_changefiles('release-notes/bugfixes');

print $template[0] . $changes . $template[1] . $bugfixes;
3 changes: 2 additions & 1 deletion release.sh
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,8 @@ fi

if [ ! -e "RELEASE-NOTES-${RELEASE_VERSION}" ]
then
echo "RELEASE-NOTES-${RELEASE_VERSION} not found."
echo "RELEASE-NOTES-${RELEASE_VERSION} not found. Here is the output from the generator:"
./release-notes/generator.pl --print-urls
exit 1
fi

Expand Down

0 comments on commit c083e02

Please sign in to comment.