diff --git a/Dockerfile.jenkins.karma-runner b/Dockerfile.jenkins.karma-runner index 0495bbbde46..ed184796e38 100644 --- a/Dockerfile.jenkins.karma-runner +++ b/Dockerfile.jenkins.karma-runner @@ -1,9 +1,14 @@ -# syntax=docker/dockerfile:experimental - -ARG PATCHSET_TAG -FROM $PATCHSET_TAG AS patchset - FROM local/karma-builder + USER docker -RUN --mount=type=bind,target=/tmp/src,source=/usr/src/app,from=patchset \ - cp -rf /tmp/src/. /usr/src/app +COPY --chown=docker:docker . /usr/src/app +RUN cp -v docker-compose/config/redis.yml config && \ + cp -v docker-compose/config/selenium.yml config/ && \ + cp -vR docker-compose/config/new-jenkins/* config/ && \ + cp -v config/delayed_jobs.yml.example config/delayed_jobs.yml && \ + cp -v config/domain.yml.example config/domain.yml && \ + cp -v config/external_migration.yml.example config/external_migration.yml && \ + cp -v config/outgoing_mail.yml.example config/outgoing_mail.yml + +ARG RAILS_LOAD_ALL_LOCALES=0 +RUN bash -c "if [[ "$RAILS_LOAD_ALL_LOCALES" == "1" ]]; then bundle exec rails i18n:generate_js; fi" diff --git a/Dockerfile.jenkins.webpack-cache b/Dockerfile.jenkins.webpack-cache index e0ba236e8bd..ef83eb08bc7 100644 --- a/Dockerfile.jenkins.webpack-cache +++ b/Dockerfile.jenkins.webpack-cache @@ -2,7 +2,8 @@ FROM local/webpack-builder AS webpack-runner COPY --chown=docker:docker --from=local/cache-helper-collect-webpack /tmp/dst ${APP_HOME} ARG JS_BUILD_NO_UGLIFY=0 -RUN COMPILE_ASSETS_API_DOCS=0 COMPILE_ASSETS_NPM_INSTALL=0 COMPILE_ASSETS_STYLEGUIDE=0 JS_BUILD_NO_UGLIFY="$JS_BUILD_NO_UGLIFY" bundle exec rails canvas:compile_assets +ARG RAILS_LOAD_ALL_LOCALES=0 +RUN COMPILE_ASSETS_API_DOCS=0 COMPILE_ASSETS_NPM_INSTALL=0 COMPILE_ASSETS_STYLEGUIDE=0 JS_BUILD_NO_UGLIFY="$JS_BUILD_NO_UGLIFY" RAILS_LOAD_ALL_LOCALES="$RAILS_LOAD_ALL_LOCALES" bundle exec rails canvas:compile_assets FROM local/ruby-runner AS webpack-cache COPY --chown=docker:docker --from=webpack-runner /usr/src/app/public ${APP_HOME}/public diff --git a/Jenkinsfile b/Jenkinsfile index ee096bc86a0..cb271776808 100644 --- a/Jenkinsfile +++ b/Jenkinsfile @@ -476,6 +476,7 @@ pipeline { "CACHE_UNIQUE_SCOPE=${env.IMAGE_CACHE_UNIQUE_SCOPE}", "COMPILE_ADDITIONAL_ASSETS=${configuration.isChangeMerged() ? 1 : 0}", "JS_BUILD_NO_UGLIFY=${configuration.isChangeMerged() ? 0 : 1}", + "RAILS_LOAD_ALL_LOCALES=${configuration.isChangeMerged() ? 1 : 0}", "RUBY_RUNNER_PREFIX=${env.RUBY_RUNNER_PREFIX}", "WEBPACK_BUILDER_PREFIX=${env.WEBPACK_BUILDER_PREFIX}", "WEBPACK_CACHE_PREFIX=${env.WEBPACK_CACHE_PREFIX}", @@ -564,6 +565,7 @@ pipeline { "CACHE_SAVE_SCOPE=${env.IMAGE_CACHE_MERGE_SCOPE}", "COMPILE_ADDITIONAL_ASSETS=0", "JS_BUILD_NO_UGLIFY=1", + "RAILS_LOAD_ALL_LOCALES=0", "RUBY_RUNNER_PREFIX=${env.RUBY_RUNNER_PREFIX}", "WEBPACK_BUILDER_PREFIX=${env.WEBPACK_BUILDER_PREFIX}", "WEBPACK_CACHE_PREFIX=${env.WEBPACK_CACHE_PREFIX}", @@ -630,6 +632,7 @@ pipeline { "CACHE_SAVE_SCOPE=${cacheScope}", "KARMA_BUILDER_PREFIX=${env.KARMA_BUILDER_PREFIX}", "PATCHSET_TAG=${env.PATCHSET_TAG}", + "RAILS_LOAD_ALL_LOCALES=${configuration.isChangeMerged() ? 1 : 0}", "WEBPACK_BUILDER_IMAGE=${env.WEBPACK_BUILDER_IMAGE}", ]) { sh "./build/new-jenkins/js/docker-build.sh $KARMA_RUNNER_IMAGE" diff --git a/Jenkinsfile.js b/Jenkinsfile.js index 132b83cad2f..5ac2949e3e3 100644 --- a/Jenkinsfile.js +++ b/Jenkinsfile.js @@ -62,6 +62,10 @@ def cleanupFn() { } } +def getLoadAllLocales() { + return configuration.isChangeMerged() ? 1 : 0 +} + pipeline { agent none options { @@ -76,6 +80,7 @@ pipeline { DOCKER_BUILDKIT=1 FORCE_FAILURE = configuration.forceFailureJS() PROGRESS_NO_TRUNC=1 + RAILS_LOAD_ALL_LOCALES = getLoadAllLocales() SENTRY_URL="https://sentry.insops.net" SENTRY_ORG="instructure" SENTRY_PROJECT="master-javascript-build" diff --git a/build/new-jenkins/docker-build.sh b/build/new-jenkins/docker-build.sh index 9868a8382ee..bde20222010 100755 --- a/build/new-jenkins/docker-build.sh +++ b/build/new-jenkins/docker-build.sh @@ -65,6 +65,7 @@ RUBY_RUNNER_BUILD_ARGS=( ) WEBPACK_CACHE_BUILD_ARGS=( --build-arg JS_BUILD_NO_UGLIFY="$JS_BUILD_NO_UGLIFY" + --build-arg RAILS_LOAD_ALL_LOCALES="$RAILS_LOAD_ALL_LOCALES" ) RUBY_RUNNER_PARTS=( $BASE_IMAGE_ID diff --git a/build/new-jenkins/js/docker-build.sh b/build/new-jenkins/js/docker-build.sh index d13fdd8e13e..4346578c2de 100755 --- a/build/new-jenkins/js/docker-build.sh +++ b/build/new-jenkins/js/docker-build.sh @@ -40,10 +40,12 @@ tag_many $KARMA_BUILDER_SELECTED_TAG local/karma-builder ${KARMA_BUILDER_TAGS[SA DOCKER_BUILDKIT=1 docker build \ --build-arg PATCHSET_TAG="$PATCHSET_TAG" \ + --build-arg RAILS_LOAD_ALL_LOCALES="$RAILS_LOAD_ALL_LOCALES" \ + --file Dockerfile.jenkins.karma-runner \ --label "KARMA_BUILDER_SELECTED_TAG=$KARMA_BUILDER_SELECTED_TAG" \ --label "PATCHSET_TAG=$PATCHSET_TAG" \ --label "WEBPACK_BUILDER_IMAGE=$WEBPACK_BUILDER_IMAGE" \ --tag "$1" \ - - < Dockerfile.jenkins.karma-runner + "$WORKSPACE" add_log "built $1" diff --git a/build/new-jenkins/js/tests-karma.sh b/build/new-jenkins/js/tests-karma.sh index 6d74ee6c9c2..ae1b60a41c7 100755 --- a/build/new-jenkins/js/tests-karma.sh +++ b/build/new-jenkins/js/tests-karma.sh @@ -8,4 +8,4 @@ if [[ "${COVERAGE:-}" == "1" ]]; then sentry="-e SENTRY_URL -e SENTRY_DSN -e SENTRY_ORG -e SENTRY_PROJECT -e SENTRY_AUTH_TOKEN -e DEPRECATION_SENTRY_DSN" fi -docker-compose --project-name $CONTAINER_NAME run -e CI_NODE_INDEX -e CI_NODE_TOTAL -e COVERAGE -e FORCE_FAILURE $sentry canvas yarn test:karma:headless +docker-compose --project-name $CONTAINER_NAME run -e CI_NODE_INDEX -e CI_NODE_TOTAL -e COVERAGE -e FORCE_FAILURE -e RAILS_LOAD_ALL_LOCALES $sentry canvas yarn test:karma:headless diff --git a/docker-compose.new-jenkins-js.yml b/docker-compose.new-jenkins-js.yml index ac78022ca6c..0145658b970 100644 --- a/docker-compose.new-jenkins-js.yml +++ b/docker-compose.new-jenkins-js.yml @@ -2,6 +2,7 @@ version: "2.3" services: canvas: environment: - - JSPEC_GROUP + JSPEC_GROUP: $JSPEC_GROUP + RAILS_LOAD_ALL_LOCALES: $RAILS_LOAD_ALL_LOCALES image: $KARMA_RUNNER_IMAGE init: true diff --git a/frontend_build/i18n.js b/frontend_build/i18n.js index 89f71580679..b7791a180f7 100644 --- a/frontend_build/i18n.js +++ b/frontend_build/i18n.js @@ -46,10 +46,16 @@ module.exports.pitch = function(remainingRequest, precedingRequest, data) { // in development, we can save bandwidth and build time by not bothering // to include translation artifacts during the build. - const shouldTranslate = - process.env.RAILS_LOAD_ALL_LOCALES || - process.env.RAILS_ENV == 'production' || - process.env.NODE_ENV == 'production' + // RAILS_LOAD_ALL_LOCALES: '1' or 'true' to enable + // RAILS_LOAD_ALL_LOCALES: '0' to disable in production mode + const shouldTranslate = ( + process.env.RAILS_LOAD_ALL_LOCALES === '1' || + process.env.RAILS_LOAD_ALL_LOCALES === 'true' || + process.env.RAILS_LOAD_ALL_LOCALES !== '0' && ( + process.env.RAILS_ENV == 'production' || + process.env.NODE_ENV == 'production' + ) + ) const translationDependency = shouldTranslate ? ` import 'translations/${scopeName}'; diff --git a/lib/tasks/canvas.rake b/lib/tasks/canvas.rake index 35b9d4574c9..cbddbf12c34 100644 --- a/lib/tasks/canvas.rake +++ b/lib/tasks/canvas.rake @@ -32,6 +32,7 @@ namespace :canvas do build_api_docs = ENV["COMPILE_ASSETS_API_DOCS"] != "0" build_css = ENV["COMPILE_ASSETS_CSS"] != "0" build_styleguide = ENV["COMPILE_ASSETS_STYLEGUIDE"] != "0" + build_i18n = ENV["RAILS_LOAD_ALL_LOCALES"] != "0" build_js = ENV["COMPILE_ASSETS_BUILD_JS"] != "0" build_prod_js = ENV['RAILS_ENV'] == 'production' || ENV['USE_OPTIMIZED_JS'] == 'true' || ENV['USE_OPTIMIZED_JS'] == 'True' # build dev bundles even in prod mode so you can debug with ?optimized_js=0 @@ -50,18 +51,18 @@ namespace :canvas do task 'i18n:generate_js' => [ ('js:yarn_install' if npm_install) - ].compact if build_js + ].compact if build_i18n && build_js task 'js:webpack_development' => [ # public/dist/brandable_css/brandable_css_bundles_with_deps.json needs # to exist before we run handlebars stuff, so we have to do this first 'css:compile', - 'i18n:generate_js', + ('i18n:generate_js' if build_i18n), ] if build_js && build_dev_js task 'js:webpack_production' => [ 'css:compile', - 'i18n:generate_js', + ('i18n:generate_js' if build_i18n), ] if build_js && build_prod_js end