@@ -37,8 +37,6 @@ RUN set -x \
3737 && echo "deb http://ppa.launchpad.net/git-core/ppa/ubuntu wily main" > /etc/apt/sources.list.d/git.list \
3838 && APT_KEY_DONT_WARN_ON_DANGEROUS_USAGE=1 apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv 2930ADAE8CAF5059EE73BB4B58712A2291FA4AD5 \
3939 && echo "deb http://repo.mongodb.org/apt/debian jessie/mongodb-org/3.6 main" > /etc/apt/sources.list.d/mongo.list \
40- && curl -sS "https://deb.nodesource.com/gpgkey/nodesource.gpg.key" 2>/dev/null | APT_KEY_DONT_WARN_ON_DANGEROUS_USAGE=1 apt-key add - \
41- && echo "deb http://deb.nodesource.com/node_8.x jessie main" > /etc/apt/sources.list.d/node.list \
4240 && curl -sS https://www.postgresql.org/media/keys/ACCC4CF8.asc 2>/dev/null | APT_KEY_DONT_WARN_ON_DANGEROUS_USAGE=1 apt-key add - \
4341 && echo "deb http://apt.postgresql.org/pub/repos/apt/ jessie-pgdg main" > /etc/apt/sources.list.d/pgsql.list \
4442 && curl -sS https://dl.yarnpkg.com/debian/pubkey.gpg 2>/dev/null | APT_KEY_DONT_WARN_ON_DANGEROUS_USAGE=1 apt-key add - \
@@ -82,15 +80,10 @@ RUN set -x \
8280 nano \
8381 net-tools \
8482 netcat \
85- nodejs \
8683 openssh-client \
8784 patch \
8885 patchelf \
8986 postgresql-client \
90- python-cffi \
91- python-dev \
92- python-pip \
93- python-wheel \
9487 redis-tools \
9588 rsync \
9689 rubygems \
@@ -113,20 +106,40 @@ RUN set -x \
113106 && DEBIAN_FRONTEND=noninteractive apt-get purge -qq -y --auto-remove -o APT::AutoRemove::RecommendsImportant=false apt-utils \
114107 && rm -rf /var/lib/apt/lists/* \
115108 \
116- # Get newer pip version
117- && pip install --upgrade pip \
118- && DEBIAN_FRONTEND=noninteractive apt-get purge -qq -y --auto-remove -o APT::AutoRemove::RecommendsImportant=false python-pip \
119- && rm -rf /var/lib/apt/lists/* \
120- \
121109 && (find /usr/local/bin -type f -print0 | xargs -n1 -0 strip --strip-all -p 2>/dev/null || true) \
122110 && (find /usr/local/lib -type f -print0 | xargs -n1 -0 strip --strip-all -p 2>/dev/null || true) \
123111 && (find /usr/local/sbin -type f -print0 | xargs -n1 -0 strip --strip-all -p 2>/dev/null || true)
124112
125113
114+ ###
115+ ### Install custom software
116+ ###
126117RUN set -x \
127- # ansible
128- && /usr/local/bin/pip install --no-cache-dir --upgrade setuptools \
129- && /usr/local/bin/pip install --no-cache-dir ansible \
118+ # pip
119+ && DEBIAN_FRONTEND=noninteractive apt-get update -qq \
120+ && DEBIAN_FRONTEND=noninteractive apt-get install -qq -y --no-install-recommends --no-install-suggests \
121+ libpython-dev \
122+ && DEBIAN_FRONTEND=noninteractive apt-get purge -qq -y --auto-remove -o APT::AutoRemove::RecommendsImportant=false \
123+ && rm -rf /var/lib/apt/lists/* \
124+ \
125+ && curl -sS https://bootstrap.pypa.io/get-pip.py | python \
126+ \
127+ # nvm
128+ && git clone https://github.com/creationix/nvm /opt/nvm \
129+ && cd /opt/nvm \
130+ && git checkout "$(git describe --abbrev=0 --tags --match "v[0-9]*" $(git rev-list --tags --max-count=1))" \
131+ \
132+ && { \
133+ echo 'export NVM_DIR="/opt/nvm"'; \
134+ echo '[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh" # This loads nvm'; \
135+ echo '[ -s "$NVM_DIR/bash_completion" ] && \. "$NVM_DIR/bash_completion" # This loads nvm bash_completion'; \
136+ } >> /home/devilbox/.bashrc \
137+ \
138+ && chown -R devilbox:devilbox /opt/nvm \
139+ \
140+ && su -c '. /opt/nvm/nvm.sh; nvm install node' devilbox \
141+ && su -c '. /opt/nvm/nvm.sh; nvm install --lts' devilbox \
142+ && su -c '. /opt/nvm/nvm.sh; nvm use node' devilbox \
130143 \
131144# awesomeci
132145 && git clone https://github.com/cytopia/awesome-ci.git /usr/local/src/awesome-ci \
@@ -136,28 +149,13 @@ RUN set -x \
136149&& make install \
137150&& cd / \
138151&& rm -rf /usr/local/src/awesome-ci \
139- \
140- && gem install mixlib-config -v 2.2.4 \
141- && gem install rb-inotify -v 0.9.10 \
142- && gem install mdl \
143- && gem install scss_lint \
144- && yarn global add --prod --non-interactive --link-duplicates --silent --cache-folder /tmp/y eslint \
145- && yarn global add --prod --non-interactive --link-duplicates --silent --cache-folder /tmp/y jsonlint \
146- && yarn global add --prod --non-interactive --link-duplicates --silent --cache-folder /tmp/y mdlint \
147- && yarn global add --prod --non-interactive --link-duplicates --silent --cache-folder /tmp/y gulp \
148- && rm -rf /tmp/y \
149152 \
150153# gitflow
151154 && git clone git://github.com/petervanderdoes/gitflow.git /tmp/gitflow \
152155&& cd /tmp/gitflow \
153156&& make install \
154157&& cd / && rm -rf /tmp/gitflow \
155158 \
156- # grunt
157- && until yarn global add --prod --non-interactive --link-duplicates --silent --cache-folder /tmp/y grunt; do sleep 1; done \
158- && until yarn global add --prod --non-interactive --link-duplicates --silent --cache-folder /tmp/y grunt-cli; do sleep 1; done \
159- && rm -rf /tmp/y \
160- \
161159# linkcheck
162160 && curl https://raw.githubusercontent.com/cytopia/linkcheck/master/linkcheck > /usr/local/bin/linkcheck \
163161&& chmod +x /usr/local/bin/linkcheck \
@@ -208,15 +206,6 @@ RUN set -x \
208206 && curl -sS -L https://github.com/squizlabs/PHP_CodeSniffer/releases/download/2.9.0/phpcbf.phar > /usr/local/bin/phpcbf 2>/dev/null \
209207&& chmod +x /usr/local/bin/phpcbf \
210208 \
211- # pm2
212- && until npm install pm2 -g; do sleep 1; done \
213- # sass
214- && gem install sass \
215- # webpack
216- && yarn global add --prod --non-interactive --link-duplicates --silent --cache-folder /tmp/y webpack \
217- && yarn global add --prod --non-interactive --link-duplicates --silent --cache-folder /tmp/y webpack-cli \
218- && rm -rf /tmp/y \
219- \
220209# wkhtmltopdf
221210 && VERSION="$( curl -sSL https://github.com/wkhtmltopdf/wkhtmltopdf/releases | grep -Eo '/wkhtmltopdf/.+jessie_amd64\.deb' | head -1 )" \
222211 && DEBIAN_FRONTEND=noninteractive apt-get update -qq \
@@ -229,22 +218,12 @@ RUN set -x \
229218 && DEBIAN_FRONTEND=noninteractive apt-get purge -qq -y --auto-remove -o APT::AutoRemove::RecommendsImportant=false apt-utils \
230219&& rm -rf /var/lib/apt/lists/* \
231220 \
232- # yamllint
233- && DEBIAN_FRONTEND=noninteractive apt-get update -qq \
234- && DEBIAN_FRONTEND=noninteractive apt-get install -qq -y --no-install-recommends --no-install-suggests libpython-dev python-setuptools libyaml-dev \
235- \
236- && /usr/local/bin/pip install --no-cache-dir yamllint \
237- && DEBIAN_FRONTEND=noninteractive apt-get purge -qq -y --auto-remove -o APT::AutoRemove::RecommendsImportant=false libpython-dev python-setuptools libyaml-dev \
238- && rm -rf /var/lib/apt/lists/* \
239- \
240221# cleanup
241222 && rm -rf /home/${MY_USER}/.*json \
242223&& rm -rf /home/${MY_USER}/.cache \
243224&& rm -rf /home/${MY_USER}/.composer \
244225&& rm -rf /home/${MY_USER}/.config \
245226&& rm -rf /home/${MY_USER}/.drush \
246- && rm -rf /home/${MY_USER}/.gem \
247- && rm -rf /home/${MY_USER}/.npm \
248227&& rm -rf /home/${MY_USER}/.subversion \
249228&& rm -rf /home/${MY_USER}/.v8* \
250229\
@@ -253,15 +232,101 @@ RUN set -x \
253232&& rm -rf /root/.composer \
254233&& rm -rf /root/.config \
255234&& rm -rf /root/.drush \
256- && rm -rf /root/.gem \
257- && rm -rf /root/.npm \
258235&& rm -rf /root/.subversion \
259236&& rm -rf /root/.v8* \
260237\
261238&& rm -rf /tmp/* \
239+ && (rm -rf /tmp/.* || true) \
262240 \
241+ \
242+ && (rm -rf /root/.gem || true ) \
243+ && (rm -rf /root/.cache || true) \
244+ && (rm -rf /root/.composer || true) \
245+ && (rm -rf /root/.config || true) \
246+ && (rm -rf /root/.npm || true) \
247+ \
248+ && (rm -rf /home/devilbox/.cache || true) \
249+ && (rm -rf /home/devilbox/.composer || true) \
250+ && (rm -rf /home/devilbox/.config || true) \
251+ && (rm -rf /home/devilbox/.npm || true) \
263252 \
264253 && (rm -rf /usr/local/src/composer/cache/* || true) \
254+ && rm -rf /tmp/* \
255+ && (rm -rf /tmp/.* || true)
256+
257+
258+ ###
259+ ### Install Node npm packages (globally)
260+ ###
261+ RUN set -x \
262+ # eslint
263+ && su -c '. /opt/nvm/nvm.sh; npm install -g eslint' devilbox \
264+ # grunt
265+ && su -c '. /opt/nvm/nvm.sh; npm install -g grunt' devilbox \
266+ # grunt_cli
267+ && su -c '. /opt/nvm/nvm.sh; npm install -g grunt-cli' devilbox \
268+ # gulp
269+ && su -c '. /opt/nvm/nvm.sh; npm install -g gulp' devilbox \
270+ # jsonlint
271+ && su -c '. /opt/nvm/nvm.sh; npm install -g jsonlint' devilbox \
272+ # pm2
273+ && su -c '. /opt/nvm/nvm.sh; npm install -g pm2' devilbox \
274+ # mdlint
275+ && su -c '. /opt/nvm/nvm.sh; npm install -g mdlint' devilbox \
276+ # webpack
277+ && su -c '. /opt/nvm/nvm.sh; npm install -g webpack' devilbox \
278+ # webpack_cli
279+ && su -c '. /opt/nvm/nvm.sh; npm install -g webpack-cli' devilbox \
280+ \
281+ && ln -sf $(dirname $(su -c '. /opt/nvm/nvm.sh; nvm which current' devilbox))/* /usr/local/bin/ \
282+ \
283+ && su -c '. /opt/nvm/nvm.sh; npm cache clear --force' devilbox \
284+ && su -c '. /opt/nvm/nvm.sh; nvm cache clear --force' devilbox \
285+ && rm -rf /home/devilbox/.npm \
286+ && rm -rf /home/devilbox/.config \
287+ && rm -rf /tmp/* \
288+ && (rm -rf /tmp/.* || true) \
289+ \
290+ && (find /opt/nvm -type f -print0 | xargs -n1 -0 strip --strip-all -p 2>/dev/null || true)
291+
292+
293+
294+ ###
295+ ### Install Python pip packages
296+ ###
297+ RUN set -x \
298+ # ansible
299+ && pip install --no-cache-dir --force-reinstall ansible \
300+ # yamllint
301+ && pip install --no-cache-dir --force-reinstall yamllint \
302+ \
303+ && rm -rf /root/.cache/pip \
304+ && rm -rf /tmp/* \
305+ && (rm -rf /tmp/.* || true) \
306+ \
307+ && (find /usr/local/bin -type f -print0 | xargs -n1 -0 strip --strip-all -p 2>/dev/null || true) \
308+ && (find /usr/local/lib -type f -print0 | xargs -n1 -0 strip --strip-all -p 2>/dev/null || true) \
309+ && (find /usr/local/sbin -type f -print0 | xargs -n1 -0 strip --strip-all -p 2>/dev/null || true)
310+
311+
312+ ###
313+ ### Install Ruby gems
314+ ###
315+ RUN set -x \
316+ # mixlib_config
317+ && gem install mixlib-config -v 2.2.4 \
318+ # rb_inotify
319+ && gem install rb-inotify -v 0.9.10 \
320+ # mdl
321+ && gem install mdl \
322+ # scss_lint
323+ && gem install scss_lint \
324+ # sass
325+ && gem install sass \
326+ \
327+ && rm -rf /root/.gem \
328+ && rm -rf /tmp/* \
329+ && (rm -rf /tmp/.* || true) \
265330 \
266331 && (find /usr/local/bin -type f -print0 | xargs -n1 -0 strip --strip-all -p 2>/dev/null || true) \
267332 && (find /usr/local/lib -type f -print0 | xargs -n1 -0 strip --strip-all -p 2>/dev/null || true) \
@@ -273,7 +338,7 @@ RUN set -x \
273338###
274339RUN \
275340 { \
276- echo "PATH=\${PATH}:/usr/local/bin:/usr/local/sbin:/usr/local/node /bin"; \
341+ echo "PATH=\${PATH}:/usr/local/bin:/usr/local/sbin:\${HOME}/.yarn /bin"; \
277342 echo "export PATH"; \
278343 echo ". /etc/bash-devilbox"; \
279344 echo "if [ -d /etc/bashrc-devilbox.d/ ]; then"; \
@@ -308,7 +373,7 @@ RUN set -x \
308373 && rm -f /usr/local/etc/php/php.ini
309374
310375RUN set -x \
311- && ansible -- version | grep -E '^ansible [.0-9]+$ ' \
376+ && su -c '. /opt/nvm/nvm.sh; nvm -- version' devilbox | grep -E '^[.0-9]+' \
312377 && mdl --version | grep -E '[.0-9]+' \
313378&& scss-lint --version | grep -E '[.0-9]+' \
314379&& eslint -v | grep -E '[.0-9]+' \
@@ -317,18 +382,35 @@ RUN set -x \
317382&& gulp --version | grep -E '[.0-9]+' \
318383 \
319384 && git-flow version | grep -E '[.0-9]+' \
320- && grunt --version | grep -E '[.0-9]+' \
321385 && linkcheck --version | grep -E '^linkcheck\sv[.0-9]+' \
322386 && su - ${MY_USER} -c '/usr/local/src/linuxbrew/bin/brew --version' | grep -E 'Homebrew\s*[.0-9]+' \
323387 && mysqldump-secure --version | grep -E 'Version:\s*[.0-9]+' \
324388 && phpcs --version | grep -E 'version [.0-9]+' \
325389 && phpcbf --version | grep -E 'version [.0-9]+' \
326- && pm2 --no-daemon --version | grep -E '[.0-9]+' \
327- && sass --version | grep -E '[.0-9]+' \
328- && webpack --version | grep -E '[.0-9]+' \
329390 && wkhtmltopdf --version | grep -E "^wkhtmltopdf [.0-9]+\s+\(.+patched.+\)" \
391+ \
392+ && ansible --version | grep -E '^ansible [.0-9]+$' \
330393 && yamllint --version 2>&1 | grep -E '[.0-9]+' \
331- && true
394+ \
395+ && eslint -v | grep -E '[.0-9]+' \
396+ && grunt --version | grep -E '[.0-9]+' \
397+ && gulp --version | grep -E '[.0-9]+' \
398+ && jsonlint --version | grep -E '[.0-9]+' \
399+ && pm2 --no-daemon --version | grep -E '[.0-9]+' \
400+ && mdlint --version | grep -E '[.0-9]+' \
401+ && webpack --version | grep -E '[.0-9]+' \
402+ \
403+ && mdl --version | grep -E '[.0-9]+' \
404+ && sass --version | grep -E '[.0-9]+' \
405+ \
406+ && rm -rf /home/devilbox/.config/ \
407+ && rm -rf /root/.ansible \
408+ && rm -rf /root/.console \
409+ && rm -rf /root/.composer \
410+ && rm -rf /root/.drush \
411+ && rm -rf /root/.pm2 \
412+ && rm -rf /tmp/* \
413+ && (rm -rf /tmp/.* || true)
332414
333415
334416###
0 commit comments