Skip to content
This repository was archived by the owner on Jul 3, 2020. It is now read-only.

Commit 49caac1

Browse files
committed
Automatically release tagged versions
1 parent 6278e61 commit 49caac1

13 files changed

+127
-20
lines changed

.gitignore

+6
Original file line numberDiff line numberDiff line change
@@ -25,5 +25,11 @@ disk/boot/initrd-downloaded
2525
disk/boot/runtime-downloaded
2626
netdump.txt
2727
/js/node_modules
28+
/node_modules
29+
/out
2830
/js/initrd
2931
/build/system/kernel.js
32+
release.tag
33+
npm-debug.log
34+
/src/kernel/version-autogenerated.h
35+
/runtimecorelib.json

.npmignore

+5
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
/*
2+
/*/
3+
!/js/
4+
!/scripts/
5+
!/runtimecorelib.json

js/.runtimeignore .runtimeignore

+12
Original file line numberDiff line numberDiff line change
@@ -13,3 +13,15 @@ README.md
1313
LICENSE.isaac
1414
LICENSE
1515
/node_modules/util/test/
16+
/src
17+
/deps
18+
/tmp
19+
/scripts
20+
/testcc
21+
/disk
22+
/docker
23+
/docs
24+
/gen
25+
/out
26+
/runtimejs
27+
*.o

.travis.yml

+19-10
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,23 @@
11
language: cpp
22
compiler: gcc
33
sudo: false
4-
54
before_script:
6-
- cd tools
7-
- wget https://github.com/runtimejs/toolchain-bin-linux/raw/master/x86_64-elf-4.9.1-Linux-x86_64.tar.xz
8-
- tar -xf x86_64-elf-4.9.1-Linux-x86_64.tar.xz
9-
- wget https://github.com/runtimejs/toolchain-bin-linux/raw/master/fasm-1.71.21.tgz
10-
- tar -xf fasm-1.71.21.tgz
11-
- cd ..
12-
- export PATH=$PWD/tools/x86_64-elf-4.9.1-Linux-x86_64/bin:$PWD/tools/fasm:$PATH
13-
14-
script: scons
5+
- node scripts/make-release.js "$TRAVIS_TAG"
6+
- cd tools
7+
- wget https://github.com/runtimejs/toolchain-bin-linux/raw/master/x86_64-elf-4.9.1-Linux-x86_64.tar.xz
8+
- tar -xf x86_64-elf-4.9.1-Linux-x86_64.tar.xz
9+
- wget https://github.com/runtimejs/toolchain-bin-linux/raw/master/fasm-1.71.21.tgz
10+
- tar -xf fasm-1.71.21.tgz
11+
- cd ..
12+
- export PATH=$PWD/tools/x86_64-elf-4.9.1-Linux-x86_64/bin:$PWD/tools/fasm:$PATH
13+
script: RUNTIME_BUILD=release scons
14+
before_deploy: gzip -k disk/boot/runtime
15+
deploy:
16+
- provider: releases
17+
skip_cleanup: true
18+
api_key:
19+
secure: P+Ei+zxl/jN4Mt+sIm0jfikU0F81yQJEDQgLharThnblm8SILYLZ4jo+vSC7YA5u75wjj6ej3Guxk/Nm0Ajg4C9K7BLVZViZzrRhT8VdxZ8680EOn0A7/abHKA8AT+By8n4sOMhGgbsOLUUHQC+Bo7KLA2S2NGLgHJCKuEatPjg=
20+
file: disk/boot/runtime.gz
21+
on:
22+
tags: true
23+
repo: runtimejs/runtime

SConstruct

+7-2
Original file line numberDiff line numberDiff line change
@@ -4,10 +4,11 @@ import datetime
44

55
SetOption('num_jobs', 4)
66

7-
build = "debug"
7+
build = os.getenv('RUNTIME_BUILD', "debug")
8+
print 'Build', build
89

910
config = {
10-
"project_name": "runtimejs",
11+
"project_name": "out/runtimejs",
1112
"binary_output_file": "disk/boot/runtime",
1213
"toolchain_bin_path": "",
1314
"fasm_pathname": "fasm",
@@ -211,8 +212,12 @@ def BuildProject(env_base):
211212
env.Replace(LIBS = config["libs"])
212213
env.Replace(LIBPATH = ['deps'])
213214

215+
version_header = env.Command('src/kernel/version-autogenerated.h', 'package.json',
216+
'node scripts/update-versions.js')
217+
214218
proj_name = config["project_name"]
215219
env.Depends(proj_name, obj_js);
220+
env.Depends(proj_name, version_header)
216221
env.Depends(proj_name, config["link_script"])
217222
output_elf = env.Program(proj_name, sources["cc"] + obj_asm)
218223

js/index.js

+1-1
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@
1414

1515
'use strict';
1616

17-
var packagejson = require('./package.json');
17+
var packagejson = require('../package.json');
1818
require('module-singleton')(packagejson);
1919
require('./version');
2020

js/runtimecorelib.json

-3
This file was deleted.

js/version.js

+1-1
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ if (!global.__SYSCALL) {
1919
throw 'error: this program requires runtime.js environment';
2020
}
2121

22-
var requiredKernelVersion = require('./runtimecorelib.json').kernelVersion;
22+
var requiredKernelVersion = require('../runtimecorelib.json').kernelVersion;
2323
var currentKernelVersion = __SYSCALL.version().kernel;
2424

2525
if (currentKernelVersion !== requiredKernelVersion) {

js/package.json package.json

+3-2
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,10 @@
22
"name": "runtimejs",
33
"version": "0.2.5",
44
"description": "Core runtime.js library",
5-
"main": "index.js",
5+
"main": "js/index.js",
6+
"private": true,
67
"scripts": {
8+
"postinstall": "node scripts/update-versions.js",
79
"lint": "eslint .",
810
"test": "runtimeify test/unit/index.js -o initrd && runtime-qemu ./initrd",
911
"test-build": "runtimeify test/unit/index.js -o initrd && runtime-qemu ./initrd --kernel ../disk/boot/runtime"
@@ -33,7 +35,6 @@
3335
"bit-twiddle": "^1.0.2",
3436
"buffer": "^4.3.0",
3537
"constants-browserify": "^1.0.0",
36-
"eslint": "^1.10.3",
3738
"event-controller": "^1.0.1",
3839
"events": "^1.1.0",
3940
"isint": "^1.0.0",

scripts/helpers/release-id.js

+15
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
var assert = require('assert');
2+
3+
function versionToReleaseId(ver) {
4+
var parts = String(ver).split('.');
5+
assert(parts.length === 3);
6+
var major = parts[0];
7+
var minor = parts[1];
8+
var patch = parts[2];
9+
assert(major < 1024);
10+
assert(minor < 1024);
11+
assert(patch < 1024);
12+
return ((major << 20) + (minor << 10) + patch) >>> 0;
13+
}
14+
15+
module.exports = versionToReleaseId;

scripts/make-release.js

+33
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
var fs = require('fs');
2+
var path = require('path');
3+
var assert = require('assert');
4+
var os = require('os');
5+
var package = require('../package.json');
6+
var releaseId = require('./helpers/release-id')(package.version);
7+
8+
// Read tag argument
9+
var tag = process.argv.slice(2)[0] || 'untagged';
10+
if (tag === 'untagged') {
11+
return;
12+
}
13+
14+
// Make sure all versions match
15+
assert(tag === 'v' + package.version, 'tag should match version');
16+
17+
var configKernel = path.join(__dirname, '../src/kernel/version-autogenerated.h');
18+
assert(fs.readFileSync(configKernel, 'utf8') === String(releaseId), 'kernel version should match package version');
19+
assert(require('../runtimecorelib.json').kernelVersion === releaseId);
20+
21+
// Remove { private: true } from package.json
22+
var packageFile = path.join(__dirname, '../js/package.json');
23+
delete package.private;
24+
fs.writeFileSync(packageFile, JSON.stringify(package, null, 2) + os.EOL);
25+
26+
console.log('### tag "' + tag + '" (release #' + releaseId.toString(16) + ')');
27+
28+
// Write release ID
29+
fs.writeFileSync(path.join(__dirname, '../release.tag'), [
30+
releaseId.toString(16),
31+
tag,
32+
new Date().toISOString()
33+
].join(os.EOL));

scripts/update-versions.js

+22
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
var fs = require('fs');
2+
var path = require('path');
3+
var os = require('os');
4+
var package = require('../package.json');
5+
var releaseId = require('./helpers/release-id')(package.version);
6+
7+
console.log('### version "' + package.version + '" (release #' + releaseId.toString(16) + ')');
8+
9+
// Write kernel version
10+
var configKernel = path.join(__dirname, '../src/kernel/version-autogenerated.h');
11+
try {
12+
fs.writeFileSync(configKernel, String(releaseId) + os.EOL);
13+
} catch (e) {
14+
// Ignore this when running on installed package that contains js code only
15+
}
16+
17+
// Write runtimecorelib.json
18+
var configCorelib = path.join(__dirname, '../runtimecorelib.json');
19+
var corelib = {
20+
kernelVersion: releaseId
21+
};
22+
fs.writeFileSync(configCorelib, JSON.stringify(corelib, null, 2) + os.EOL);

src/kernel/version.h

+3-1
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,9 @@ class Version {
2424
* Get kernel version represented by a single number.
2525
*/
2626
static uint32_t getVersionNumber() {
27-
return 3;
27+
return
28+
#include <kernel/version-autogenerated.h>
29+
;
2830
}
2931
private:
3032
~Version() = delete;

0 commit comments

Comments
 (0)