Skip to content

Instantly share code, notes, and snippets.

@ikedas
Created November 12, 2022 06:03
Show Gist options
  • Save ikedas/61b0b98814ce045b25e0438109cde00b to your computer and use it in GitHub Desktop.
Save ikedas/61b0b98814ce045b25e0438109cde00b to your computer and use it in GitHub Desktop.
Build message for release announcement of Sympa

Run: github-release-message.pl sympa-community/sympa 6.2.70.

#! /usr/bin/env perl

use strict;
use warnings;

use English qw(-no_match_vars);
use JSON;
use LWP;
use MIME::Entity;
use Text::Markdown qw();

my $repository_name = shift or die "Specify repository\n";
my $tag             = shift or die "Specify tag\n";

my $request = HTTP::Request->new(
    GET => sprintf(
        'https://api.github.com/repos/%s/releases/tags/%s',
        $repository_name, $tag
    )
);
my $ua       = LWP::UserAgent->new;
my $response = $ua->request($request);
my $json     = $response->decoded_content;
my $release  = decode_json($json);

my $plain = sprintf "%s\n====\n\n%s", $release->{name}, $release->{body};
my $html =
    sprintf
    "<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n<meta charset=\"utf-8\"/>\n<title>%s</title>\n</head>\n<body>%s</body>\n</html>",
    ($release->{name} =~ s/</\&lt;/gr),
    Text::Markdown->new->markdown($plain);

my $entity = MIME::Entity->build(
    Type       => 'multipart/alternative',
    Encoding   => '8BIT',
    To         => 'announce@sympa.community',
    Subject    => $release->{name},
    'X-Mailer' => sprintf('sympa-%s', $release->{tag_name})
);
$entity->attach(
    Type     => 'text/plain; Charset=UTF-8',
    Encoding => '8BIT',
    Data     => $plain
);
$entity->attach(
    Type     => 'text/html; Charset=UTF-8',
    Encoding => '8BIT',
    Data     => $html
);
print $entity->as_string;

__END__
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment