diff --git a/.gitignore b/.gitignore
index 114955f..59b2d00 100644
--- a/.gitignore
+++ b/.gitignore
@@ -38,3 +38,4 @@ build/
src/main/resources/app
/build_system
/log
+/github_token.properties
diff --git a/build_system.d b/build_system.d
index 9a626f7..bd2e513 100755
--- a/build_system.d
+++ b/build_system.d
@@ -3,6 +3,7 @@
dependency "dsh" version="~>1.6.1"
dependency "dxml" version="~>0.4.3"
dependency "requests" version="~>2.0.8"
+ dependency "d-properties" version="~>1.0.4"
+/
/**
@@ -51,15 +52,9 @@ int main(string[] args) {
buildApp();
buildApi(ver);
if (args.length >= 3 && args[2].strip.toLower == "release") {
- if (args.length >= 4) {
- string token = args[3].strip();
- print("Are you sure you want to create a GitHub release for version %s?", ver);
- string response = readln().strip.toLower;
- if (response == "yes" || response == "y") createRelease(token, ver);
- } else {
- error("Missing required personal access token to create a GitHub release.");
- return 1;
- }
+ print("Are you sure you want to create a GitHub release for version %s?", ver);
+ string response = readln().strip.toLower;
+ if (response == "yes" || response == "y") createRelease(ver);
}
}
} else {
@@ -114,6 +109,48 @@ string getVersion() {
return null;
}
-void createRelease(string token, string ver) {
-
+void createRelease(string ver) {
+ import d_properties;
+ import requests;
+ import std.json;
+
+ print("Creating release...");
+
+ JSONValue data = [
+ "tag_name": "v" ~ ver,
+ "name": "Rail Signal v" ~ ver,
+ "body": "An automated release."
+ ];
+ data.object["prerelease"] = JSONValue(true);
+ data.object["generate_release_notes"] = JSONValue(false);
+ print("Sending release API request:\n%s", data.toPrettyString);
+
+ auto rq = Request();
+ rq.verbosity = 2;
+ auto props = Properties("github_token.properties");
+ string username = props["username"];
+ string token = props["token"];
+ rq.authenticator = new BasicAuthentication(username, token);
+ auto response = rq.post(
+ "https://api.github.com/repos/andrewlalis/RailSignalAPI/releases",
+ data.toString,
+ "application/json"
+ );
+ if (response.code == 201) {
+ string responseBody = cast(string) response.responseBody;
+ JSONValue responseData = parseJSON(responseBody);
+ string assetUrl = responseData["assets_url"].str;
+ print("Got asset url: %s", assetUrl);
+ auto f = File("./target/rail-signal-" ~ ver ~ ".jar", "rb");
+ auto assetResponse = rq.post(
+ assetUrl,
+ f.byChunk(4096),
+ "application/zip"
+ );
+ writeln(assetResponse);
+ } else {
+ error("An error occurred.");
+ writeln(response.responseBody);
+ }
}
+
diff --git a/pom.xml b/pom.xml
index 231d602..58d76f3 100644
--- a/pom.xml
+++ b/pom.xml
@@ -10,7 +10,7 @@
nl.andrewl
rail-signal-api
- 2.2.0
+ 2.2.1
rail-signal-api
A simple API for tracking rail traffic in signalled blocks.