name: test-build on: push: branches: - main - next paths: - admin-frontend/** - docker/** - nonebot_bison/** - tests/** - pyproject.toml - uv.lock - docker.env.prod - .github/** pull_request: paths: - admin-frontend/** - docker/** - nonebot_bison/** - tests/** - pyproject.toml - uv.lock - docker.env.prod - .github/** types: - opened - synchronize - reopened # 以上为默认情况 - labeled - unlabeled concurrency: group: ${{ github.workflow }}-${{ github.ref }} cancel-in-progress: true jobs: build-frontend: name: Build Frontend runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - name: Build Frontend uses: ./.github/actions/build-frontend - name: Upload dist uses: actions/upload-artifact@v4 with: name: frontend path: ./admin-frontend/build/ test: name: Smoke-test Coverage if: ${{ !contains(github.event.pull_request.labels.*.name, 'all-test') }} runs-on: ${{ matrix.os }} strategy: matrix: python-version: ["3.10", "3.11", "3.12"] os: [ubuntu-latest, windows-latest, macos-latest] fail-fast: false env: OS: ${{ matrix.os }} PYTHON_VERSION: ${{ matrix.python-version }} steps: - uses: actions/checkout@v4 - name: Setup Python environment uses: ./.github/actions/setup-python with: python-version: ${{ matrix.python-version }} install-deps: "true" install-playwright: "true" - name: Run Pytest run: uv run pytest --cov-report xml --cov=./nonebot_bison -k 'not compare and not render' -n auto - name: Upload coverage report uses: codecov/codecov-action@v5 with: token: ${{ secrets.CODECOV_TOKEN }} flags: smoke-test env_vars: OS,PYTHON_VERSION test-all: name: All-test Coverage if: ${{ contains(github.event.pull_request.labels.*.name, 'all-test') }} runs-on: ${{ matrix.os }} strategy: matrix: python-version: ["3.10", "3.11", "3.12"] os: [ubuntu-latest, windows-latest, macos-latest] fail-fast: false env: OS: ${{ matrix.os }} PYTHON_VERSION: ${{ matrix.python-version }} steps: - uses: actions/checkout@v4 - name: Setup Python environment uses: ./.github/actions/setup-python with: python-version: ${{ matrix.python-version }} install-deps: "true" install-playwright: "true" - name: Run Pytest run: uv run pytest --cov-report xml --cov=./nonebot_bison -k 'not compare' -n auto - name: Upload coverage report uses: codecov/codecov-action@v5 with: token: ${{ secrets.CODECOV_TOKEN }} flags: all-test env_vars: OS,PYTHON_VERSION docker-main: name: Docker main runs-on: ubuntu-latest needs: [build-frontend, test] steps: - uses: actions/checkout@v4 - name: Set up QEMU uses: docker/setup-qemu-action@v3 - name: Set up Docker Buildx uses: docker/setup-buildx-action@v3 - name: Test Build uses: docker/build-push-action@v6 if: github.event_name == 'pull_request' with: context: . file: ./docker/Dockerfile push: false load: true tags: felinae98/nonebot-bison:dummy cache-from: type=gha cache-to: type=gha,mode=max - name: Test image uses: ./.github/actions/test-docker if: github.event_name == 'pull_request' with: docker-image-name: felinae98/nonebot-bison:dummy wait-time: 10 - name: Login to DockerHub if: github.event_name != 'pull_request' uses: docker/login-action@v3 with: username: ${{ secrets.DOCKER_USERNAME }} password: ${{ secrets.DOCKER_PASSWORD }} - name: Git Branch Name id: git-branch-name uses: EthanSK/git-branch-name-action@v1 - name: Build and push uses: docker/build-push-action@v6 if: github.event_name != 'pull_request' with: context: . file: ./docker/Dockerfile push: true tags: felinae98/nonebot-bison:${{ env.GIT_BRANCH_NAME }} cache-from: type=gha cache-to: type=gha,mode=max docker-main-nobrowser: name: Docker main without browser runs-on: ubuntu-latest needs: [build-frontend, test] if: github.event_name != 'pull_request' steps: - uses: actions/checkout@v4 - name: Set up QEMU uses: docker/setup-qemu-action@v3 - name: Set up Docker Buildx uses: docker/setup-buildx-action@v3 - name: Git Branch Name id: git-branch-name uses: EthanSK/git-branch-name-action@v1 - name: Login to DockerHub if: github.event_name != 'pull_request' uses: docker/login-action@v3 with: username: ${{ secrets.DOCKER_USERNAME }} password: ${{ secrets.DOCKER_PASSWORD }} - name: Build and push uses: docker/build-push-action@v6 with: context: . file: ./docker/Dockerfile_without_browser push: ${{ github.event_name != 'pull_request' }} tags: felinae98/nonebot-bison:${{ env.GIT_BRANCH_NAME }}-nobrowser cache-from: type=gha cache-to: type=gha,mode=max