Merge pull request #2794 from emqx/format-listener-conf #859
Workflow file for this run
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
name: Deploy Docs | |
on: | |
push: | |
tags: | |
- v* | |
pull_request: | |
jobs: | |
prepare: | |
runs-on: ubuntu-latest | |
outputs: | |
versions: ${{ steps.set_environment.outputs.versions }} | |
docs_types: ${{ steps.set_environment.outputs.docs_types }} | |
steps: | |
- uses: actions/checkout@main | |
with: | |
fetch-depth: 0 | |
- name: set_environment | |
id: set_environment | |
run: | | |
if [ "${{ github.event_name }}" = "push" ]; then | |
current_branch=$(echo ${{ github.ref_name }}) | |
current_version=$(echo ${{ github.ref_name }} | sed -r "s/^(.*)-.*$/\1/") | |
current_version=${current_version/e/v} | |
else | |
current_version=$(echo "$GITHUB_BASE_REF" | cut -d- -f 2) | |
current_version="v${current_version}" | |
fi | |
tag_list=$(git tag | egrep "^v.*$" | xargs echo -n) | |
docs_types='["emqx"]' | |
latest_version=$(python3 .github/scripts/generate_version.py $tag_list | jq -r '.[0]') | |
if [[ $current_version == $latest_version ]]; | |
then | |
build_version_list='["'latest'","'$current_version'"]' | |
else | |
build_version_list='["'$current_version'"]' | |
fi | |
echo "versions=$build_version_list" >> $GITHUB_OUTPUT | |
echo "docs_types=$docs_types" >> $GITHUB_OUTPUT | |
deploy: | |
needs: prepare | |
strategy: | |
matrix: | |
version: ${{ fromJSON(needs.prepare.outputs.versions) }} | |
docs_type: ${{ fromJSON(needs.prepare.outputs.docs_types) }} | |
runs-on: ubuntu-latest | |
steps: | |
- name: clone docs | |
uses: actions/checkout@main | |
with: | |
fetch-depth: 0 | |
path: docs-files | |
- name: set env | |
run: | | |
echo "DOCS_TYPE=${{ matrix.docs_type }}" >> $GITHUB_ENV | |
echo "DOCS_BRANCH=${{ github.ref_name }}" >> $GITHUB_ENV | |
echo "VERSION=${{ matrix.version }}" >> $GITHUB_ENV | |
- name: clone frontend | |
uses: actions/checkout@main | |
with: | |
repository: 'emqx/docs-emqx-com-frontend' | |
ref: next | |
token: ${{ secrets.CI_GIT_TOKEN }} | |
path: frontend | |
- name: use python | |
uses: actions/setup-python@v4 | |
with: | |
python-version: 3.8 | |
- name: use node.js | |
uses: actions/setup-node@v3 | |
with: | |
node-version-file: 'frontend/.nvmrc' | |
- name: use pnpm | |
uses: pnpm/action-setup@v2 | |
with: | |
version: 8 | |
- name: generate directory.json | |
run: | | |
cd docs-files | |
pip3 install pyyaml | |
./gen.py ce | tee directory.json | |
python3 .github/scripts/remove_unused.py directory.json $(pwd) | |
- name: set current emqx version | |
run: | | |
cd docs-files | |
source current-version.env | |
find ./en_US ./zh_CN -type f -name "*.md" -exec sed -i 's/@CE_VERSION@/'"$CE_VERSION"'/g' {} + | |
find ./en_US ./zh_CN -type f -name "*.md" -exec sed -i 's/@EE_VERSION@/'"$EE_VERSION"'/g' {} + | |
find ./en_US ./zh_CN -type f -name "*.md" -exec sed -i 's/@CE_MINOR_VERSION@/'"$CE_MINOR_VERSION"'/g' {} + | |
find ./en_US ./zh_CN -type f -name "*.md" -exec sed -i 's/@EE_MINOR_VERSION@/'"$EE_MINOR_VERSION"'/g' {} + | |
- name: move files | |
run: | | |
rm frontend/docs/en/index.md || true | |
rm frontend/docs/zh/index.md || true | |
rm frontend/docs/*.md || true | |
rm frontend/README.md || true | |
mkdir -p frontend/docs/en/${DOCS_TYPE}/${VERSION}/ | |
mkdir -p frontend/docs/zh/${DOCS_TYPE}/${VERSION}/ | |
mkdir -p frontend/docs/public/api/ | |
mkdir -p frontend/redoc/ | |
cp -r docs-files/en_US/* frontend/docs/en/${DOCS_TYPE}/${VERSION}/ | |
cp -r docs-files/zh_CN/* frontend/docs/zh/${DOCS_TYPE}/${VERSION}/ | |
cp -r docs-files/redocly/*.json frontend/redoc/ || true | |
cp docs-files/directory.json frontend/docs/.vitepress/config/directory.json | |
- name: generate version config | |
run: | | |
cd docs-files | |
version_list=$(git tag | egrep "^v.*$" | xargs echo -n) | |
python3 .github/scripts/generate_version.py $version_list > ../frontend/docs/public/api/${DOCS_TYPE}_versions.json | |
- name: setup hocon | |
if: matrix.version != 'latest' | |
run: | | |
echo "HOCON=true" >> $GITHUB_ENV | |
cp -r docs-files/hocon/*.json frontend/docs/public/api/ | |
hocon_products=(emqx enterprise) | |
for hocon_product in "${hocon_products[@]}"; do | |
online_versions=$(curl -s https://docs.emqx.com/api/${hocon_product}_hocon_versions.json) | |
if [ $? -eq 0 ]; then | |
online_versions=$(echo $online_versions | jq -r '.'[]) | |
else | |
online_versions="" | |
fi | |
if [[ $hocon_product == "emqx" ]]; then | |
local_versions=$(ls frontend/docs/public/api/hocon-ce-*-*on | sed -E 's_.*/hocon-ce-(.*)-(en|zh).json_\1_g' | uniq) | |
else | |
local_versions=$(ls frontend/docs/public/api/hocon-ee-*-*on | sed -E 's_.*/hocon-ee-(.*)-(en|zh).json_\1_g' | uniq) | |
fi | |
all_versions=$(echo -e "$online_versions\n$local_versions" | sort -u | awk NF | uniq) | |
all_versions=$(echo "$all_versions" | sort -rV) | |
jq -nR '[inputs]' <<< "$all_versions" > frontend/docs/public/api/${hocon_product}_hocon_versions.json | |
cat frontend/docs/public/api/${hocon_product}_hocon_versions.json | |
done | |
- name: build docs | |
run: | | |
cd frontend | |
export NODE_OPTIONS=--max_old_space_size=4096 | |
pnpm install | |
pnpm build | |
- name: build redoc | |
if: matrix.version != 'latest' | |
run: | | |
cd frontend | |
npm i -g @redocly/cli@latest | |
LANGS=(zh en) | |
for lang in "${LANGS[@]}"; do | |
redocly build-docs redoc/ce-${lang}.json -t redoc/template-emqx.hbs -o docs/.vitepress/dist/${lang}/emqx/${VERSION}/admin/api-docs.html \ | |
--config=redoc/redocly.yaml \ | |
--templateOptions.title "EMQX ${VERSION} API Documentation" \ | |
--templateOptions.description "EMQX ${VERSION} API Documentation" \ | |
--templateOptions.version "${VERSION}" \ | |
--templateOptions.headerTitle "EMQX ${VERSION} Docs" \ | |
$(if [ "${lang}" == "zh" ]; then echo "--templateOptions.langZH \"zh\""; fi) | |
redocly build-docs redoc/ee-${lang}.json -t redoc/template-emqx-enterprise.hbs -o docs/.vitepress/dist/${lang}/enterprise/${VERSION}/admin/api-docs.html \ | |
--config=redoc/redocly.yaml \ | |
--templateOptions.title "EMQX Enterprise ${VERSION} API Documentation" \ | |
--templateOptions.description "EMQX Enterprise ${VERSION} API Documentation" \ | |
--templateOptions.version "${VERSION}" \ | |
--templateOptions.headerTitle "EMQX Enterprise ${VERSION} Docs" \ | |
$(if [ "${lang}" == "zh" ]; then echo "--templateOptions.langZH \"zh\""; fi) | |
done | |
- name: set aws credentials | |
if: github.event_name == 'push' | |
uses: aws-actions/configure-aws-credentials@v4 | |
with: | |
aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }} | |
aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }} | |
aws-region: ${{ secrets.AWS_DEFAULT_REGION }} | |
- name: upload files to aws s3 | |
if: github.event_name == 'push' | |
run: | | |
aws s3 rm --recursive s3://docs-emqx-com/zh/${DOCS_TYPE}/${VERSION} || true | |
aws s3 rm --recursive s3://docs-emqx-com/en/${DOCS_TYPE}/${VERSION} || true | |
aws s3 cp --recursive frontend/docs/.vitepress/dist/ s3://docs-emqx-com/ | |
aws cloudfront create-invalidation --distribution-id ${{ secrets.AWS_DOCS_CLOUDFRONT_ID }} --paths "/zh/emqx/*" "/en/emqx/*" "/zh/enterprise/*" "/en/enterprise/*" "/api/*" "/sitemap_${DOCS_TYPE}_${VERSION}.xml" | |
- name: upload files to tencent cos | |
if: github.event_name == 'push' | |
run: | | |
pip3 install coscmd | |
coscmd config -a ${{ secrets.TENCENT_COS_ID }} -s ${{ secrets.TENCENT_COS_KEY }} -b docs-1302406139 -r ap-shanghai | |
coscmd delete -r -f en/${DOCS_TYPE}/${VERSION} || true | |
coscmd delete -r -f zh/${DOCS_TYPE}/${VERSION} || true | |
coscmd config -a ${{ secrets.TENCENT_COS_ID }} -s ${{ secrets.TENCENT_COS_KEY }} -b docs-1302406139 -e cos.accelerate.myqcloud.com | |
coscmd upload -r frontend/docs/.vitepress/dist/ / | |
- name: set tccli | |
if: github.event_name == 'push' | |
run: | | |
pip3 install tccli | |
tccli configure set secretId ${{ secrets.TENCENT_COS_ID }} | |
tccli configure set secretKey ${{ secrets.TENCENT_COS_KEY }} | |
tccli configure set region ap-shanghai | |
- name: flush cdn | |
if: github.event_name == 'push' | |
run: | | |
tccli cdn PurgePathCache --cli-unfold-argument --Paths https://docs.emqx.com/zh/emqx/ https://docs.emqx.com/en/emqx/ https://docs.emqx.com/zh/enterprise/ https://docs.emqx.com/en/enterprise/ https://docs.emqx.com/api/ --FlushType delete | |
tccli cdn PurgeUrlsCache --cli-unfold-argument --Urls https://docs.emqx.com/sitemap_${DOCS_TYPE}_${VERSION}.xml | |
- name: update ee search index | |
if: github.event_name == 'push' && matrix.docs_type == 'enterprise' | |
uses: Swilder-M/docsearch-scraper-simple@next | |
env: | |
APPLICATION_ID: ${{ secrets.ALGOLIA_APPLICATION_ID_CE }} | |
API_KEY: ${{ secrets.ALGOLIA_API_KEY_CE }} | |
with: | |
docs_type: ${{ env.DOCS_TYPE }} | |
docs_version: ${{ env.VERSION }} | |
- name: update ce search index | |
if: github.event_name == 'push' && matrix.docs_type == 'emqx' | |
uses: Swilder-M/docsearch-scraper-simple@next | |
env: | |
APPLICATION_ID: ${{ secrets.ALGOLIA_APPLICATION_ID_CE }} | |
API_KEY: ${{ secrets.ALGOLIA_API_KEY_CE }} | |
with: | |
docs_type: ${{ env.DOCS_TYPE }} | |
docs_version: ${{ env.VERSION }} |