| # Makefile for building CORD docs site, guide.opencord.org |
| # Building docs requires the following tools: |
| # - Gitbook toolchain: https://toolchain.gitbook.com/setup.html |
| # - git |
| # - NPM (for Gitbook and Swagger) |
| # - linkchecker (for test target) http://wummel.github.io/linkchecker/ |
| # - markdownlint (for lint target) https://github.com/markdownlint/markdownlint |
| |
| default: serve |
| |
| # use bash for pushd/popd, and to fail quickly |
| SHELL = bash -eu -o pipefail |
| |
| # Other repos with documentation that's included in the gitbook |
| # edit the `git_refs` file with the commit/tag/branch that you want to use |
| OTHER_REPO_DOCS ?= att-workflow-driver cord-tester fabric fabric-crossconnect hippie-oss kubernetes-service olt-service onos-service openolt openstack rcord simpleexampleservice exampleservice vrouter xos xos-gui xos-tosca vtn-service cordctl |
| GENERATED_DOCS ?= # should be 'swagger', but currently broken |
| ALL_DOCS ?= $(OTHER_REPO_DOCS) $(GENERATED_DOCS) |
| |
| # build targets |
| serve: | $(ALL_DOCS) gitbook-setup |
| npm start |
| |
| build: _book |
| |
| _book: | $(ALL_DOCS) gitbook-setup |
| gitbook build |
| |
| gitbook-setup: |
| gitbook init |
| gitbook install |
| |
| clean: |
| rm -rf _book |
| rm -rf node_modules |
| rm -rf repos/* |
| rm -rf $(ALL_DOCS) |
| |
| # testing targets |
| test: lint linkcheck |
| LINT_STYLE ?= mdl_relaxed.rb |
| |
| lint: | $(OTHER_REPO_DOCS) |
| @echo "markdownlint(mdl) version: `mdl --version`" |
| @echo "style config:" |
| @echo "---" |
| @cat $(LINT_STYLE) |
| @echo "---" |
| mdl -s $(LINT_STYLE) `find -L . ! -path "./partials/*" ! -path "./_book/*" ! -path "./repos/*" ! -path "./node_modules/*" ! -path "./cord-tester/modules/*" ! -path "*/vendor/*" -name "*.md"` |
| |
| linkcheck: $(ALL_DOCS) _book |
| linkchecker -a -f linkchecker.ini _book/ |
| |
| # Host holding the git server |
| REPO_HOST ?= https://gerrit.opencord.org |
| |
| # checkout the repos inside repos/ dir |
| repos: |
| mkdir repos |
| |
| # build directory paths in repos/* to perform 'git clone <repo>' into |
| CHECKOUT_REPOS=$(foreach repo,$(OTHER_REPO_DOCS),repos/$(repo)) |
| |
| # For QA patchset validation - set SKIP_CHECKOUT to the repo name and |
| # pre-populate it under epos with the specific commit to being validated |
| SKIP_CHECKOUT ?= |
| |
| # clone (only if doesn't exist), then checkout ref in repos/* |
| $(CHECKOUT_REPOS): git_refs | repos |
| GIT_REF=`grep '^$(@F) ' git_refs | awk '{print $$3}'` ;\ |
| if [ ! -d '$@' ] ;\ |
| then git clone $(REPO_HOST)/$(@F) $@ ;\ |
| fi ;\ |
| if [ "$(SKIP_CHECKOUT)" = "$(@F)" ] ;\ |
| then echo "Skipping checkout of repo $(SKIP_CHECKOUT) as it's being tested" ;\ |
| else pushd $@ ;\ |
| git checkout $$GIT_REF ;\ |
| popd ;\ |
| fi |
| |
| # link subdirectories (if applicable) into main docs dir |
| $(OTHER_REPO_DOCS): | $(CHECKOUT_REPOS) |
| GIT_SUBDIR=`grep '^$@ ' git_refs | awk '{print $$2}'` ;\ |
| ln -s repos/$(@)$$GIT_SUBDIR $@ |
| |
| # swagger docs generation |
| swagger: xos |
| pushd repos/xos/docs; make swagger_docs; popd; |
| |
| # generate a list of git checksums suitable for updating git_refs |
| freeze: repos |
| @for repo in $(OTHER_REPO_DOCS) ; do \ |
| GIT_SUBDIR=`grep "^$$repo " git_refs | awk '{print $$2}'` ;\ |
| cd "repos/$$repo" > /dev/null ;\ |
| HEAD_SHA=`git rev-parse HEAD` ;\ |
| printf "%-21s %-8s %-40s\n" $$repo $$GIT_SUBDIR $$HEAD_SHA ;\ |
| cd ../.. ;\ |
| done |
| |