Skip to content

Merge branch 'JimMoen-fix-plugin-tip' into release-5.6 #584

Merge branch 'JimMoen-fix-plugin-tip' into release-5.6

Merge branch 'JimMoen-fix-plugin-tip' into release-5.6 #584

Workflow file for this run

name: Deploy Docs
concurrency:
group: ${{ github.ref }}
cancel-in-progress: true
on:
push:
tags:
- v*
- e*
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: |
current_branch=$(echo ${{ github.ref_name }})
current_version=$(echo ${{ github.ref_name }} | sed -r "s/^(.*)-.*$/\1/")
current_version=${current_version/e/v}
if [[ $current_branch == v* ]];
then
tag_list=$(git tag | egrep "^v.*$" | xargs echo -n)
docs_types='["broker"]'
else
tag_list=$(git tag | egrep "^e.*$" | xargs echo -n)
docs_types='["enterprise"]'
fi
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 ce frontend
if: matrix.docs_type == 'broker'
uses: actions/checkout@main
with:
repository: 'emqx/emqx-io-docs-frontend'
ref: next
token: ${{ secrets.CI_GIT_TOKEN }}
path: frontend
- name: clone ee frontend
if: matrix.docs_type == 'enterprise'
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
if [[ $DOCS_TYPE == "broker" ]];
then
./gen.py ce | tee directory.json
else
./gen.py ee | tee directory_ee.json
fi
- name: remove unused files
run: |
cd docs-files
if [[ $DOCS_TYPE == "broker" ]];
then
python3 .github/scripts/remove_unused.py directory.json $(pwd)
else
python3 .github/scripts/remove_unused.py directory_ee.json $(pwd)
fi
- 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 ce files
if: matrix.docs_type == 'broker'
run: |
rm frontend/docs/*.md || true
rm frontend/README.md || true
mkdir -p frontend/docs/en/${VERSION}/
mkdir -p frontend/docs/zh/${VERSION}/
mkdir -p frontend/docs/public/api/
mkdir -p frontend/redoc/
cp -r docs-files/en_US/* frontend/docs/en/${VERSION}/
cp -r docs-files/zh_CN/* frontend/docs/zh/${VERSION}/
cp -r docs-files/redocly/*.json frontend/redoc/
cp docs-files/directory.json frontend/docs/.vitepress/config/directory.json
- name: move ee files
if: matrix.docs_type == 'enterprise'
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/
cp docs-files/directory_ee.json frontend/docs/.vitepress/config/directory.json
- name: generate version config
run: |
cd docs-files
if [[ $DOCS_TYPE == "broker" ]];
then
version_list=$(git tag | egrep "^v.*$" | xargs echo -n)
else
version_list=$(git tag | egrep "^e.*$" | xargs echo -n)
fi
python3 .github/scripts/generate_version.py $version_list > ../frontend/docs/public/api/${DOCS_TYPE}_versions.json
- name: setup hocon
run: |
echo "HOCON=true" >> $GITHUB_ENV
if [[ $DOCS_TYPE == "broker" ]];
then
cp -r docs-files/hocon/ce/*.json frontend/docs/public/api/
online_versions=$(curl -s https://www.emqx.io/docs/api/broker_hocon_versions.json)
else
cp -r docs-files/hocon/ee/*.json frontend/docs/public/api/
online_versions=$(curl -s https://docs.emqx.com/api/${DOCS_TYPE}_hocon_versions.json)
fi
if [ $? -eq 0 ]; then
online_versions=$(echo $online_versions | jq -r '.'[])
else
online_versions=""
fi
local_versions=$(ls frontend/docs/public/api/hocon-*-*on | sed -E 's_.*/hocon-(.*)-(en|zh).json_\1_g' | uniq)
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/${DOCS_TYPE}_hocon_versions.json
cat frontend/docs/public/api/${DOCS_TYPE}_hocon_versions.json
- name: build docs
run: |
cd frontend
export NODE_OPTIONS=--max_old_space_size=4096
pnpm install
pnpm build
- name: build ce redoc
if: matrix.docs_type == 'broker'
run: |
cd frontend
yarn global add redoc-cli
LANGS=(zh en)
for lang in "${LANGS[@]}"; do
redoc-cli bundle redoc/ce-${lang}.json -t redoc/template.hbs \
--output docs/.vitepress/dist/${lang}/${VERSION}/admin/api-docs.html \
--options.theme.colors.primary.main=#00b173 \
--options.theme.typography.headings.fontFamily='Roboto, sans-serif' \
--options.hide-hostname --templateOptions.title "EMQX ${VERSION} API Documentation" \
--templateOptions.description "EMQX ${VERSION} API Documentation" \
--templateOptions.version "${VERSION}" \
$(if [ "${lang}" == "zh" ]; then echo "--templateOptions.langZH \"zh\""; fi)
done
- name: build ee redoc
if: matrix.docs_type == 'enterprise'
run: |
cd frontend
yarn global add redoc-cli
LANGS=(zh en)
for lang in "${LANGS[@]}"; do
redoc-cli bundle redoc/ee-${lang}.json -t redoc/template.hbs \
--output docs/.vitepress/dist/${lang}/enterprise/${VERSION}/admin/api-docs.html \
--options.theme.colors.primary.main=#5e4eff \
--options.theme.typography.headings.fontFamily='Roboto, sans-serif' \
--options.hide-hostname --templateOptions.title "EMQX Enterprise ${VERSION} API Documentation" \
--templateOptions.description "EMQX Enterprise ${VERSION} API Documentation" \
--templateOptions.version "${VERSION}" \
$(if [ "${lang}" == "zh" ]; then echo "--templateOptions.langZH \"zh\""; fi)
done
- name: upload ce files
if: matrix.docs_type == 'broker'
run: |
cd frontend/docs/.vitepress/
wget https://gosspublic.alicdn.com/ossutil/1.7.8/ossutil64
chmod 755 ./ossutil64
./ossutil64 config -e https://oss-accelerate.aliyuncs.com -i ${{ secrets.ALI_OSS_ACCESSKEY_ID }} -k ${{ secrets.ALI_OSS_ACCESSKEY_SECRET }} -L CH
./ossutil64 rm -r -f oss://emqx-io-docs/docs/zh/${VERSION}/ || true
./ossutil64 rm -r -f oss://emqx-io-docs/docs/en/${VERSION}/ || true
./ossutil64 cp -r -f dist/ oss://emqx-io-docs/docs/
- name: set aws credentials
uses: aws-actions/configure-aws-credentials@v4
if: matrix.docs_type == 'enterprise'
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 ee file to aws s3
if: matrix.docs_type == 'enterprise'
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/${DOCS_TYPE}/${VERSION}/*" "/en/${DOCS_TYPE}/${VERSION}/*" "/api/${DOCS_TYPE}_versions.json" "/sitemap_${DOCS_TYPE}_${VERSION}.xml"
- name: upload ee file to tencent cos
if: matrix.docs_type == 'enterprise'
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
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 ce cdn
if: matrix.docs_type == 'broker'
run: |
tccli cdn PurgePathCache --cli-unfold-argument --Paths https://emqxio-docs.emqx.net/ --FlushType delete
- name: flush ee cdn
if: matrix.docs_type == 'enterprise'
run: |
tccli cdn PurgePathCache --cli-unfold-argument --Paths https://docs.emqx.com/zh/${DOCS_TYPE}/${VERSION}/ https://docs.emqx.com/en/${DOCS_TYPE}/${VERSION}/ --FlushType delete
tccli cdn PurgeUrlsCache --cli-unfold-argument --Urls https://docs.emqx.com/api/${DOCS_TYPE}_versions.json https://docs.emqx.com/sitemap_${DOCS_TYPE}_${VERSION}.xml
- name: update ce search index
if: matrix.docs_type == 'broker'
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 ee search index
if: matrix.docs_type == 'enterprise'
uses: Swilder-M/docsearch-scraper-simple@next
env:
APPLICATION_ID: ${{ secrets.ALGOLIA_APPLICATION_ID_NEXT }}
API_KEY: ${{ secrets.ALGOLIA_API_KEY_NEXT }}
with:
docs_type: ${{ env.DOCS_TYPE }}
docs_version: ${{ env.VERSION }}