From c42223185545b12aeb296de88462060eed092c5c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bird=20=7C=20=E7=88=B1=E9=A3=9E=E7=9A=84=E9=B8=9F?= Date: Tue, 22 Aug 2023 16:37:56 +0800 Subject: [PATCH] ci: laf doc preview during pr (#1472) Signed-off-by: Bird --- .github/workflows/doc-preview.yml | 107 ++++++++++++++++++++++++++++++ 1 file changed, 107 insertions(+) create mode 100644 .github/workflows/doc-preview.yml diff --git a/.github/workflows/doc-preview.yml b/.github/workflows/doc-preview.yml new file mode 100644 index 0000000000..d7dbb2d6b4 --- /dev/null +++ b/.github/workflows/doc-preview.yml @@ -0,0 +1,107 @@ +name: Laf Doc Preview + +# todo: When the requirements are mature enough, refactor using TypeScript, create a generic GitHub Action, and make it available to users. + +on: + pull_request: + branches: [main] + types: [opened, synchronize, reopened, closed] + paths: + - "docs/**" + - ".github/workflows/doc-preview.yml" + +permissions: + pull-requests: write + +env: + LAF_CI_DOCS_PREVIEW_PAT: ${{ secrets.LAF_CI_DOCS_PREVIEW_PAT }} + LAF_CI_DOCS_PREVIEW_APPID: ${{ secrets.LAF_CI_DOCS_PREVIEW_APPID }} + LAF_CI_DOCS_PREVIEW_API_URL: ${{ secrets.LAF_CI_DOCS_PREVIEW_API_URL }} + BUCKET_SHORT_NAME: pr-${{ github.event.pull_request.number }}-doc-preview + +jobs: + create-or-update-doc-preview: + if: github.event_name == 'pull_request' && github.event.action != 'closed' + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v3 + + - name: Build Docs + uses: ./.github/actions/build-docs + + - name: Setup laf-cli + run: npm i laf-cli -g + + - name: Login laf-cli + run: | + laf user add doc -r ${{ env.LAF_CI_DOCS_PREVIEW_API_URL }} + laf user switch doc + laf login ${{ env.LAF_CI_DOCS_PREVIEW_PAT }} + laf app init ${{ env.LAF_CI_DOCS_PREVIEW_APPID }} + + - name: Check if bucket exists + id: check-bucket + run: | + output=$(laf storage list) + + # Check if the output contains the desired text + if echo "$output" | grep -q ${{ env.BUCKET_SHORT_NAME }}; then + echo "BUCKET_EXISTS=true" >> $GITHUB_OUTPUT + else + echo "BUCKET_EXISTS=false" >> $GITHUB_OUTPUT + fi + + - name: Create bucket and create website + if: steps.check-bucket.outputs.BUCKET_EXISTS == 'false' + id: create-bucket-and-website + run: | + laf storage create ${{ env.BUCKET_SHORT_NAME }} -p readonly + output=$(laf website create ${{ env.BUCKET_SHORT_NAME }}) + last_line=$(echo "$output" | tail -n 1) + echo "website_url_message=$last_line" >> $GITHUB_OUTPUT + + - name: Deploy to laf + run: | + laf storage push -f ${{ env.BUCKET_SHORT_NAME }} docs/.vitepress/dist/ + + - uses: mshick/add-pr-comment@v2 + if: steps.check-bucket.outputs.BUCKET_EXISTS == 'false' + with: + message: | + Laf Doc Preview: + ${{ steps.create-bucket-and-website.outputs.website_url_message }} + + delete-doc-preview: + if: github.event_name == 'pull_request' && github.event.action == 'closed' + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v3 + + - name: Setup laf-cli + run: npm i laf-cli -g + + - name: Login laf-cli + run: | + laf user add doc -r ${{ env.LAF_CI_DOCS_PREVIEW_API_URL }} + laf user switch doc + laf login ${{ env.LAF_CI_DOCS_PREVIEW_PAT }} + laf app init ${{ env.LAF_CI_DOCS_PREVIEW_APPID }} + + - name: Check if bucket exists + id: check-bucket + run: | + output=$(laf storage list) + + # Check if the output contains the desired text + if echo "$output" | grep -q ${{ env.BUCKET_SHORT_NAME }}; then + echo "BUCKET_EXISTS=true" >> $GITHUB_OUTPUT + else + echo "BUCKET_EXISTS=false" >> $GITHUB_OUTPUT + fi + + - name: Delete bucket + if: steps.check-bucket.outputs.BUCKET_EXISTS == 'true' + id: delete-bucket + run: | + laf website del ${{ env.BUCKET_SHORT_NAME }} + laf storage del ${{ env.BUCKET_SHORT_NAME }}