From 4b94c4f012a89a6a5e5de4e44b2520c7c1876867 Mon Sep 17 00:00:00 2001 From: Abin Simon Date: Fri, 14 Oct 2022 08:48:50 +0530 Subject: [PATCH] Option to not use docker for Makefile in docs/website (#1087) ## Description This makes it so that we have an option to locally run all Makefile targets without having to go through Docker. That said, it retains Docker as the default way to run it, but now we can set an evn variable `CORSO_USE_DOCKER=-1` to skip running through docker. I understand if this looks a bit hacky and don't want to add it in, but thought I wold propose this anyways. While not major, I was able to get a good amount of decrease in build times. ## Type of change - [ ] :sunflower: Feature - [ ] :bug: Bugfix - [ ] :world_map: Documentation - [ ] :robot: Test - [x] :computer: CI/Deployment - [ ] :hamster: Trivial/Minor ## Issue(s) * # ## Test Plan - [x] :muscle: Manual - [ ] :zap: Unit test - [ ] :green_heart: E2E --- .github/workflows/ci.yml | 2 + docs/Makefile | 81 ++++++++++++++++++---------------------- website/Dockerfile | 1 + website/Makefile | 15 +++++--- website/gulpfile.js | 2 +- 5 files changed, 49 insertions(+), 52 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 5f0bce726..b5b3092c3 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -93,6 +93,8 @@ jobs: npm i -g markdownlint-cli@0.32.2 # NOTE: update in Dockerfile when updating - name: Run docs lint + env: + CORSO_USE_DOCKER: -1 # prevent using docker inside makefile run: | cd docs && make -o genclidocs check diff --git a/docs/Makefile b/docs/Makefile index 0848b5a6b..8cb92e3b1 100644 --- a/docs/Makefile +++ b/docs/Makefile @@ -1,69 +1,60 @@ -.PHONY: buildimage build dev shell check genclidocs +.PHONY: buildimage build dev shell check genclidocs _validatemdgen +# Specify `CORSO_USE_DOCKER=-1` to skip using Docker for builds CORSO_BUILD_DIR := /tmp/.corsobuild CORSO_BUILD_CACHE := ${CORSO_BUILD_DIR}/cache CORSO_BUILD_MOD := ${CORSO_BUILD_DIR}/mod CORSO_BUILD_BIN := ${CORSO_BUILD_DIR}/bin +CORSO_REPO := /go/src/github.com/alcionai/corso +CORSO_LOCAL_PATH := $(shell git rev-parse --show-toplevel) +DOCSC := docker run --rm -it -p 3000:3000 -v ${PWD}:/usr/src/docs alcion/docs +DOCSE := ${DOCSC} # for enforcing docker container as environment +GOC := docker run --rm -it \ + -v ${CORSO_LOCAL_PATH}:${CORSO_REPO} -v ${CORSO_BUILD_DIR}:${CORSO_BUILD_DIR} \ + --env GOCACHE=${CORSO_BUILD_CACHE} --env GOMODCACHE=${CORSO_BUILD_MOD} --env GOTMPDIR=${CORSO_BUILD_DIR} \ + --workdir ${CORSO_REPO}/src \ + golang:1.18 +ifeq (${CORSO_USE_DOCKER},-1) + DOCSC := + GOC := cd ${CORSO_LOCAL_PATH}/src && + CORSO_REPO := ${CORSO_LOCAL_PATH} +endif -CORSO_REPO := ${PWD}/.. -CORSO_REPO_CONTAINER := /go/src/github.com/alcionai/corso - -MDGEN_SRC_CONTAINER := ${CORSO_REPO_CONTAINER}/src/cmd/mdgen/mdgen.go +MDGEN_SRC := ${CORSO_REPO}/src/cmd/mdgen/mdgen.go MDGEN_BINARY := ${CORSO_BUILD_BIN}/mdgen -CLI_DOCS_CONTAINER := ${CORSO_REPO_CONTAINER}/docs/docs/cli +CLI_DOCS := ${CORSO_REPO}/docs/docs/cli buildimage: docker build -t "alcion/docs:latest" . dev: genclidocs - docker run --rm -it \ - -p 3000:3000 \ - -v ${PWD}:/usr/src/docs alcion/docs + $(DOCSC) npm start -- --host 0.0.0.0 VALE_TARGET ?= docs README.md -dockercheck: genclidocs - docker run --rm \ - -v ${PWD}:/usr/src/docs alcion/docs vale $(VALE_TARGET) - docker run --rm \ - -v ${PWD}:/usr/src/docs alcion/docs markdownlint '**/*.md' --ignore styles/ --ignore src/ --ignore node_modules/ - check: genclidocs - vale $(VALE_TARGET) - markdownlint '**/*.md' --ignore styles/ --ignore src/ --ignore node_modules/ + $(DOCSC) vale $(VALE_TARGET) + $(DOCSC) markdownlint '**/*.md' --ignore styles/ --ignore src/ --ignore node_modules/ -shell: - docker run --rm -it \ - -p 3000:3000 \ - -v ${PWD}:/usr/src/docs alcion/docs /bin/bash +dockershell: + $(DOCSE) /bin/bash build: genclidocs - docker run --rm \ - -v ${PWD}:/usr/src/docs alcion/docs npm run build + $(DOCSC) npm run build genclidocs: ${MDGEN_BINARY} @echo 'Auto-generating Corso CLI docs...' - rm -rf docs/cli - docker run --rm -it \ - -v ${CORSO_REPO}:${CORSO_REPO_CONTAINER} -v ${CORSO_BUILD_DIR}:${CORSO_BUILD_DIR} \ - --workdir ${CORSO_REPO_CONTAINER}/src \ - --entrypoint ${MDGEN_BINARY} \ - golang:1.18 \ - --cli-folder ${CLI_DOCS_CONTAINER} + $(DOCSC) rm -rf docs/cli + $(GOC) ${MDGEN_BINARY} --cli-folder ${CLI_DOCS} -${MDGEN_BINARY}: $(shell find ../src -type f -name *.go) $(shell find ../src -type d ) +_validatemdgen: # in case we have a different architecture + ${MDGEN_BINARY} --help >/dev/null || rm -rf ${MDGEN_BINARY} + +${MDGEN_BINARY}: $(shell find ${CORSO_LOCAL_PATH}/src -type f -name *.go) $(shell find ${CORSO_LOCAL_PATH}/src -type d ) _validatemdgen @echo 'Re-building Corso CLI docs auto-gen tooling...' - docker run --rm -it \ - -v ${CORSO_REPO}:${CORSO_REPO_CONTAINER} -v ${CORSO_BUILD_DIR}:${CORSO_BUILD_DIR} \ - --env GOCACHE=${CORSO_BUILD_CACHE} --env GOMODCACHE=${CORSO_BUILD_MOD} --env GOTMPDIR=${CORSO_BUILD_DIR} \ - --workdir ${CORSO_REPO_CONTAINER}/src \ - --entrypoint /usr/local/go/bin/go \ - golang:1.18 \ - mod download - docker run --rm -it \ - -v ${CORSO_REPO}:${CORSO_REPO_CONTAINER} -v ${CORSO_BUILD_DIR}:${CORSO_BUILD_DIR} \ - --env GOCACHE=${CORSO_BUILD_CACHE} --env GOMODCACHE=${CORSO_BUILD_MOD} --env GOTMPDIR=${CORSO_BUILD_DIR} \ - --workdir ${CORSO_REPO_CONTAINER}/src \ - --entrypoint /usr/local/go/bin/go \ - golang:1.18 \ - build -o ${MDGEN_BINARY} ${MDGEN_SRC_CONTAINER} + $(GOC) go mod download + $(GOC) go build -o ${MDGEN_BINARY} ${MDGEN_SRC} + +clean: + $(DOCSC) rm -rf docs/cli + $(DOCSC) rm -rf ${CORSO_BUILD_DIR} \ No newline at end of file diff --git a/website/Dockerfile b/website/Dockerfile index 142d63fd0..8d00f95bd 100644 --- a/website/Dockerfile +++ b/website/Dockerfile @@ -25,5 +25,6 @@ RUN yarn install \ && yarn cache clean \ && rm -f package.json yarn.lock ENV PATH /usr/src/node_modules/.bin:$PATH +ENV NODE_MODULES_PATH ../ WORKDIR /usr/src/website diff --git a/website/Makefile b/website/Makefile index 80d21449b..31a94fa1a 100644 --- a/website/Makefile +++ b/website/Makefile @@ -1,19 +1,22 @@ .PHONY: buildimage dev shell build publish sync +WEBC := docker run --rm -it --init -p 5050:3000 -p 5051:3001 \ + -v ${PWD}:/usr/src/website corso/website +ifeq (${CORSO_USE_DOCKER},-1) + WEBC := +endif + buildimage: docker build -t "corso/website:latest" . dev: - docker run --rm -it --init -p 5050:3000 -p 5051:3001 \ - -v ${PWD}:/usr/src/website corso/website gulp + $(WEBC) gulp shell: - docker run --rm -it -p 5050:3000 -p 5051:3001 \ - -v ${PWD}:/usr/src/website corso/website /bin/bash + $(WEBC) /bin/bash build: - docker run --rm -it --init \ - -v ${PWD}:/usr/src/website corso/website gulp build + $(WEBC) gulp build publish: build docker run -e AWS_ACCESS_KEY_ID -e AWS_SECRET_ACCESS_KEY \ diff --git a/website/gulpfile.js b/website/gulpfile.js index 8a5aa25cc..eb3e0886c 100644 --- a/website/gulpfile.js +++ b/website/gulpfile.js @@ -213,7 +213,7 @@ gulp.task('copy:all', function () { gulp.task('copy:libs', function () { return gulp - .src(npmdist({ nodeModulesPath: '../' }), { base: paths.base.node.dir }) + .src(npmdist({ nodeModulesPath: process.env.NODE_MODULES_PATH || './' }), { base: paths.base.node.dir }) .pipe(rename(function (path) { path.dirname = path.dirname.replace(/\/dist/, '').replace(/\\dist/, ''); }))