Skip to content
This repository was archived by the owner on Apr 4, 2019. It is now read-only.

Commit e3eb0e4

Browse files
committed
[WIP] Globals + canary bower artifact repo deployment. Will close #137
1 parent f687d5b commit e3eb0e4

File tree

7 files changed

+108
-17
lines changed

7 files changed

+108
-17
lines changed

.travis.yml

+2
Original file line numberDiff line numberDiff line change
@@ -15,3 +15,5 @@ before_script:
1515
after_script:
1616
- sleep 10
1717
- killall sc
18+
after_success:
19+
- "./bin/bower_build"

Brocfile.js

+47-17
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ var removeFile = require('broccoli-file-remover');
77
var transpileES6 = require('broccoli-es6-module-transpiler');
88
var jsHint = require('broccoli-jshint');
99
var handlebarsInlinedTrees = require('./build-support/handlebars-inliner');
10-
var getVersion = require('git-repo-version');
10+
var gitVersion = require('git-repo-version');
1111

1212
var packages = require('./packages');
1313

@@ -18,11 +18,11 @@ var demos = new Funnel('demos', {
1818
destDir: '/demos'
1919
});
2020

21-
var ES6Tokenizer = new Funnel(bower+'/simple-html-tokenizer/lib/');
21+
var ES6Tokenizer = new Funnel(bower + '/simple-html-tokenizer/lib/');
2222
dependableTrees['simple-html-tokenizer'] = ES6Tokenizer;
2323

2424
var npm = 'node_modules';
25-
var MorphRange = new Funnel(npm+'/morph-range/lib/');
25+
var MorphRange = new Funnel(npm + '/morph-range/lib/');
2626
dependableTrees['morph-range'] = MorphRange;
2727

2828
dependableTrees['syntax-handlebars-inliner'] = handlebarsInlinedTrees.syntax;
@@ -53,7 +53,7 @@ function getPackageTrees(packageName, dependencies) {
5353
// main lib file
5454
libTrees.push(getPackageLibTree(packageName));
5555
// dependencies of lib
56-
for (var i=0;i<(dependencies.lib || []).length;i++) {
56+
for (var i = 0; i < (dependencies.lib || []).length; i++) {
5757
var depName = dependencies.lib[i];
5858
libTrees.push(getDependencyTree(depName));
5959
}
@@ -65,7 +65,7 @@ function getPackageTrees(packageName, dependencies) {
6565
destDir: '/' + packageName + '-tests'
6666
}));
6767
// dependencies of tests
68-
for (var i=0;i<(dependencies.test || []).length;i++) {
68+
for (var i = 0; i < (dependencies.test || []).length; i++) {
6969
var depName = dependencies.test[i];
7070
testTrees.push(getDependencyTree(depName));
7171
}
@@ -78,12 +78,12 @@ function getPackageTrees(packageName, dependencies) {
7878

7979
var test = new Funnel('tests', {
8080
srcDir: '/',
81-
files: [ 'index.html', 'packages-config.js' ],
81+
files: ['index.html', 'packages-config.js'],
8282
destDir: '/tests'
8383
});
8484

8585
test = replace(test, {
86-
files: [ 'tests/packages-config.js' ],
86+
files: ['tests/packages-config.js'],
8787
pattern: {
8888
match: /\{\{PACKAGES_CONFIG\}\}/g,
8989
replacement: JSON.stringify(packages, null, 2)
@@ -92,7 +92,7 @@ test = replace(test, {
9292

9393
var loader = new Funnel(bower, {
9494
srcDir: '/loader',
95-
files: [ 'loader.js' ],
95+
files: ['loader.js'],
9696
destDir: '/assets'
9797
});
9898

@@ -103,7 +103,7 @@ var qunit = new Funnel(bower, {
103103

104104
var cliSauce = new Funnel('./node_modules/ember-cli-sauce', {
105105
srcDir: '/vendor',
106-
files: [ 'export-test-results.js' ],
106+
files: ['export-test-results.js'],
107107
destDir: '/tests'
108108
});
109109

@@ -137,8 +137,8 @@ for (var packageName in packages.dependencies) {
137137
});
138138
trees.push(pickedCjsLib);
139139
var pickedCjsMain = new Funnel(transpiledCjsLib, {
140-
srcDir: packageName+'.js',
141-
destDir: '/cjs/' + packageName+'.js'
140+
srcDir: packageName + '.js',
141+
destDir: '/cjs/' + packageName + '.js'
142142
});
143143
trees.push(pickedCjsMain);
144144

@@ -148,7 +148,7 @@ for (var packageName in packages.dependencies) {
148148
var jsHintLibTree = new Funnel(libTree, {
149149
include: [new RegExp(packageName), new RegExp(packageName + '.+\.js$')],
150150
exclude: [/htmlbars-(syntax|util)\/handlebars/],
151-
destDir: packageName+'-tests/'
151+
destDir: packageName + '-tests/'
152152
});
153153
jsHintLibTree = removeFile(jsHintLibTree, {
154154
srcFile: 'htmlbars-runtime.js' // Uses ES6 `module` syntax. Breaks jsHint
@@ -167,16 +167,46 @@ for (var packageName in packages.dependencies) {
167167
// CJS tests
168168
var transpiledCjsTests = transpileES6(mergeTrees(testTrees), { type: 'cjs' });
169169
var movedCjsTests = new Funnel(transpiledCjsTests, {
170-
srcDir: packageName+'-tests/',
171-
destDir: '/cjs/'+packageName+"-tests/"
170+
srcDir: packageName + '-tests/',
171+
destDir: '/cjs/' + packageName + '-tests/'
172172
});
173173
trees.push(movedCjsTests);
174174
}
175175

176-
trees = replace(mergeTrees(trees, {overwrite: true}), {
177-
files: [ 'es6/htmlbars.js', 'es6/htmlbars-compiler/template-compiler.js', 'amd/htmlbars.js', 'cjs/htmlbars.js' ],
176+
// Bower
177+
var generatedBowerConfig = new Funnel('build-support', {
178+
srcDir: '/',
179+
destDir: '/',
180+
files: ['bower.json']
181+
});
182+
generatedBowerConfig = replace(generatedBowerConfig, {
183+
files: ['bower.json'],
184+
pattern: {
185+
match: /BOWER_VERSION_STRING_PLACEHOLDER/,
186+
replacement: function() {
187+
// remove leading `v` (since by default our tags use a `v` prefix)
188+
return gitVersion().replace(/^v/, '');
189+
}
190+
}
191+
});
192+
trees.push(generatedBowerConfig);
193+
194+
// Globals lib
195+
var globalizedBuildSupport = new Funnel('build-support', {
196+
srcDir: '/',
197+
files: ['iife-start.js', 'globalize.js', 'iife-stop.js'],
198+
destDir: '/'
199+
});
200+
var globalsLib = concatFiles(mergeTrees([globalizedBuildSupport].concat(trees), { overwrite: true }), {
201+
inputFiles: ['iife-start.js', 'assets/loader.js', 'amd/htmlbars.amd.js', 'globalize.js', 'iife-stop.js'],
202+
outputFile: '/globals/htmlbars.js'
203+
});
204+
trees.push(globalsLib);
205+
206+
trees = replace(mergeTrees(trees, { overwrite: true }), {
207+
files: ['es6/htmlbars.js', 'es6/htmlbars-compiler/template-compiler.js', 'amd/htmlbars.js', 'cjs/htmlbars.js'],
178208
patterns: [
179-
{ match: /VERSION_STRING_PLACEHOLDER/g, replacement: getVersion() }
209+
{ match: /VERSION_STRING_PLACEHOLDER/g, replacement: gitVersion() }
180210
]
181211
});
182212

bin/bower_build

+48
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
#!/usr/bin/env bash
2+
3+
git config --global user.email "[email protected]"
4+
git config --global user.name "Tomster"
5+
6+
# Repos
7+
SRC_REPO="tildeio/htmlbars"
8+
BUILDS_REPO="tildeio/htmlbars-builds"
9+
10+
# Name of source repo as it should appear in commit messages
11+
SRC_NAME="htmlbars"
12+
13+
# User associated with the GH_TOKEN
14+
USER="tildeio"
15+
16+
# Ensure that no directories within dist will be copied when script is run.
17+
INCLUDED_FILES=`find find -maxdepth 1 -type f`
18+
19+
echo -e "SRC_REPO: ${SRC_REPO}\n"
20+
echo -e "BUILDS_REPO: ${BUILDS_REPO}\n"
21+
echo -e "INCLUDED_FILES: ${INCLUDED_FILES}\n"
22+
echo -e "CURRENT_BRANCH: ${TRAVIS_BRANCH}\n"
23+
24+
# Set channel to publish to. If no suitable branch is found exit successfully.
25+
case $TRAVIS_BRANCH in
26+
"master" )
27+
CHANNEL="canary" ;;
28+
* )
29+
echo "Not a bower release branch. Exiting!"
30+
exit 0 ;;
31+
esac
32+
echo -e "CHANNEL: ${CHANNEL}\n"
33+
34+
# Send output to /dev/null to prevent GH_TOKEN leak on error
35+
git clone --branch ${CHANNEL} https://${USER}:${GH_TOKEN}@github.com/${BUILDS_REPO}.git bower_build &> /dev/null
36+
rm -rf bower_build/*
37+
cp -r ${INCLUDED_FILES} bower_build/
38+
cd bower_build
39+
git remote rm origin
40+
41+
# Send output to /dev/null to prevent GH_TOKEN leak on error
42+
git remote add origin https://${USER}:${GH_TOKEN}@github.com/${BUILDS_REPO}.git &> /dev/null
43+
git add -A
44+
git commit -m "${SRC_NAME}: https://github.com/${SRC_REPO}/commits/${TRAVIS_COMMIT}."
45+
46+
# Send output to /dev/null to prevent GH_TOKEN leak on error
47+
git push -fq origin ${CHANNEL} &> /dev/null
48+
echo -e "Done\n"

build-support/bower.json

+8
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
{
2+
"name": "htmlbars",
3+
"version": "BOWER_VERSION_STRING_PLACEHOLDER",
4+
"license": "MIT",
5+
"ignore": [],
6+
"dependencies": {},
7+
"devDependencies": {}
8+
}

build-support/globalize.js

+1
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
this.HTMLBars = requireModule("htmlbars");

build-support/iife-start.js

+1
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
(function() {

build-support/iife-stop.js

+1
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
}).call(this);

0 commit comments

Comments
 (0)