diff --git a/.gitignore b/.gitignore index 1203b32d2e..f00610b21d 100644 --- a/.gitignore +++ b/.gitignore @@ -3,3 +3,5 @@ *~ *.pyc console/TestCases +github-deploy-key +github-deploy-key.pub diff --git a/.travis.yml b/.travis.yml new file mode 100644 index 0000000000..7abb581180 --- /dev/null +++ b/.travis.yml @@ -0,0 +1,27 @@ +language: python +install: pip install pyyaml +script: ./make.py +after_success: | + if [ $TRAVIS_EVENT_TYPE != "push" -o $TRAVIS_BRANCH != "master" ]; then + echo This job is not running against a commit that has been merged to master. + echo Skipping deployment. + exit 0 + fi + openssl aes-256-cbc \ + -K $encrypted_7b3e5998334d_key \ + -iv $encrypted_7b3e5998334d_iv \ + -in github-deploy-key.enc \ + -out github-deploy-key \ + -d + chmod 600 github-deploy-key + eval "$(ssh-agent -s)" + ssh-add github-deploy-key + rm github-deploy-key + git config --global user.email "test262@ecma-international.org" + git config --global user.name "Test262 Automation Script" + # The repository on TravisCI is a shallow clone, so the `master` branch must + # be retrieved explicitly, and a local branch created from the `FETCH_HEAD` + # git reference + git fetch origin master + git branch master FETCH_HEAD + ./make.py deploy diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index df2d290ac0..740e7f852e 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -282,3 +282,5 @@ To remove all generated files: The executable located at `tools/generation/generator.py` offers additional control over the generation procedure. ./tools/generation/generator.py --help + +Tests expressed with this convention are built automatically following the source files' acceptance into the project. Patches should **not** include assets built from these sources. diff --git a/github-deploy-key.enc b/github-deploy-key.enc new file mode 100644 index 0000000000..fe92f02b3a Binary files /dev/null and b/github-deploy-key.enc differ diff --git a/make.py b/make.py index 2d440b9724..6594c5c5d6 100755 --- a/make.py +++ b/make.py @@ -6,6 +6,8 @@ import os, shutil, subprocess, sys OUT_DIR = os.environ.get('OUT_DIR') or 'test' SRC_DIR = os.environ.get('SRC_DIR') or 'src' +UPSTREAM = os.environ.get('UPSTREAM') or 'git@github.com:tc39/test262.git' +MAINTAINER = os.environ.get('MAINTAINER') or 'test262@ecma-international.org' def shell(*args): sp = subprocess.Popen(list(args), stdout=subprocess.PIPE) @@ -46,6 +48,32 @@ def build(): def clean(): shell(sys.executable, 'tools/generation/generator.py', 'clean', OUT_DIR) +@target('clean', 'build') +def deploy(): + shell('git', 'add', '--all', OUT_DIR) + shell('git', 'commit', '--message', '"Re-build from source"') + shell('git', 'push', UPSTREAM, 'master') + shell('git', 'checkout', '-') + +# Generate a deploy key for use in a continuous integration system, allowing +# for automated deployment in response to merge events. +@target() +def github_deploy_key(): + shell('ssh-keygen', + '-t', 'rsa', + '-b', '4096', + '-C', MAINTAINER, + '-f', 'github-deploy-key') + +# Encrypt the deploy key so that it may be included in the repository (to be +# decrypted by the continuous integration server during automated deployment) +# This requires the "travis" Ruby gem +# Source: https://docs.travis-ci.com/user/encrypting-files/ +@target('github_deploy_key') +def github_deploy_key_enc(): + shell('travis', 'login') + shell('travis', 'encrypt-file', 'github-deploy-key') + if len(sys.argv) == 1: targets['build']()