From 059af8d1a7009490b5fdad439e27e8c703097128 Mon Sep 17 00:00:00 2001 From: Adam Hopkins Date: Tue, 11 Jan 2022 21:14:14 +0200 Subject: [PATCH] Add workflows --- .github/workflows/codeql-analysis.yml | 40 ++++++++++++++++++++++ .github/workflows/coverage.yml | 37 +++++++++++++++++++++ .github/workflows/on-demand.yml | 39 ++++++++++++++++++++++ .github/workflows/pr-bandit.yml | 36 ++++++++++++++++++++ .github/workflows/pr-docs.yml | 32 ++++++++++++++++++ .github/workflows/pr-linter.yml | 33 ++++++++++++++++++ .github/workflows/pr-python-pypy.yml | 41 +++++++++++++++++++++++ .github/workflows/pr-python310.yml | 47 ++++++++++++++++++++++++++ .github/workflows/pr-python37.yml | 35 +++++++++++++++++++ .github/workflows/pr-python38.yml | 35 +++++++++++++++++++ .github/workflows/pr-python39.yml | 47 ++++++++++++++++++++++++++ .github/workflows/pr-type-check.yml | 36 ++++++++++++++++++++ .github/workflows/pr-windows.yml | 38 +++++++++++++++++++++ .github/workflows/publish-images.yml | 48 +++++++++++++++++++++++++++ .github/workflows/publish-package.yml | 28 ++++++++++++++++ 15 files changed, 572 insertions(+) create mode 100644 .github/workflows/codeql-analysis.yml create mode 100644 .github/workflows/coverage.yml create mode 100644 .github/workflows/on-demand.yml create mode 100644 .github/workflows/pr-bandit.yml create mode 100644 .github/workflows/pr-docs.yml create mode 100644 .github/workflows/pr-linter.yml create mode 100644 .github/workflows/pr-python-pypy.yml create mode 100644 .github/workflows/pr-python310.yml create mode 100644 .github/workflows/pr-python37.yml create mode 100644 .github/workflows/pr-python38.yml create mode 100644 .github/workflows/pr-python39.yml create mode 100644 .github/workflows/pr-type-check.yml create mode 100644 .github/workflows/pr-windows.yml create mode 100644 .github/workflows/publish-images.yml create mode 100644 .github/workflows/publish-package.yml diff --git a/.github/workflows/codeql-analysis.yml b/.github/workflows/codeql-analysis.yml new file mode 100644 index 0000000000..1113fa80f9 --- /dev/null +++ b/.github/workflows/codeql-analysis.yml @@ -0,0 +1,40 @@ +name: "CodeQL" + +on: + push: + branches: + - main + - "*LTS" + pull_request: + branches: + - main + - "*LTS" + types: [opened, synchronize, reopened, ready_for_review] + schedule: + - cron: '25 16 * * 0' + +jobs: + analyze: + if: github.event.pull_request.draft == false + name: Analyze + runs-on: ubuntu-latest + + strategy: + fail-fast: false + matrix: + language: [ 'python' ] + + steps: + - name: Checkout repository + uses: actions/checkout@v2 + + - name: Initialize CodeQL + uses: github/codeql-action/init@v1 + with: + languages: ${{ matrix.language }} + + - name: Autobuild + uses: github/codeql-action/autobuild@v1 + + - name: Perform CodeQL Analysis + uses: github/codeql-action/analyze@v1 diff --git a/.github/workflows/coverage.yml b/.github/workflows/coverage.yml new file mode 100644 index 0000000000..9b5834fa13 --- /dev/null +++ b/.github/workflows/coverage.yml @@ -0,0 +1,37 @@ +name: Coverage check +on: + push: + branches: + - main + - "*LTS" + tags: + - "!*" # Do not execute on tags + pull_request: + types: [opened, synchronize, reopened, ready_for_review] +jobs: + test: + if: github.event.pull_request.draft == false + runs-on: ${{ matrix.os }} + strategy: + matrix: + python-version: [3.9] + os: [ubuntu-latest] + fail-fast: false + + steps: + - uses: actions/checkout@v2 + + - uses: actions/setup-python@v1 + with: + python-version: ${{ matrix.python-version }} + + - name: Install dependencies 🔨 + run: | + python -m pip install --upgrade pip + pip install tox + - uses: paambaati/codeclimate-action@v2.5.3 + if: always() + env: + CC_TEST_REPORTER_ID: ${{ secrets.CODECLIMATE }} + with: + coverageCommand: tox -e coverage diff --git a/.github/workflows/on-demand.yml b/.github/workflows/on-demand.yml new file mode 100644 index 0000000000..1aa721f366 --- /dev/null +++ b/.github/workflows/on-demand.yml @@ -0,0 +1,39 @@ +name: On Demand Task +on: + workflow_dispatch: + inputs: + python-version: + description: 'Version of Python to use for running Test' + required: false + default: "3.8" + tox-env: + description: 'Test Environment to Run' + required: true + default: '' + os: + description: 'Operating System to Run Test on' + required: false + default: ubuntu-latest +jobs: + onDemand: + name: tox-${{ matrix.config.tox-env }}-on-${{ matrix.os }} + runs-on: ${{ matrix.os }} + strategy: + fail-fast: false + matrix: + os: ["${{ github.event.inputs.os}}"] + config: + - { tox-env: "${{ github.event.inputs.tox-env }}", py-version: "${{ github.event.inputs.python-version }}"} + steps: + - name: Checkout Repository + uses: actions/checkout@v2 + + - name: Run tests + uses: harshanarayana/custom-actions@main + with: + python-version: ${{ matrix.config.py-version }} + test-infra-tool: tox + test-infra-version: latest + action: tests + test-additional-args: "-e=${{ matrix.config.tox-env }}" + experimental-ignore-error: "yes" diff --git a/.github/workflows/pr-bandit.yml b/.github/workflows/pr-bandit.yml new file mode 100644 index 0000000000..2bd702041b --- /dev/null +++ b/.github/workflows/pr-bandit.yml @@ -0,0 +1,36 @@ +name: Security Analysis +on: + pull_request: + branches: + - main + - "*LTS" + types: [opened, synchronize, reopened, ready_for_review] + +jobs: + bandit: + if: github.event.pull_request.draft == false + name: type-check-${{ matrix.config.python-version }} + runs-on: ${{ matrix.os }} + strategy: + fail-fast: false + matrix: + os: [ubuntu-latest] + config: + - { python-version: 3.7, tox-env: security} + - { python-version: 3.8, tox-env: security} + - { python-version: 3.9, tox-env: security} + - { python-version: "3.10", tox-env: security} + steps: + - name: Checkout the repository + uses: actions/checkout@v2 + id: checkout-branch + + - name: Run Linter Checks + id: linter-check + uses: harshanarayana/custom-actions@main + with: + python-version: ${{ matrix.config.python-version }} + test-infra-tool: tox + test-infra-version: latest + action: tests + test-additional-args: "-e=${{ matrix.config.tox-env }}" diff --git a/.github/workflows/pr-docs.yml b/.github/workflows/pr-docs.yml new file mode 100644 index 0000000000..8479aef547 --- /dev/null +++ b/.github/workflows/pr-docs.yml @@ -0,0 +1,32 @@ +name: Document Linter +on: + pull_request: + branches: + - main + - "*LTS" + types: [opened, synchronize, reopened, ready_for_review] + +jobs: + docsLinter: + if: github.event.pull_request.draft == false + name: Lint Documentation + runs-on: ubuntu-latest + strategy: + matrix: + config: + - {python-version: "3.8", tox-env: "docs"} + fail-fast: false + + + steps: + - name: Checkout repository + uses: actions/checkout@v2 + + - name: Run Document Linter + uses: harshanarayana/custom-actions@main + with: + python-version: ${{ matrix.config.python-version }} + test-infra-tool: tox + test-infra-version: latest + action: tests + test-additional-args: "-e=${{ matrix.config.tox-env }}" diff --git a/.github/workflows/pr-linter.yml b/.github/workflows/pr-linter.yml new file mode 100644 index 0000000000..11ad9d296e --- /dev/null +++ b/.github/workflows/pr-linter.yml @@ -0,0 +1,33 @@ +name: Linter Checks +on: + pull_request: + branches: + - main + - "*LTS" + types: [opened, synchronize, reopened, ready_for_review] + +jobs: + linter: + if: github.event.pull_request.draft == false + name: lint + runs-on: ${{ matrix.os }} + strategy: + fail-fast: false + matrix: + os: [ubuntu-latest] + config: + - { python-version: 3.8, tox-env: lint} + steps: + - name: Checkout the repository + uses: actions/checkout@v2 + id: checkout-branch + + - name: Run Linter Checks + id: linter-check + uses: harshanarayana/custom-actions@main + with: + python-version: ${{ matrix.config.python-version }} + test-infra-tool: tox + test-infra-version: latest + action: tests + test-additional-args: "-e=${{ matrix.config.tox-env }}" diff --git a/.github/workflows/pr-python-pypy.yml b/.github/workflows/pr-python-pypy.yml new file mode 100644 index 0000000000..c1a6c7cf79 --- /dev/null +++ b/.github/workflows/pr-python-pypy.yml @@ -0,0 +1,41 @@ +name: Python PyPy Tests +on: + workflow_dispatch: + inputs: + tox-env: + description: "Tox Env to run on the PyPy Infra" + required: false + default: "pypy37" + pypy-version: + description: "Version of PyPy to use" + required: false + default: "pypy-3.7" +jobs: + testPyPy: + name: ut-${{ matrix.config.tox-env }}-${{ matrix.os }} + runs-on: ${{ matrix.os }} + strategy: + fail-fast: false + matrix: + # os: [ubuntu-latest, macos-latest] + os: [ubuntu-latest] + config: + - { + python-version: "${{ github.event.inputs.pypy-version }}", + tox-env: "${{ github.event.inputs.tox-env }}", + } + steps: + - name: Checkout the Repository + uses: actions/checkout@v2 + id: checkout-branch + + - name: Run Unit Tests + uses: harshanarayana/custom-actions@main + with: + python-version: ${{ matrix.config.python-version }} + test-infra-tool: tox + test-infra-version: latest + action: tests + test-additional-args: "-e=${{ matrix.config.tox-env }}" + experimental-ignore-error: "true" + command-timeout: "600000" diff --git a/.github/workflows/pr-python310.yml b/.github/workflows/pr-python310.yml new file mode 100644 index 0000000000..5e66deec18 --- /dev/null +++ b/.github/workflows/pr-python310.yml @@ -0,0 +1,47 @@ +name: Python 3.10 Tests +on: + pull_request: + branches: + - main + - "*LTS" + types: [opened, synchronize, reopened, ready_for_review] + +jobs: + testPy310: + if: github.event.pull_request.draft == false + name: ut-${{ matrix.config.tox-env }}-${{ matrix.os }} + runs-on: ${{ matrix.os }} + strategy: + fail-fast: false + matrix: + # os: [ubuntu-latest, macos-latest] + os: [ubuntu-latest] + config: + - { + python-version: "3.10", + tox-env: py310, + ignore-error-flake: "false", + command-timeout: "0", + } + - { + python-version: "3.10", + tox-env: py310-no-ext, + ignore-error-flake: "true", + command-timeout: "600000", + } + steps: + - name: Checkout the Repository + uses: actions/checkout@v2 + id: checkout-branch + + - name: Run Unit Tests + uses: harshanarayana/custom-actions@main + with: + python-version: ${{ matrix.config.python-version }} + test-infra-tool: tox + test-infra-version: latest + action: tests + test-additional-args: "-e=${{ matrix.config.tox-env }},-vv=''" + experimental-ignore-error: "${{ matrix.config.ignore-error-flake }}" + command-timeout: "${{ matrix.config.command-timeout }}" + test-failure-retry: "3" diff --git a/.github/workflows/pr-python37.yml b/.github/workflows/pr-python37.yml new file mode 100644 index 0000000000..c0051d3372 --- /dev/null +++ b/.github/workflows/pr-python37.yml @@ -0,0 +1,35 @@ +name: Python 3.7 Tests +on: + pull_request: + branches: + - main + - "*LTS" + types: [opened, synchronize, reopened, ready_for_review] + +jobs: + testPy37: + if: github.event.pull_request.draft == false + name: ut-${{ matrix.config.tox-env }}-${{ matrix.os }} + runs-on: ${{ matrix.os }} + strategy: + fail-fast: true + matrix: + # os: [ubuntu-latest, macos-latest] + os: [ubuntu-latest] + config: + - { python-version: 3.7, tox-env: py37 } + - { python-version: 3.7, tox-env: py37-no-ext } + steps: + - name: Checkout the Repository + uses: actions/checkout@v2 + id: checkout-branch + + - name: Run Unit Tests + uses: harshanarayana/custom-actions@main + with: + python-version: ${{ matrix.config.python-version }} + test-infra-tool: tox + test-infra-version: latest + action: tests + test-additional-args: "-e=${{ matrix.config.tox-env }}" + test-failure-retry: "3" diff --git a/.github/workflows/pr-python38.yml b/.github/workflows/pr-python38.yml new file mode 100644 index 0000000000..09e93f3ff5 --- /dev/null +++ b/.github/workflows/pr-python38.yml @@ -0,0 +1,35 @@ +name: Python 3.8 Tests +on: + pull_request: + branches: + - main + - "*LTS" + types: [opened, synchronize, reopened, ready_for_review] + +jobs: + testPy38: + if: github.event.pull_request.draft == false + name: ut-${{ matrix.config.tox-env }}-${{ matrix.os }} + runs-on: ${{ matrix.os }} + strategy: + fail-fast: true + matrix: + # os: [ubuntu-latest, macos-latest] + os: [ubuntu-latest] + config: + - { python-version: 3.8, tox-env: py38 } + - { python-version: 3.8, tox-env: py38-no-ext } + steps: + - name: Checkout the Repository + uses: actions/checkout@v2 + id: checkout-branch + + - name: Run Unit Tests + uses: harshanarayana/custom-actions@main + with: + python-version: ${{ matrix.config.python-version }} + test-infra-tool: tox + test-infra-version: latest + action: tests + test-additional-args: "-e=${{ matrix.config.tox-env }}" + test-failure-retry: "3" diff --git a/.github/workflows/pr-python39.yml b/.github/workflows/pr-python39.yml new file mode 100644 index 0000000000..ff4794598e --- /dev/null +++ b/.github/workflows/pr-python39.yml @@ -0,0 +1,47 @@ +name: Python 3.9 Tests +on: + pull_request: + branches: + - main + - "*LTS" + types: [opened, synchronize, reopened, ready_for_review] + +jobs: + testPy39: + if: github.event.pull_request.draft == false + name: ut-${{ matrix.config.tox-env }}-${{ matrix.os }} + runs-on: ${{ matrix.os }} + strategy: + fail-fast: true + matrix: + # os: [ubuntu-latest, macos-latest] + os: [ubuntu-latest] + config: + - { + python-version: 3.9, + tox-env: py39, + ignore-error-flake: "false", + command-timeout: "0", + } + - { + python-version: 3.9, + tox-env: py39-no-ext, + ignore-error-flake: "true", + command-timeout: "600000", + } + steps: + - name: Checkout the Repository + uses: actions/checkout@v2 + id: checkout-branch + + - name: Run Unit Tests + uses: harshanarayana/custom-actions@main + with: + python-version: ${{ matrix.config.python-version }} + test-infra-tool: tox + test-infra-version: latest + action: tests + test-additional-args: "-e=${{ matrix.config.tox-env }},-vv=''" + experimental-ignore-error: "${{ matrix.config.ignore-error-flake }}" + command-timeout: "${{ matrix.config.command-timeout }}" + test-failure-retry: "3" diff --git a/.github/workflows/pr-type-check.yml b/.github/workflows/pr-type-check.yml new file mode 100644 index 0000000000..58a90ee3fc --- /dev/null +++ b/.github/workflows/pr-type-check.yml @@ -0,0 +1,36 @@ +name: Typing Checks +on: + pull_request: + branches: + - main + - "*LTS" + types: [opened, synchronize, reopened, ready_for_review] + +jobs: + typeChecking: + if: github.event.pull_request.draft == false + name: type-check-${{ matrix.config.python-version }} + runs-on: ${{ matrix.os }} + strategy: + fail-fast: false + matrix: + os: [ubuntu-latest] + config: + # - { python-version: 3.7, tox-env: type-checking} + - { python-version: 3.8, tox-env: type-checking} + - { python-version: 3.9, tox-env: type-checking} + - { python-version: "3.10", tox-env: type-checking} + steps: + - name: Checkout the repository + uses: actions/checkout@v2 + id: checkout-branch + + - name: Run Linter Checks + id: linter-check + uses: harshanarayana/custom-actions@main + with: + python-version: ${{ matrix.config.python-version }} + test-infra-tool: tox + test-infra-version: latest + action: tests + test-additional-args: "-e=${{ matrix.config.tox-env }}" diff --git a/.github/workflows/pr-windows.yml b/.github/workflows/pr-windows.yml new file mode 100644 index 0000000000..050ee2bbef --- /dev/null +++ b/.github/workflows/pr-windows.yml @@ -0,0 +1,38 @@ +name: Run Unit Tests on Windows +on: + pull_request: + branches: + - main + - "*LTS" + types: [opened, synchronize, reopened, ready_for_review] + +jobs: + testsOnWindows: + if: github.event.pull_request.draft == false + name: ut-${{ matrix.config.tox-env }} + runs-on: windows-latest + strategy: + fail-fast: false + matrix: + config: + - { python-version: 3.7, tox-env: py37-no-ext } + - { python-version: 3.8, tox-env: py38-no-ext } + - { python-version: 3.9, tox-env: py39-no-ext } + - { python-version: "3.10", tox-env: py310-no-ext } + - { python-version: pypy-3.7, tox-env: pypy37-no-ext } + + steps: + - name: Checkout Repository + uses: actions/checkout@v2 + + - name: Run Unit Tests + uses: ahopkins/custom-actions@pip-extra-args + with: + python-version: ${{ matrix.config.python-version }} + test-infra-tool: tox + test-infra-version: latest + action: tests + test-additional-args: "-e=${{ matrix.config.tox-env }}" + experimental-ignore-error: "true" + command-timeout: "600000" + pip-extra-args: "--user" diff --git a/.github/workflows/publish-images.yml b/.github/workflows/publish-images.yml new file mode 100644 index 0000000000..621f34a009 --- /dev/null +++ b/.github/workflows/publish-images.yml @@ -0,0 +1,48 @@ +name: Publish Docker Images +on: + workflow_run: + workflows: + - 'Publish Artifacts' + types: + - completed + +jobs: + publishDockerImages: + name: Docker Image Build [${{ matrix.python-version }}] + runs-on: ubuntu-latest + + strategy: + fail-fast: true + matrix: + python-version: ["3.7", "3.8", "3.9", "3.10"] + + steps: + - name: Checkout repository + uses: actions/checkout@v2 + + - name: Build Latest Base images for ${{ matrix.python-version }} + uses: harshanarayana/custom-actions@main + with: + docker-image-base-name: sanicframework/sanic-build + ignore-python-setup: 'true' + dockerfile-base-dir: './docker' + action: 'image-publish' + docker-image-tag: "${{ matrix.python-version }}" + docker-file-suffix: "base" + docker-build-args: "PYTHON_VERSION=${{ matrix.python-version }}" + registry-auth-user: ${{ secrets.DOCKER_ACCESS_USER }} + registry-auth-password: ${{ secrets.DOCKER_ACCESS_TOKEN }} + push-images: 'true' + + - name: Publish Sanic Docker Image for ${{ matrix.python-version }} + uses: harshanarayana/custom-actions@main + with: + docker-image-base-name: sanicframework/sanic + ignore-python-setup: 'true' + dockerfile-base-dir: './docker' + action: 'image-publish' + docker-build-args: "BASE_IMAGE_TAG=${{ matrix.python-version }}" + docker-image-prefix: "${{ matrix.python-version }}" + registry-auth-user: ${{ secrets.DOCKER_ACCESS_USER }} + registry-auth-password: ${{ secrets.DOCKER_ACCESS_TOKEN }} + push-images: 'true' diff --git a/.github/workflows/publish-package.yml b/.github/workflows/publish-package.yml new file mode 100644 index 0000000000..faa3b7e6dd --- /dev/null +++ b/.github/workflows/publish-package.yml @@ -0,0 +1,28 @@ +name: Publish Artifacts +on: + release: + types: [created] + +jobs: + publishPythonPackage: + name: Publishing Sanic Release Artifacts + runs-on: ubuntu-latest + + strategy: + fail-fast: true + matrix: + python-version: ["3.8"] + + steps: + - name: Checkout Repository + uses: actions/checkout@v2 + + - name: Publish Python Package + uses: harshanarayana/custom-actions@main + with: + python-version: ${{ matrix.python-version }} + package-infra-name: "twine" + pypi-user: __token__ + pypi-access-token: ${{ secrets.PYPI_ACCESS_TOKEN }} + action: "package-publish" + pypi-verify-metadata: "true"