canvas-lms/Dockerfile.jenkins

Ignoring revisions in .git-blame-ignore-revs. Click here to bypass and see the normal blame view.

65 lines
2.3 KiB
Docker
Raw Normal View History

# GENERATED FILE, DO NOT MODIFY!
# To update this file please edit the relevant template and run the generation
# task `build/dockerfile_writer.rb --env jenkins --compose-file docker-compose.yml,docker-compose.override.yml --in build/Dockerfile.template --out Dockerfile.jenkins`
ARG RUBY=3.1
FROM starlord.inscloudgate.net/jenkins/ruby-passenger:$RUBY
LABEL maintainer="Instructure"
ARG RUBY
ARG POSTGRES_CLIENT=14
ENV APP_HOME /usr/src/app/
ENV RAILS_ENV production
rework handlebars dependency on brandable_css refs FOO-1116 right now in order to build the javascript, we must run brandable_css first for the specific purpose of injecting into handlebars templates their corresponding stylesheet file with the checksum as reported by brandable_css this patch moves things around such that Rails provides this mapping of "handlebars template" to "CSS variant file checksums" in a global variable (Rails is privy to this information already), webpack then at build time injects only a reference to that mapping into the template, then our runtime brandable-css JS helper will resolve that reference from the mapping and request the correct file based on the current user's variant [1] rails assigns window.BRANDABLE_CSS_HANDLEBARS_INDEX with content like this: [ [ "new_styles_normal_contrast", "new_styles_high_contrast", ... ], { "0c": ["0f4f01ab86", 0, 0, "e3e7211701", 3, ... ], ... } ] the structure of the mapping is explained in brandable_css[1], it is a bit overtuned to reduce the size as much as possible since this is included for ALL pages even though the templates in question may never be rendered (right now it's ~1.5kB and should never grow) [2] webpack asks @canvas/brandable-css to loadStylesheetForJST using the contrived id for that file (frontend_build/i18nLinerHandlebars.js:92) [3] brandable-css/index.js will decode that structure to arrive at the exact URL for the stylesheet for that template for the current user variant with this , we should be able to optimize "rake canvas:compile_assets" to run both brandable_css and webpack in parallel, which will greatly mitigate the performance decrease from moving from node-sass to dart-sass == test plan go to some assignment's syllabus page, edit the file app/stylesheets/jst/courses/Syllabus.scss with something fun like: #syllabus .day_date { background: $fire; } rerun `npx brandable_css`, reload the page and verify it's on fire, optionally change your setting to enable High Contrast mode, reload the syllabus page and verify the color changes (it picks up the other variant stylesheet) [1]: https://github.com/instructure/brandable_css/pull/4/commits/80af6e70af6ad60312187f256c2457d33ca75202 Change-Id: Ie48cc71d4837ee02313b2d45a9ad2944725acad2 Reviewed-on: https://gerrit.instructure.com/c/canvas-lms/+/268615 Tested-by: Service Cloud Jenkins <svc.cloudjenkins@instructure.com> Reviewed-by: August Thornton <august@instructure.com> QA-Review: August Thornton <august@instructure.com> Product-Review: August Thornton <august@instructure.com>
2021-07-08 08:03:09 +08:00
ENV SASS_STYLE compressed
ENV NGINX_MAX_UPLOAD_SIZE 10g
ENV LANG en_US.UTF-8
ENV LANGUAGE en_US.UTF-8
ENV LC_CTYPE en_US.UTF-8
ENV LC_ALL en_US.UTF-8
ARG CANVAS_RAILS=7.1
ENV CANVAS_RAILS=${CANVAS_RAILS}
ENV NODE_MAJOR 18
ENV YARN_VERSION 1.19.1-1
ENV GEM_HOME /home/docker/.gem/$RUBY
ENV PATH ${APP_HOME}bin:$GEM_HOME/bin:$PATH
ENV BUNDLE_APP_CONFIG /home/docker/.bundle
WORKDIR $APP_HOME
USER root
RUN mkdir -p /etc/apt/keyrings \
&& curl -fsSL https://deb.nodesource.com/gpgkey/nodesource-repo.gpg.key | gpg --dearmor -o /etc/apt/keyrings/nodesource.gpg \
&& echo "deb [signed-by=/etc/apt/keyrings/nodesource.gpg] https://deb.nodesource.com/node_${NODE_MAJOR}.x nodistro main" | tee /etc/apt/sources.list.d/nodesource.list \
&& curl -sS https://dl.yarnpkg.com/debian/pubkey.gpg | apt-key add - \
&& echo "deb https://dl.yarnpkg.com/debian/ stable main" > /etc/apt/sources.list.d/yarn.list \
&& printf 'path-exclude /usr/share/doc/*\npath-exclude /usr/share/man/*' > /etc/dpkg/dpkg.cfg.d/01_nodoc \
&& echo "deb http://apt.postgresql.org/pub/repos/apt/ $(lsb_release -cs)-pgdg main" > /etc/apt/sources.list.d/pgdg.list \
&& curl -sS https://www.postgresql.org/media/keys/ACCC4CF8.asc | apt-key add - \
&& add-apt-repository ppa:git-core/ppa -ny \
&& apt-get update -qq \
&& apt-get install -qqy --no-install-recommends \
nodejs \
yarn="$YARN_VERSION" \
libxmlsec1-dev \
python3-lxml \
python-is-python3 \
libicu-dev \
libidn11-dev \
parallel \
postgresql-client-$POSTGRES_CLIENT \
unzip \
pbzip2 \
\
git \
build-essential \
&& rm -rf /var/lib/apt/lists/* \
&& mkdir -p /home/docker/.gem/ruby/$RUBY_MAJOR.0
RUN gem install bundler --no-document -v 2.5.10 \
&& find $GEM_HOME ! -user docker | xargs chown docker:docker
RUN npm install -g npm@9.8.1 && npm cache clean --force
USER docker