1*c8dee2aaSAndroid Build Coastguard Worker# Docker container with Google Chrome and puppeteer. 2*c8dee2aaSAndroid Build Coastguard Worker# 3*c8dee2aaSAndroid Build Coastguard Worker# Tests will be run as non-root (user skia, in fact), so /OUT should have permissions 4*c8dee2aaSAndroid Build Coastguard Worker# 777 so as to be able to create output there. 5*c8dee2aaSAndroid Build Coastguard Worker 6*c8dee2aaSAndroid Build Coastguard WorkerFROM node:8.11 7*c8dee2aaSAndroid Build Coastguard Worker 8*c8dee2aaSAndroid Build Coastguard WorkerRUN apt-get update && apt-get upgrade -y 9*c8dee2aaSAndroid Build Coastguard Worker 10*c8dee2aaSAndroid Build Coastguard WorkerRUN wget https://github.com/Yelp/dumb-init/releases/download/v1.2.2/dumb-init_1.2.2_amd64.deb 11*c8dee2aaSAndroid Build Coastguard WorkerRUN dpkg -i dumb-init_*.deb 12*c8dee2aaSAndroid Build Coastguard Worker 13*c8dee2aaSAndroid Build Coastguard Worker# https://github.com/GoogleChrome/puppeteer/blob/master/docs/troubleshooting.md#running-puppeteer-in-docker 14*c8dee2aaSAndroid Build Coastguard Worker# recommends using dumb-init to "prevent zombie chrome processes" 15*c8dee2aaSAndroid Build Coastguard WorkerENTRYPOINT ["/usr/bin/dumb-init", "--"] 16*c8dee2aaSAndroid Build Coastguard Worker 17*c8dee2aaSAndroid Build Coastguard WorkerRUN wget -q -O - https://dl-ssl.google.com/linux/linux_signing_key.pub | apt-key add - 18*c8dee2aaSAndroid Build Coastguard WorkerRUN sh -c 'echo "deb [arch=amd64] http://dl.google.com/linux/chrome/deb/ stable main" >> /etc/apt/sources.list.d/google.list' 19*c8dee2aaSAndroid Build Coastguard WorkerRUN apt-get update && apt-get install -y google-chrome-stable 20*c8dee2aaSAndroid Build Coastguard Worker 21*c8dee2aaSAndroid Build Coastguard WorkerENV PUPPETEER_SKIP_CHROMIUM_DOWNLOAD true 22*c8dee2aaSAndroid Build Coastguard Worker 23*c8dee2aaSAndroid Build Coastguard WorkerRUN npm install --global \ 24*c8dee2aaSAndroid Build Coastguard Worker [email protected] \ 25*c8dee2aaSAndroid Build Coastguard Worker [email protected] \ 26*c8dee2aaSAndroid Build Coastguard Worker [email protected] \ 27*c8dee2aaSAndroid Build Coastguard Worker [email protected] \ 28*c8dee2aaSAndroid Build Coastguard Worker [email protected] 29*c8dee2aaSAndroid Build Coastguard Worker 30*c8dee2aaSAndroid Build Coastguard Worker# Allows require('puppeteer') to work from anywhere. 31*c8dee2aaSAndroid Build Coastguard Worker# https://stackoverflow.com/a/15646750 32*c8dee2aaSAndroid Build Coastguard WorkerENV NODE_PATH=/usr/local/lib/node_modules 33*c8dee2aaSAndroid Build Coastguard Worker 34*c8dee2aaSAndroid Build Coastguard Worker#Add user so we don't have to run as root (prevents us from over-writing files in /SRC) 35*c8dee2aaSAndroid Build Coastguard WorkerRUN groupadd -g 2000 skia \ 36*c8dee2aaSAndroid Build Coastguard Worker && useradd -u 2000 -g 2000 skia \ 37*c8dee2aaSAndroid Build Coastguard Worker && mkdir -p /home/skia \ 38*c8dee2aaSAndroid Build Coastguard Worker && chown -R skia:skia /home/skia 39*c8dee2aaSAndroid Build Coastguard Worker 40*c8dee2aaSAndroid Build Coastguard Worker# These directories can be used for mounting a source checkout and having a place to put outputs. 41*c8dee2aaSAndroid Build Coastguard WorkerRUN mkdir -m 0777 /SRC /OUT 42*c8dee2aaSAndroid Build Coastguard Worker 43*c8dee2aaSAndroid Build Coastguard Worker# Run everything after as non-privileged user. 44*c8dee2aaSAndroid Build Coastguard WorkerUSER skia 45*c8dee2aaSAndroid Build Coastguard Worker 46*c8dee2aaSAndroid Build Coastguard WorkerWORKDIR /home/skia