Add base job and roles for javascript

This is in service of getting javascript tarball jobs going.

Change-Id: I20b4b4ce0bdf03c5585ca73471611178c94e2599
This commit is contained in:
Monty Taylor 2017-10-06 16:37:22 -05:00
parent d577763697
commit ad1ce4fc2f
No known key found for this signature in database
GPG Key ID: 7BAE94BC7141A594
23 changed files with 344 additions and 0 deletions

View File

@ -0,0 +1,3 @@
- hosts: all
roles:
- fetch-javascript-output

View File

@ -0,0 +1,9 @@
- hosts: all
roles:
- role: bindep
bindep_profile: test
bindep_dir: "{{ zuul_work_dir }}"
- test-setup
- install-nodejs
- revoke-sudo
- install-javascript-packages

View File

@ -0,0 +1,4 @@
- hosts: all
roles:
- role: npm
npm_command: pack

View File

@ -0,0 +1,8 @@
Collect logs from a javascript build
**Role Variables**
.. zuul:rolevar:: zuul_work_dir
:default: {{ zuul.project.src_dir }}
Directory to work in

View File

@ -0,0 +1 @@
zuul_work_dir: "{{ zuul.project.src_dir }}"

View File

@ -0,0 +1,62 @@
- name: Set log path for multiple nodes
set_fact:
log_path: "{{ zuul.executor.log_root }}/{{ inventory_hostname }}/npm"
when: groups['all'] | length > 1
- name: Set log path for single node
set_fact:
log_path: "{{ zuul.executor.log_root }}/npm"
when: log_path is not defined
- name: Ensure local tox dir
file:
path: "{{ log_path }}"
state: directory
delegate_to: localhost
- name: Check for shrinkwrap
stat:
path: "{{ zuul_work_dir }}/npm-shrinkwrap.json"
register: shrinkwrap
- name: Run npm prune because of https://github.com/npm/npm/issues/6298
when: not shrinkwrap.stat.exists
command: npm prune
environment:
DISPLAY: ':99'
args:
chdir: "{{ zuul_work_dir }}"
- name: Run npm shrinkwrap
when: not shrinkwrap.stat.exists
command: npm shrinkwrap
environment:
DISPLAY: ':99'
args:
chdir: "{{ zuul_work_dir }}"
- name: Check for reports
stat:
path: "{{ zuul_work_dir }}/reports"
register: reports_stat
- name: Collect npm reports
synchronize:
dest: "{{ log_path }}"
mode: pull
src: "{{ zuul_work_dir }}/reports"
verify_host: true
when: reports_stat.stat.exists
- name: Check for karma.subunit files
stat:
path: "{{ zuul_work_dir }}/karma.subunit"
register: karma_stat
- name: Collect karma subunit files
synchronize:
dest: "{{ log_path }}"
mode: pull
src: "{{ zuul_work_dir }}/karma.subunit"
verify_host: true
when: karma_stat.stat.exists

View File

@ -0,0 +1,8 @@
Fetch a Javascript tarball back to be published.
**Role Variables**
.. zuul:rolevar:: zuul_work_dir
:default: {{ zuul.project.src_dir }}
Directory to run npm in.

View File

@ -0,0 +1 @@
zuul_work_dir: "{{ zuul.project.src_dir }}"

View File

@ -0,0 +1,20 @@
- name: Rename tarball for uploading
shell: |
mkdir -p dist
cp *.tgz dist/{{ zuul.project.short_name }}-{{ project_ver }}.tar.gz
cp *.tgz dist/{{ zuul.project.short_name }}-latest.tar.gz
args:
chdir: "{{ zuul_work_dir }}"
- name: Ensure artifacts directory exists
file:
path: "{{ zuul.executor.work_root }}/artifacts"
state: directory
delegate_to: localhost
- name: Collect artifacts
synchronize:
dest: "{{ zuul.executor.work_root }}/artifacts/"
mode: pull
src: "{{ zuul_work_dir }}/dist/"
verify_host: true

View File

@ -0,0 +1,8 @@
Install javascript dependencies needed for a project
**Role Variables**
.. zuul:rolevar:: zuul_work_dir
:default: {{ zuul.project.src_dir }}
The directory to work in.

View File

@ -0,0 +1 @@
zuul_work_dir: "{{ zuul.project.src_dir }}"

View File

@ -0,0 +1,6 @@
- name: Install npm dependencies
command: npm install --verbose
environment:
DISPLAY: ':99'
args:
chdir: "{{ zuul_work_dir }}"

View File

@ -0,0 +1,6 @@
Install NodeJS from nodesource
**Role Variables**
.. zuul:rolevar:: node_version
:default: 6

View File

@ -0,0 +1,2 @@
---
node_version: 6

View File

@ -0,0 +1,40 @@
- name: Update apt cache
apt:
update_cache: yes
become: yes
- name: Install prereqs
package:
name: apt-transport-https
state: present
become: yes
- name: Add nodesource repository key
apt_key:
url: "https://deb.nodesource.com/gpgkey/nodesource.gpg.key"
become: yes
- name: Add nodesource apt source repository
apt_repository:
repo: "deb-src https://deb.nodesource.com/node_{{ node_version }}.x {{ ansible_distribution_release }} main"
state: present
become: yes
- name: Add nodesource apt repository
apt_repository:
repo: "deb https://deb.nodesource.com/node_{{ node_version }}.x {{ ansible_distribution_release }} main"
state: present
update_cache: yes
become: yes
- name: Install NodeJS from nodesource
package:
name: nodejs
state: latest
become: yes
- name: Output node version
command: node --version
- name: Output npm version
command: npm --version

15
roles/npm/README.rst Normal file
View File

@ -0,0 +1,15 @@
Run npm command in a source directory. Assumes the appropriate version
of npm has been installed.
**Role Variables**
.. zuul:rolevar:: npm_command
Command to run. If it's a standard npm lifecycle command, it will be run as
``npm {{ npm_command }}``. Otherwise it will be run as
``npm run {{ npm_command }}``.
.. zuul:rolevar:: zuul_work_dir
:default: {{ zuul.project.src_dir }}
Directory to run npm in.

View File

@ -0,0 +1 @@
zuul_work_dir: "{{ zuul.project.src_dir }}"

24
roles/npm/tasks/main.yaml Normal file
View File

@ -0,0 +1,24 @@
- name: Require npm_command variable
fail:
msg: npm_command is required for this role
when: npm_command is not defined
- name: Run npm lifecycle command
when: npm_command in npm_lifecycle_phases
command: "npm {{ npm_command }} --verbose"
# Need to set DISPLAY to the value that will be set when the virtual
# framebuffer is set up for doing browser tests.
environment:
DISPLAY: ':99'
args:
chdir: "{{ zuul_work_dir }}"
- name: Run npm custom command
when: npm_command not in npm_lifecycle_phases
command: "npm run {{ npm_command }} --verbose"
# Need to set DISPLAY to the value that will be set when the virtual
# framebuffer is set up for doing browser tests.
environment:
DISPLAY: ':99'
args:
chdir: "{{ zuul_work_dir }}"

9
roles/npm/vars/main.yaml Normal file
View File

@ -0,0 +1,9 @@
npm_lifecycle_phases:
- install
- pack
- publish
- restart
- start
- stop
- test
- version

View File

@ -0,0 +1,20 @@
Sets three facts based on information in a git repo.
scm_sha
The short sha found in the repository.
project_ver
A string describing the project's version. It will either be the value of
{{ zuul.tag }} or {{ scm_tag }}.{{ commits_since_tag }}.{{ scm_sha }}
otherwise where ``scm_tag`` is either the most recent tag or the value of
``scm_sha`` if there are no commits in the repo.
commits_since_tag
Number of commits since the most recent tag.
**Role Variables**
.. zuul:rolevar:: zuul_work_dir
:default: {{ zuul.project.src_dir }}
Directory to run git in.

View File

@ -0,0 +1 @@
zuul_work_dir: "{{ zuul.project.src_dir }}"

View File

@ -0,0 +1,56 @@
- name: Get SCM_SHA info
command: git rev-parse --short HEAD
failed_when: false
register: scm_sha_output
args:
chdir: "{{ zuul_work_dir }}"
- name: Set scm_sha fact
set_fact:
scm_sha: "{{ scm_sha_output.stdout }}"
- name: Get SCM_TAG info
command: git describe --abbrev=0 --tags
failed_when: false
register: scm_tag_output
when: zuul.tag is not defined
args:
chdir: "{{ zuul_work_dir }}"
- name: Set scm_sha fact from output
set_fact:
scm_tag: "{{ scm_tag_output.stdout }}"
when: zuul.tag is not defined and scm_tag_output.stdout
- name: Set scm_tag fact from zuul
set_fact:
scm_tag: "{{ zuul.tag }}"
when: zuul.tag is defined
- name: Use git sha if there is no tag
set_fact:
scm_tag: "{{ scm_sha }}"
when: zuul.tag is not defined and not scm_tag_output.stdout
- name: Get commits since tag
# assumes format is like this '0.0.4-2-g135721c'
shell: |
git describe | awk '{split($0,a,"-"); print a[2]}'
failed_when: false
register: commits_since_tag_output
args:
chdir: "{{ zuul_work_dir }}"
- name: Set commits_since_tag fact
set_fact:
commits_since_tag: "{{ commits_since_tag_output.stdout }}"
- name: Set project_ver to scm_tag if there are no commits
when: not commits_since_tag
set_fact:
project_ver: "{{ scm_tag }}"
- name: Set project_ver if there are commits since the tag
when: not commits_since_tag
set_fact:
project_ver: "{{ scm_tag }}.{{ commits_since_tag }}.{{ scm_sha }}"

View File

@ -167,3 +167,42 @@
Do additional setup needed for multi-node jobs such as setting up
overlay networks and setting up known-hosts and ssh keys
pre-run: playbooks/multinode/pre
- job:
name: javascript-base
description: |
Base job for javascript operations
Responds to these variables:
.. zuul:jobvar:: node_version
:default: 6
The version of Node to use.
.. zuul:jobvar: zuul_work_dir
:default: {{ zuul.project.src_dir }}
Path to operate in.
pre-run: playbooks/javascript/pre
post-run: playbooks/javascript/post
- job:
name: build-javascript-tarball
parent: javascript-base
description: |
Build a source tarball for a Javascript project
Responds to these variables:
.. zuul:jobvar:: node_version
:default: 6
The version of Node to use.
.. zuul:jobvar: zuul_work_dir
:default: {{ zuul.project.src_dir }}
Path to operate in.
run: playbooks/javascript/tarball