From f3e49fdec7a7b1946bac8efe8c576f6cfc2ceecc Mon Sep 17 00:00:00 2001 From: Christian Adell Date: Wed, 15 Dec 2021 07:37:58 +0100 Subject: [PATCH] Use GHA as CI --- .github/workflows/ci.yml | 237 +++++++++++++++++++++++++++++++++++++++ .travis.yml | 37 ------ 2 files changed, 237 insertions(+), 37 deletions(-) create mode 100644 .github/workflows/ci.yml delete mode 100644 .travis.yml diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml new file mode 100644 index 0000000..663bee3 --- /dev/null +++ b/.github/workflows/ci.yml @@ -0,0 +1,237 @@ +--- +name: "CI" +on: # yamllint disable-line rule:truthy rule:comments + - "push" + - "pull_request" + +env: + IMAGE_NAME: "netcompare" + +jobs: + black: + runs-on: "ubuntu-20.04" + env: + INVOKE_LOCAL: "True" + steps: + - name: "Check out repository code" + uses: "actions/checkout@v2" + - name: "Setup environment" + uses: "networktocode/gh-action-setup-poetry-environment@v2" + - name: "Linting: black" + run: "poetry run invoke black" + bandit: + runs-on: "ubuntu-20.04" + env: + INVOKE_LOCAL: "True" + steps: + - name: "Check out repository code" + uses: "actions/checkout@v2" + - name: "Setup environment" + uses: "networktocode/gh-action-setup-poetry-environment@v2" + - name: "Linting: bandit" + run: "poetry run invoke bandit" + needs: + - "black" + pydocstyle: + runs-on: "ubuntu-20.04" + env: + INVOKE_LOCAL: "True" + steps: + - name: "Check out repository code" + uses: "actions/checkout@v2" + - name: "Setup environment" + uses: "networktocode/gh-action-setup-poetry-environment@v2" + - name: "Linting: pydocstyle" + run: "poetry run invoke pydocstyle" + needs: + - "black" + flake8: + runs-on: "ubuntu-20.04" + env: + INVOKE_LOCAL: "True" + steps: + - name: "Check out repository code" + uses: "actions/checkout@v2" + - name: "Setup environment" + uses: "networktocode/gh-action-setup-poetry-environment@v2" + - name: "Linting: flake8" + run: "poetry run invoke flake8" + needs: + - "black" + yamllint: + runs-on: "ubuntu-20.04" + env: + INVOKE_LOCAL: "True" + steps: + - name: "Check out repository code" + uses: "actions/checkout@v2" + - name: "Setup environment" + uses: "networktocode/gh-action-setup-poetry-environment@v2" + - name: "Linting: yamllint" + run: "poetry run invoke yamllint" + needs: + - "black" + build: + strategy: + fail-fast: true + matrix: + python-version: ["3.6", "3.7", "3.8", "3.9", "3.10"] + runs-on: "ubuntu-20.04" + env: + PYTHON_VER: "${{ matrix.python-version }}" + steps: + - name: "Check out repository code" + uses: "actions/checkout@v2" + - name: "Setup environment" + uses: "networktocode/gh-action-setup-poetry-environment@v2" + - name: "Get image version" + run: "echo IMAGE_VER=`poetry version -s`-py${{ matrix.python-version }} >> $GITHUB_ENV" + - name: "Set up Docker Buildx" + id: "buildx" + uses: "docker/setup-buildx-action@v1" + - name: "Build" + uses: "docker/build-push-action@v2" + with: + builder: "${{ steps.buildx.outputs.name }}" + context: "./" + push: false + tags: "${{ env.IMAGE_NAME }}:${{ env.IMAGE_VER }}" + file: "./Dockerfile" + cache-from: "type=gha,scope=${{ env.IMAGE_NAME }}-${{ env.IMAGE_VER }}-py${{ matrix.python-version }}" + cache-to: "type=gha,scope=${{ env.IMAGE_NAME }}-${{ env.IMAGE_VER }}-py${{ matrix.python-version }}" + build-args: | + PYTHON_VER=${{ env.PYTHON_VER }} + needs: + - "bandit" + - "pydocstyle" + - "flake8" + - "yamllint" + pylint: + runs-on: "ubuntu-20.04" + strategy: + fail-fast: true + matrix: + python-version: ["3.7"] + env: + PYTHON_VER: "${{ matrix.python-version }}" + steps: + - name: "Check out repository code" + uses: "actions/checkout@v2" + - name: "Setup environment" + uses: "networktocode/gh-action-setup-poetry-environment@v2" + - name: "Get image version" + run: "echo IMAGE_VER=`poetry version -s`-py${{ matrix.python-version }} >> $GITHUB_ENV" + - name: "Set up Docker Buildx" + id: "buildx" + uses: "docker/setup-buildx-action@v1" + - name: "Load the image from cache" + uses: "docker/build-push-action@v2" + with: + builder: "${{ steps.buildx.outputs.name }}" + context: "./" + push: false + load: true + tags: "${{ env.IMAGE_NAME }}:${{ env.IMAGE_VER }}" + file: "./Dockerfile" + cache-from: "type=gha,scope=${{ env.IMAGE_NAME }}-${{ env.IMAGE_VER }}-py${{ matrix.python-version }}" + cache-to: "type=gha,scope=${{ env.IMAGE_NAME }}-${{ env.IMAGE_VER }}-py${{ matrix.python-version }}" + build-args: | + PYTHON_VER=${{ env.PYTHON_VER }} + - name: "Debug: Show docker images" + run: "docker image ls" + - name: "Linting: Pylint" + run: "poetry run invoke pylint" + needs: + - "build" + pytest: + strategy: + fail-fast: true + matrix: + python-version: ["3.6", "3.7", "3.8", "3.9", "3.10"] + runs-on: "ubuntu-20.04" + env: + PYTHON_VER: "${{ matrix.python-version }}" + steps: + - name: "Check out repository code" + uses: "actions/checkout@v2" + - name: "Setup environment" + uses: "networktocode/gh-action-setup-poetry-environment@v2" + - name: "Get image version" + run: "echo IMAGE_VER=`poetry version -s`-py${{ matrix.python-version }} >> $GITHUB_ENV" + - name: "Set up Docker Buildx" + id: "buildx" + uses: "docker/setup-buildx-action@v1" + - name: "Load the image from cache" + uses: "docker/build-push-action@v2" + with: + builder: "${{ steps.buildx.outputs.name }}" + context: "./" + push: false + load: true + tags: "${{ env.IMAGE_NAME }}:${{ env.IMAGE_VER }}" + file: "./Dockerfile" + cache-from: "type=gha,scope=${{ env.IMAGE_NAME }}-${{ env.IMAGE_VER }}-py${{ matrix.python-version }}" + cache-to: "type=gha,scope=${{ env.IMAGE_NAME }}-${{ env.IMAGE_VER }}-py${{ matrix.python-version }}" + build-args: | + PYTHON_VER=${{ env.PYTHON_VER }} + - name: "Debug: Show docker images" + run: "docker image ls" + - name: "Run Tests" + run: "poetry run invoke pytest" + needs: + - "pylint" + publish_gh: + name: "Publish to GitHub" + runs-on: "ubuntu-20.04" + if: "startsWith(github.ref, 'refs/tags/v')" + steps: + - name: "Check out repository code" + uses: "actions/checkout@v2" + - name: "Set up Python" + uses: "actions/setup-python@v2" + with: + python-version: "3.9" + - name: "Install Python Packages" + run: "pip install poetry" + - name: "Set env" + run: "echo RELEASE_VERSION=${GITHUB_REF:10} >> $GITHUB_ENV" + - name: "Run Poetry Version" + run: "poetry version $RELEASE_VERSION" + - name: "Run Poetry Build" + run: "poetry build" + - name: "Upload binaries to release" + uses: "svenstaro/upload-release-action@v2" + with: + repo_token: "${{ secrets.NTC_GITHUB_TOKEN }}" + file: "dist/*" + tag: "${{ github.ref }}" + overwrite: true + file_glob: true + needs: + - "pytest" + publish_pypi: + name: "Push Package to PyPI" + runs-on: "ubuntu-20.04" + if: "startsWith(github.ref, 'refs/tags/v')" + steps: + - name: "Check out repository code" + uses: "actions/checkout@v2" + - name: "Set up Python" + uses: "actions/setup-python@v2" + with: + python-version: "3.9" + - name: "Install Python Packages" + run: "pip install poetry" + - name: "Set env" + run: "echo RELEASE_VERSION=${GITHUB_REF:10} >> $GITHUB_ENV" + - name: "Run Poetry Version" + run: "poetry version $RELEASE_VERSION" + - name: "Run Poetry Build" + run: "poetry build" + - name: "Push to PyPI" + uses: "pypa/gh-action-pypi-publish@release/v1" + with: + user: "__token__" + password: "${{ secrets.PYPI_API_TOKEN }}" + needs: + - "pytest" diff --git a/.travis.yml b/.travis.yml deleted file mode 100644 index 962f67a..0000000 --- a/.travis.yml +++ /dev/null @@ -1,37 +0,0 @@ ---- -# Add additional stages in the order of execution here, and then under the job:include: key -stages: - - "lint" - - "test" - -if: "type IN (pull_request)" # Add in "branch" as an option if desired for branch testing as well -language: "python" -services: - - "docker" - -env: - matrix: - - "PYTHON_VER=3.6" - - "PYTHON_VER=3.7" - - "PYTHON_VER=3.8" - - "PYTHON_VER=3.9" -before_script: - - "pip install invoke poetry toml" - - "invoke build --no-cache" -script: - - "invoke pytest" - -jobs: - include: - - stage: "lint" - env: - - "INVOKE_LOCAL=True" - before_script: - - "pip install invoke toml" - script: - - "invoke black" - - "invoke bandit" # Bandit fails to function on > Py3.8 https://github.com/PyCQA/bandit/issues/639 - # - "invoke pydocstyle" - - "invoke flake8" - - "invoke yamllint" - # - "invoke pylint"