Browse Source

[TravisCI] store build artifacts to bintray

Andy Li 10 years ago
parent
commit
5d5aba5fe7
4 changed files with 128 additions and 2 deletions
  1. 1 0
      .gitignore
  2. 19 2
      .travis.yml
  3. 25 0
      extra/bintray.tpl.json
  4. 83 0
      tests/RunCi.hx

+ 1 - 0
.gitignore

@@ -11,6 +11,7 @@
 /extra/hxclasses
 /extra/*.swf
 /extra/*.swc
+/extra/bintray.json
 
 /version.ml
 /haxe

+ 19 - 2
.travis.yml

@@ -32,7 +32,9 @@ matrix:
       env: TEST=third-party
       addons: {apt: {packages: [*apt_php, *apt_cpp, *apt_cs, *apt_python]}}
     - os: linux
-      env: TEST=macro
+      env:
+        - TEST=macro
+        - BINTRAY=1
       addons: {apt: {packages: [*apt_cs, *apt_python]}}
     - os: linux
       env: TEST=neko
@@ -70,7 +72,9 @@ matrix:
     - os: osx
       env: TEST=third-party
     - os: osx
-      env: TEST=macro
+      env:
+        - TEST=macro
+        - BINTRAY=1
     - os: osx
       env: TEST=neko
     - os: osx
@@ -116,8 +120,10 @@ install:
     fi
 
 script:
+  - make package_src -s
   - make -s
   - make tools -s
+  - make package_bin -s
   - export PATH="$PATH:$TRAVIS_BUILD_DIR"
   - export HAXE_STD_PATH="$TRAVIS_BUILD_DIR/std"
   - cd tests/
@@ -125,6 +131,7 @@ script:
   - haxe -version
   - haxe RunCi.hxml
   - neko RunCi.n
+  - cd $TRAVIS_BUILD_DIR
 
 branches:
   except:
@@ -139,3 +146,13 @@ notifications:
     on_success: change  # options: [always|never|change] default: always
     on_failure: always  # options: [always|never|change] default: always
     on_start: false     # default: false
+
+deploy:
+  provider: bintray
+  on:
+    all_branches: true
+    condition: "-n ${BINTRAY}"
+  skip_cleanup: true
+  file: "extra/bintray.json"
+  user: "${BINTRAY_USERNAME}"
+  key: "${BINTRAY_API_KEY}"

+ 25 - 0
extra/bintray.tpl.json

@@ -0,0 +1,25 @@
+{
+    "package": {
+        "name": "haxe",
+        "repo": "development",
+        "subject": "andyli"
+    },
+
+    "version": {
+        "name": "::versionName::",
+        "desc": "::versionDesc::",
+        "released": "::gitDate::",
+        "attributes": [
+            {"name": "repo",   "values" : ["::gitRepo::"], "type": "string"},
+            {"name": "branch", "values" : ["::gitBranch::"], "type": "string"},
+            {"name": "commit", "values" : ["::gitCommit::"], "type": "string"}
+        ],
+        "gpgSign": false
+    },
+
+    "files":
+        [
+            {"includePattern": "out/(.*)", "uploadPattern": "::os::/$1"}
+        ],
+    "publish": true
+}

+ 83 - 0
tests/RunCi.hx

@@ -315,6 +315,21 @@ class RunCi {
 		} catch(e:Dynamic) false;
 	}
 
+	static function commandResult(cmd:String, args:Array<String>):{
+		stdout:String,
+		stderr:String,
+		exitCode:Int
+	} {
+		var p = new Process(cmd, args);
+		var out = {
+			stdout: p.stdout.readAll().toString(),
+			stderr: p.stderr.readAll().toString(),
+			exitCode: p.exitCode()
+		}
+		p.close();
+		return out;
+	}
+
 	static function addToPATH(path:String):Void {
 		switch (systemName) {
 			case "Windows":
@@ -513,10 +528,78 @@ class RunCi {
 	static var sysDir(default, never) = cwd + "sys/";
 	static var optDir(default, never) = cwd + "optimization/";
 	static var miscDir(default, never) = cwd + "misc/";
+	static var gitInfo(default, never) = {
+		repo: switch (ci) {
+			case TravisCI:
+				Sys.getEnv("TRAVIS_REPO_SLUG");
+			case AppVeyor:
+				Sys.getEnv("APPVEYOR_PROJECT_SLUG");
+			case _:
+				commandResult("git", ["config", "--get", "remote.origin.url"]).stdout.trim();
+		},
+		branch: switch (ci) {
+			case TravisCI:
+				Sys.getEnv("TRAVIS_BRANCH");
+			case AppVeyor:
+				Sys.getEnv("APPVEYOR_REPO_BRANCH");
+			case _:
+				commandResult("git", ["rev-parse", "--abbrev-ref", "HEAD"]).stdout.trim();
+		},
+		commit: commandResult("git", ["rev-parse", "HEAD"]).stdout.trim(),
+		date: {
+			var gitTime = commandResult("git", ["show", "-s", "--format=%ct", "HEAD"]).stdout;
+			var tz = DateTools.format(Date.now(), "%z");
+			var tzd =
+				// +/-
+				(tz.charCodeAt(0) == '+'.code ? 1 : -1) * 
+				(
+					// hour
+					(Std.parseInt(tz.substr(1,2)) * 60 * 60 * 1000) +
+					// min
+					(Std.parseInt(tz.substr(3)) * 60 * 1000)
+				);
+			var time = Date.fromTime(Std.parseFloat(gitTime) * 1000 - tzd);
+			DateTools.format(time, "%FT%TZ");
+		}
+	}
+	static var haxeVer(default, never) = {
+		var haxe_ver = haxe.macro.Compiler.getDefine("haxe_ver");
+		trace(haxe_ver);
+		switch (haxe_ver.split(".")) {
+			case [major]:
+				major;
+			case [major, minor] if (minor.length == 1):
+				'${major}.${minor}';
+			case [major, minor] if (minor.length > 1):
+				var minor = minor.charAt(0);
+				var patch = Std.parseInt(minor.substr(1));
+				'${major}.${minor}.${patch}';
+			case _:
+				throw haxe_ver;
+		}
+	}
 
 	static function main():Void {
 		Sys.putEnv("OCAMLRUNPARAM", "b");
 
+		// bintray config
+		if (Sys.getEnv("BINTRAY") != null) {
+			var tpl = new Template(File.getContent("../extra/bintray.tpl.json"));
+			var json = tpl.execute({
+				os: systemName.toLowerCase(),
+				versionName: '${haxeVer}~${gitInfo.date}_${gitInfo.branch}_${gitInfo.commit.substr(0,7)}',
+				versionDesc: "Automated CI build.",
+				gitRepo: gitInfo.repo,
+				gitBranch: gitInfo.branch,
+				gitCommit: gitInfo.commit,
+				gitDate: gitInfo.date,
+			});
+			var path = "../extra/bintray.json";
+			File.saveContent("../extra/bintray.json", json);
+			infoMsg("saved " + FileSystem.absolutePath(path) + " with content:");
+			Sys.println(json);
+		}
+
 		var tests:Array<TEST> = switch (Sys.getEnv("TEST")) {
 			case null:
 				[Macro];