diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml index b68fedc3bc..020e0fae1b 100644 --- a/.github/workflows/publish.yml +++ b/.github/workflows/publish.yml @@ -18,17 +18,20 @@ jobs: JEKYLL_ENV=development DOCS_AWS_REGION=us-east-1 if [ "${{ github.ref }}" = "refs/heads/master" ]; then + DOCS_URL="https://docs-stage.docker.com" DOCS_S3_BUCKET="docs.docker.com-stage-us-east-1" DOCS_S3_CONFIG="_website-config-docs-stage.json" DOCS_LAMBDA_FUNCTION_CACHE="arn:aws:lambda:us-east-1:710015040892:function:docs-stage-cache-invalidator" DOCS_SLACK_MSG="Successfully promoted docs-stage from master. https://docs-stage.docker.com/" elif [ "${{ github.ref }}" = "refs/heads/published" ]; then JEKYLL_ENV=production + DOCS_URL="https://docs.docker.com" DOCS_S3_BUCKET="docs.docker.com-us-east-1" DOCS_S3_CONFIG="_website-config-docs.json" DOCS_LAMBDA_FUNCTION_CACHE="arn:aws:lambda:us-east-1:710015040892:function:docs-cache-invalidator" DOCS_SLACK_MSG="Successfully published docs. https://docs.docker.com/" elif [ "${{ github.ref }}" = "refs/heads/lab" ]; then + DOCS_URL="https://docs-lab.docker.com" DOCS_S3_BUCKET="" DOCS_LAMBDA_FUNCTION_CACHE="" DOCS_S3_CONFIG="_website-config-docs-lab.json" @@ -37,6 +40,7 @@ jobs: exit 1 fi echo "JEKYLL_ENV=$JEKYLL_ENV" >> $GITHUB_ENV + echo "DOCS_URL=$DOCS_URL" >> $GITHUB_ENV echo "DOCS_AWS_REGION=$DOCS_AWS_REGION" >> $GITHUB_ENV echo "DOCS_S3_BUCKET=$DOCS_S3_BUCKET" >> $GITHUB_ENV echo "DOCS_S3_CONFIG=$DOCS_S3_CONFIG" >> $GITHUB_ENV diff --git a/Dockerfile b/Dockerfile index 5502e21878..81523470e3 100644 --- a/Dockerfile +++ b/Dockerfile @@ -10,7 +10,7 @@ ARG RUBY_VERSION=2.7.6 ARG BUNDLER_VERSION=2.3.13 ARG JEKYLL_ENV=development -ARG DOMAIN=docs.docker.com +ARG DOCS_URL=http://localhost:4000 # Base stage for building FROM ruby:${RUBY_VERSION}-alpine AS base @@ -44,27 +44,18 @@ COPY --from=vendored /out / # After building with jekyll, fix up some links FROM gem AS generate ARG JEKYLL_ENV -ARG DOMAIN +ARG DOCS_URL ENV TARGET=/out RUN --mount=type=bind,target=.,rw \ --mount=type=cache,target=/src/.jekyll-cache </#https://${DOMAIN}/#" "${TARGET}/sitemap.xml" - ) -else - ( - set -x - bundle exec jekyll build --trace --profile -d ${TARGET} - mkdir -p ${TARGET}/js - echo '[]' > ${TARGET}/js/metadata.json - ) -fi +CONFIG_FILES=_config.yml$([ "$JEKYLL_ENV" = "production" ] && echo ",_config_production.yml" || true) +( + set -x + bundle exec jekyll build --profile -d ${TARGET} --config ${CONFIG_FILES} +) find ${TARGET} -type f -name '*.html' | while read i; do - sed -i "s#\(]* href=\"\)https://${DOMAIN}/#\1/#g" "$i" + sed -i "s#\(]* href=\"\)${DOCS_URL}/#\1/#g" "$i" done EOT diff --git a/_config.yml b/_config.yml index 5239a2e033..71f996a1dd 100644 --- a/_config.yml +++ b/_config.yml @@ -30,7 +30,6 @@ exclude: - datacenter - docker-bake.hcl - ee - - js/metadata.json - LICENSE - Makefile - README.md @@ -67,12 +66,15 @@ compose_switch_version: "1.0.4" # which we show a badge (currently: API v1.40, or "Docker 19.03"). min_api_threshold: 1.40 +# Enable search autocompletion (requires metadata.json to be generated) +local_search: true + # List of plugins to enable for local development builds. Mostly the same as -# for production, but without the "jekyll-sitemap" plugin, which is not needed -# for previewing, and excluding saves some time to build +# for production. plugins: - jekyll-redirect-from - jekyll-relative-links + - jekyll-sitemap # Assets # @@ -87,10 +89,7 @@ sass: # Set default options / metadata for some paths. # # Setting options here prevents having to repeat the same option in front-matter -# on every page. Avoid using wildcards, such as "path: engine/api/v1.*", as -# limitations in Jekyll cause those to introduce a _severe_ impact on build-time, -# affecting generation of (e.g.) sitemap.xml and metadata.json, resulting in the -# total build to take 60 seconds longer to build (!). +# on every page. defaults: # Default one for development builds (local and PR previews) # sitemap is disabled here but not for production in _config_production.yml @@ -99,7 +98,6 @@ defaults: type: "pages" values: layout: docs - sitemap: false toc_min: 2 toc_max: 4 diff --git a/_config_production.yml b/_config_production.yml index 396a830f9f..537537b5f4 100644 --- a/_config_production.yml +++ b/_config_production.yml @@ -17,20 +17,12 @@ exclude: google_analytics: GTM-WL2QLG5 polldaddy_id: 8453675 -# Enable search autocompletion (requires metadata.json to be generated) -local_search: true - -plugins: - - jekyll-redirect-from - - jekyll-relative-links - - jekyll-sitemap - # Assets # # For production/deploy, we build css with the "compressed" format, to produce # smaller files. sass: - style: compressed + style: compressed collections: samples: @@ -39,10 +31,7 @@ collections: # Set default options / metadata for some paths. # # Setting options here prevents having to repeat the same option in front-matter -# on every page. Avoid using wildcards, such as "path: engine/api/v1.*", as -# limitations in Jekyll cause those to introduce a _severe_ impact on build-time, -# affecting generation of (e.g.) sitemap.xml and metadata.json, resulting in the -# total build to take 60 seconds longer to build (!). +# on every page. # # The list below is used for *production* deploys, and overrides the one defined # in "_config.yml", which is used for local builds and pull-request previews. diff --git a/_plugins/update_sitemap.rb b/_plugins/update_sitemap.rb new file mode 100644 index 0000000000..667b8f73d5 --- /dev/null +++ b/_plugins/update_sitemap.rb @@ -0,0 +1,19 @@ +Jekyll::Hooks.register :site, :post_write do |site| + beginning_time = Time.now + Jekyll.logger.info "Starting plugin update_sitemap.rb..." + + sitemap_path = File.join(site.dest, 'sitemap.xml') + # DEPLOY_URL is from Netlify for preview of sitemap on PR + # https://docs.netlify.com/configure-builds/environment-variables/#deploy-urls-and-metadata + docs_url = ENV['DEPLOY_URL'] || ENV['DOCS_URL'] || 'http://localhost:4000' + + if File.exist?(sitemap_path) + sitemap_file = File.read(sitemap_path) + replace = sitemap_file.gsub!("/", "#{docs_url}/") + Jekyll.logger.info " Replacing '/' with '#{docs_url}/' in #{sitemap_path}" + File.open(sitemap_path, "w") { |file| file.puts replace } + end + + end_time = Time.now + Jekyll.logger.info "done in #{(end_time - beginning_time)} seconds" +end diff --git a/docker-bake.hcl b/docker-bake.hcl index 107cea4949..2e4749b96f 100644 --- a/docker-bake.hcl +++ b/docker-bake.hcl @@ -1,6 +1,9 @@ variable "JEKYLL_ENV" { default = "development" } +variable "DOCS_URL" { + default = "http://localhost:4000" +} variable "DOCS_SITE_DIR" { default = "_site" } @@ -8,6 +11,7 @@ variable "DOCS_SITE_DIR" { target "_common" { args = { JEKYLL_ENV = JEKYLL_ENV + DOCS_URL = DOCS_URL } no-cache-filter = ["generate"] } diff --git a/docker-compose.yml b/docker-compose.yml index 7d5ab9d730..6e9c5f8f5d 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -10,6 +10,7 @@ services: build: args: - JEKYLL_ENV + - DOCS_URL context: . image: docs/docstage ports: