diff --git a/.github/workflows/docs-image.yml b/.github/workflows/docs-image.yml new file mode 100644 index 000000000..4d8bc26b7 --- /dev/null +++ b/.github/workflows/docs-image.yml @@ -0,0 +1,85 @@ +name: Build FastGPT docs images and copy image to docker hub +on: + workflow_dispatch: + push: + paths: + - 'docSite/**' + branches: + - 'main' + tags: + - 'v*.*.*' +jobs: + build-fastgpt-images: + runs-on: ubuntu-20.04 + steps: + - name: Checkout + uses: actions/checkout@v3 + with: + fetch-depth: 1 + - name: Set up QEMU (optional) + uses: docker/setup-qemu-action@v2 + - name: Set up Docker Buildx + uses: docker/setup-buildx-action@v2 + with: + driver-opts: network=host + - name: Cache Docker layers + uses: actions/cache@v2 + with: + path: /tmp/.buildx-cache + key: ${{ runner.os }}-buildx-${{ github.sha }} + restore-keys: | + ${{ runner.os }}-buildx- + - name: Login to GitHub Container Registry + uses: docker/login-action@v2 + with: + registry: ghcr.io + username: ${{ github.repository_owner }} + password: ${{ secrets.GH_PAT }} + - name: Set DOCKER_REPO_TAGGED based on branch or tag + run: | + if [[ "${{ github.ref_name }}" == "main" ]]; then + echo "DOCKER_REPO_TAGGED=ghcr.io/${{ github.repository_owner }}/fastgpt-docs:latest" >> $GITHUB_ENV + else + echo "DOCKER_REPO_TAGGED=ghcr.io/${{ github.repository_owner }}/fastgpt-docs:${{ github.ref_name }}" >> $GITHUB_ENV + fi + - name: Build and publish image for main branch or tag push event + env: + DOCKER_REPO_TAGGED: ${{ env.DOCKER_REPO_TAGGED }} + run: | + docker buildx build \ + --build-arg name=app \ + --platform linux/amd64,linux/arm64 \ + --label "org.opencontainers.image.source= https://github.com/ ${{ github.repository_owner }}/FastGPT" \ + --label "org.opencontainers.image.description=fastgpt image" \ + --label "org.opencontainers.image.licenses=Apache" \ + --push \ + --cache-from=type=local,src=/tmp/.buildx-cache \ + --cache-to=type=local,dest=/tmp/.buildx-cache \ + -t ${DOCKER_REPO_TAGGED} \ + -f docSite/Dockerfile \ + . + push-to-docker-hub: + needs: build-fastgpt-images + runs-on: ubuntu-20.04 + if: github.repository == 'labring/FastGPT' + steps: + - name: Checkout code + uses: actions/checkout@v3 + - name: Login to Docker Hub + uses: docker/login-action@v2 + with: + username: ${{ secrets.DOCKER_HUB_NAME }} + password: ${{ secrets.DOCKER_HUB_PASSWORD }} + - name: Set DOCKER_REPO_TAGGED based on branch or tag + run: | + if [[ "${{ github.ref_name }}" == "main" ]]; then + echo "IMAGE_TAG=latest" >> $GITHUB_ENV + else + echo "IMAGE_TAG=${{ github.ref_name }}" >> $GITHUB_ENV + fi + - name: Pull image from GitHub Container Registry + run: docker pull ghcr.io/${{ github.repository_owner }}/fastgpt-docs:${{env.IMAGE_TAG}} + - name: Tag image with Docker Hub repository name and version tag + run: docker tag ghcr.io/${{ github.repository_owner }}/fastgpt-docs:${{env.IMAGE_TAG}} ${{ secrets.DOCKER_IMAGE_NAME }}:${{env.IMAGE_TAG}} + - name: Push image to Docker Hub + run: docker push ${{ secrets.DOCKER_IMAGE_NAME }}:${{env.IMAGE_TAG}} \ No newline at end of file diff --git a/docSite/Dockerfile b/docSite/Dockerfile new file mode 100644 index 000000000..ca7417d64 --- /dev/null +++ b/docSite/Dockerfile @@ -0,0 +1,12 @@ +FROM hugomods/hugo:0.117.0 AS builder + +WORKDIR /app + +ADD ./docSite hugo +RUN cd /app/hugo && hugo mod get -u github.com/colinwilson/lotusdocs && hugo -v --minify + +FROM fholzer/nginx-brotli:latest + +LABEL org.opencontainers.image.source https://github.com/labring/FastGPT + +COPY --from=builder /app/hugo/public /usr/share/nginx/html \ No newline at end of file