80 lines
2.0 KiB
Elixir
80 lines
2.0 KiB
Elixir
# #!/usr/bin/env elixir
|
|
|
|
# SPDX-License-Identifier: Apache-2.0
|
|
# SPDX-FileCopyrightText: 2021 The Elixir Team
|
|
|
|
[tag] = System.argv()
|
|
|
|
Mix.install([
|
|
{:req, "~> 0.2.1"},
|
|
{:jason, "~> 1.0"}
|
|
])
|
|
|
|
%{status: 200, body: release} =
|
|
Req.get!("https://api.github.com/repos/elixir-lang/elixir/releases/tags/#{tag}")
|
|
|
|
if release["draft"] do
|
|
raise "cannot notify a draft release"
|
|
end
|
|
|
|
## Notify on elixir-lang-ann
|
|
|
|
names_and_checksums =
|
|
for asset <- release["assets"],
|
|
name = asset["name"],
|
|
name =~ ~r/.sha\d+sum$/,
|
|
do: {name, Req.get!(asset["browser_download_url"]).body}
|
|
|
|
line_items =
|
|
for {name, checksum_and_name} <- Enum.sort(names_and_checksums) do
|
|
[checksum | _] = String.split(checksum_and_name, " ")
|
|
root = Path.rootname(name)
|
|
"." <> type = Path.extname(name)
|
|
" * #{root} - #{type} - #{checksum}\n"
|
|
end
|
|
|
|
body = "https://github.com/elixir-lang/elixir/releases/tag/#{tag}\n\n#{line_items}"
|
|
|
|
IO.puts([
|
|
"========================================\n",
|
|
body,
|
|
"\n========================================"
|
|
])
|
|
|
|
mail = %{
|
|
# The email must have access to post
|
|
"From" => "jose.valim@dashbit.co",
|
|
"To" => "elixir-lang-ann@googlegroups.com",
|
|
"Subject" => "Elixir #{tag} released",
|
|
"HtmlBody" => body,
|
|
"MessageStream" => "outbound"
|
|
}
|
|
|
|
unless System.get_env("DRYRUN") do
|
|
headers = %{
|
|
"X-Postmark-Server-Token" => System.fetch_env!("ELIXIR_LANG_ANN_TOKEN")
|
|
}
|
|
|
|
resp = Req.post!("https://api.postmarkapp.com/email", {:json, mail}, headers: headers)
|
|
IO.puts("#{resp.status} elixir-lang-ann\n#{inspect(resp.body)}")
|
|
end
|
|
|
|
## Notify on Elixir Forum
|
|
|
|
post = %{
|
|
"title" => "Elixir #{tag} released",
|
|
"raw" => "https://github.com/elixir-lang/elixir/releases/tag/#{tag}\n\n#{release["body"]}",
|
|
# Elixir News
|
|
"category" => 28
|
|
}
|
|
|
|
unless System.get_env("DRYRUN") do
|
|
headers = %{
|
|
"api-key" => System.fetch_env!("ELIXIR_FORUM_TOKEN"),
|
|
"api-username" => "Elixir"
|
|
}
|
|
|
|
resp = Req.post!("https://forum.elixirforum.com/posts.json", {:json, post}, headers: headers)
|
|
IO.puts("#{resp.status} Elixir Forum\n#{inspect(resp.body)}")
|
|
end
|