From 7ba511e26fe41d173bf51a184b5fb70c511ab123 Mon Sep 17 00:00:00 2001 From: Matt Suhay Date: Thu, 24 Dec 2020 20:05:03 -0600 Subject: [PATCH] Adding in payload injection from github post json --- README.md | 7 ++++--- setup.py | 5 +++-- src/release.py | 23 ++++++++++++++++------- src/test.py | 12 ++++++++++++ 4 files changed, 35 insertions(+), 12 deletions(-) create mode 100644 src/test.py diff --git a/README.md b/README.md index 6558e0c..cd7a68e 100644 --- a/README.md +++ b/README.md @@ -33,15 +33,16 @@ my-site.json { "path": "/home/code/my-site", "release": { - "build": "yarn && yarn build", - "deploy": "rsync -av --delete public/ /var/www/html/my-site" + "build": "yarn && yarn build && tar -xvf {{release.sha}}.tar.gz", # you may use handlebar notation to inject GitHub payload values into your steps + "deploy": "rsync -av --delete public/ /var/www/html/my-site", + "cleanup": "rm -rf node_modules/ && rm -rf .cache/ && yarn cache clean" } } ``` ### Adding listener to GitHub Webhooks -As of `v0.1.0` - Only the `release` event is supported. +As of `v0.2.1` - Only the `release` event is supported. `https://{domain}/webhooks/{repo}` or diff --git a/setup.py b/setup.py index 1470cf5..565c547 100644 --- a/setup.py +++ b/setup.py @@ -8,7 +8,7 @@ setup( name="github-webhooks-listener", - version="0.2.0", + version="0.2.1", author="Matt Suhay", author_email="matt@suhay.dev", description="A simple listener that will trigger custom scripts when it receives events from GitHub.", @@ -26,7 +26,8 @@ ], install_requires=[ 'quart', - 'python-dotenv' + 'python-dotenv', + 'pybars3' ], python_requires='>=3.8', ) \ No newline at end of file diff --git a/src/release.py b/src/release.py index 879fbd5..81bf8cf 100644 --- a/src/release.py +++ b/src/release.py @@ -4,7 +4,9 @@ from os import path from pathlib import Path +from pybars import Compiler +compiler = Compiler() def processRelease(repo, payload): base_path = Path(__file__).parent @@ -27,13 +29,19 @@ def processRelease(repo, payload): commands.append('nvm use ' + data['node']) if 'build' in data['release'].keys(): - commands.append(data['release']['build']) + source = data['release']['build'] + template = compiler.compile(source) + commands.append(template(payload)) if 'deploy' in data['release'].keys(): - commands.append(data['release']['deploy']) + source = data['release']['deploy'] + template = compiler.compile(source) + commands.append(template(payload)) if 'cleanup' in data['release'].keys(): - commands.append(data['release']['cleanup']) + source = data['release']['cleanup'] + template = compiler.compile(source) + commands.append(template(payload)) subprocess.check_call(['git', 'fetch', '--all', '--tags'], cwd=data['path']) subprocess.check_call(['git', 'checkout', 'tags/' + payload['release']['tag_name']], cwd=data['path']) @@ -42,11 +50,12 @@ def processRelease(repo, payload): try: process.communicate(timeout=300) except subprocess.TimeoutExpired: - print('Process was killed by timeout: 300 seconds.') + print('Process was killed by timeout: 300 seconds') raise finally: - if process.poll() is None: - process.kill() - process.communicate() + print('Process complete') + process.kill() + process.communicate() + print('Release complete!') return \ No newline at end of file diff --git a/src/test.py b/src/test.py new file mode 100644 index 0000000..d2086ac --- /dev/null +++ b/src/test.py @@ -0,0 +1,12 @@ +from pybars import Compiler + +compiler = Compiler() + + +source = r'tar xzf /project/repo/{{release.sha}}.tar.gz' +template = compiler.compile(source) +print(template({ + 'release': { + 'sha': '302f2b072d46b2f48706eb156f162d901be2c088' + } +}))