Build and deploy to server #18286
This file contains hidden or 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: Build and deploy to server | |
on: | |
push: | |
branches: ["master"] | |
paths-ignore: | |
- ".github/**" | |
- ".docs/**" | |
workflow_dispatch: | |
inputs: | |
hash: | |
description: "Docs Staging Hash" | |
type: string | |
default: main | |
required: true | |
fallback: | |
description: "Fallback by hash" | |
type: boolean | |
default: false | |
required: false | |
nocache: | |
description: "Build without cache" | |
type: boolean | |
default: false | |
required: false | |
concurrency: ci-prod | |
jobs: | |
build: | |
runs-on: ubuntu-latest | |
name: Build website | |
steps: | |
- name: Check disk usage | |
run: df -h | |
- name: Remove unused Docker images | |
run: docker system prune -af | |
- uses: actions/checkout@v3 | |
with: | |
ref: "master" | |
- uses: actions/setup-node@v3 | |
with: | |
node-version: 16 | |
cache: "yarn" | |
- name: Update submodule | |
id: submodule | |
run: | | |
git submodule init | |
git submodule update --remote | |
cd docs | |
git checkout main | |
cd .. | |
echo "submodule_sha=$(git submodule status | awk '{print $1}' | sed -r 's/[+-]+//g')" >> $GITHUB_OUTPUT | |
echo "submodule_status=$(git submodule status)" >> $GITHUB_OUTPUT | |
echo "git_sha=$(git rev-parse HEAD)" >> $GITHUB_OUTPUT | |
echo "build_date=$(date)" >> $GITHUB_OUTPUT | |
- name: Install deps | |
run: yarn | |
- name: Calc gatsby cache key | |
id: calc-cache-key | |
run: | | |
if ${{ !!inputs.fallback }} | |
then | |
echo "key=${{ inputs.hash }}" >> $GITHUB_OUTPUT | |
else | |
echo "key=${{ steps.submodule.outputs.submodule_sha }}" >> $GITHUB_OUTPUT | |
fi | |
- name: Restore gatsby cache | |
uses: actions/cache@v3 | |
id: gatsby-cache | |
with: | |
path: | | |
.cache | |
public | |
key: ${{ runner.os }}-gatsby-cache-docs-staging-${{ steps.calc-cache-key.outputs.key }} | |
restore-keys: | | |
${{ runner.os }}-gatsby-cache-docs-staging- | |
- name: Clean up temporary files | |
run: | | |
sudo rm -rf /tmp/* | |
sudo rm -rf /home/runner/work/_temp/* | |
- name: Clean cache | |
if: ${{ inputs.nocache }} | |
run: | | |
yarn clean | |
- name: Build website | |
if: ${{ !inputs.fallback || (steps.gatsby-cache.outputs.cache-hit != 'true') }} | |
env: | |
CI: true | |
GATSBY_ALGOLIA_APPLICATION_ID: ${{ secrets.ALGOLIA_APPLICATION_ID }} | |
GATSBY_ALGOLIA_API_KEY: ${{ secrets.ALGOLIA_API_KEY }} | |
GATSBY_DOC_BUILD_DATE: ${{ steps.submodule.outputs.build_date }} | |
GATSBY_DOC_BUILD_GIT_SHA: ${{ steps.submodule.outputs.git_sha }} | |
GATSBY_DOC_BUILD_SUBMODULE_SHA: ${{ steps.submodule.outputs.submodule_status }} | |
GATSBY_SENTRY_DSN: ${{ secrets.SENTRY_DSN }} | |
run: | | |
yarn build | |
- name: Check output | |
id: check-output | |
run: | | |
sudo apt install tree | |
tree public | |
- name: Install coscli | |
run: | | |
wget https://cosbrowser.cloud.tencent.com/software/coscli/coscli-linux-amd64 | |
mv coscli-linux-amd64 coscli | |
chmod 755 coscli | |
- name: Deploy to COS | |
run: | | |
./coscli sync public/ cos://${{ secrets.TENCENTCLOUD_BUCKET_ID }} \ | |
--init-skip \ | |
--recursive \ | |
--routines 16 \ | |
--secret-id ${{ secrets.TENCENTCLOUD_SECRET_ID }} \ | |
--secret-key ${{ secrets.TENCENTCLOUD_SECRET_KEY }} \ | |
--endpoint cos.na-ashburn.myqcloud.com \ | |
--delete \ | |
--exclude ".*\.(md|txt)$" \ | |
--force | |
- name: Deploy md to COS | |
run: | | |
./coscli sync public/ cos://${{ secrets.TENCENTCLOUD_BUCKET_ID }} \ | |
--init-skip \ | |
--recursive \ | |
--routines 16 \ | |
--secret-id ${{ secrets.TENCENTCLOUD_SECRET_ID }} \ | |
--secret-key ${{ secrets.TENCENTCLOUD_SECRET_KEY }} \ | |
--endpoint cos.na-ashburn.myqcloud.com \ | |
--include ".*\.(md|txt)$" \ | |
--meta "Content-Type:text/plain; charset=utf-8" \ | |
--force | |
cdn-refresh: | |
needs: build | |
runs-on: ubuntu-latest | |
name: Refresh CDN Cache | |
env: | |
TENCENTCLOUD_SECRET_ID: ${{ secrets.TENCENTCLOUD_SECRET_ID }} | |
TENCENTCLOUD_SECRET_KEY: ${{ secrets.TENCENTCLOUD_SECRET_KEY }} | |
steps: | |
- name: Checkout repository | |
uses: actions/checkout@v4 | |
- name: Set up Python environment | |
uses: actions/setup-python@v5 | |
with: | |
python-version: "3.12" | |
architecture: "x64" | |
- name: Install Tencent Cloud CLI | |
run: pipx install tccli | |
- name: Purge production CDN cache | |
run: tccli cdn PurgePathCache --Paths '["https://docs.pingcap.com/"]' --FlushType flush |