Skip to content

Commit

Permalink
[ci][add] Basic CI for checks & deployment
Browse files Browse the repository at this point in the history
  • Loading branch information
lpascal-ledger committed Oct 17, 2023
1 parent 1d195d8 commit bed2f0c
Show file tree
Hide file tree
Showing 3 changed files with 203 additions and 0 deletions.
91 changes: 91 additions & 0 deletions .github/workflows/build_and_tests.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,91 @@
name: Build, test and deploy Ragger

on:
workflow_dispatch:
push:
tags:
- '*'
branches:
- master
- develop
pull_request:
branches:
- master
- develop

jobs:
package_and_deploy:
name: Build and deploy Ledgered Python Package
runs-on: ubuntu-latest
steps:

- name: Clone
uses: actions/checkout@v3
with:
fetch-depth: 0

# Fetching dependencies from test.pypi,org or pypi.org depending on the package destination:
# tag -> pypi.org, not tag -> test.pypi.org
- name: Build Ledgered Python package
run: |
pip install --upgrade pip build twine
if [[ ${{ github.ref }} == "refs/tags/"* ]]; \
then \
python -m build; \
pip install .
else \
PIP_EXTRA_INDEX_URL=https://test.pypi.org/simple/ python -m build; \
pip install --extra-index-url https://test.pypi.org/simple/ .
fi
python -m twine check dist/*
echo "TAG_VERSION=$(python -c 'from ledgered import __version__; print(__version__)')" >> "$GITHUB_ENV"
- name: Display current status
run: |
echo "Current status is:"
if [[ ${{ github.ref }} == "refs/tags/"* ]]; \
then \
echo "- Triggered from tag, will be deployed on pypi.org"; \
else \
echo "- Not triggered from tag, will be deployed on test.pypi.org"; \
fi
echo "- Tag version: ${{ env.TAG_VERSION }}"
- name: Check version against CHANGELOG
if: startsWith(github.ref, 'refs/tags/')
run: |
CHANGELOG_VERSION=$(grep -Po '(?<=## \[)(\d+\.)+[^\]]' CHANGELOG.md | head -n 1)
if [ "${{ env.TAG_VERSION }}" == "${CHANGELOG_VERSION}" ]; \
then \
exit 0; \
else \
echo "Tag '${{ env.TAG_VERSION }}' and CHANGELOG '${CHANGELOG_VERSION}' versions mismatch!"; \
exit 1; \
fi
- name: Publish Python package on pypi.org
if: success() && github.event_name == 'push' && startsWith(github.ref, 'refs/tags/')
run: python -m twine upload dist/*
env:
TWINE_USERNAME: __token__
TWINE_PASSWORD: ${{ secrets.PYPI_PUBLIC_API_TOKEN }}
TWINE_NON_INTERACTIVE: 1

- name: Publish a release on the repo
if: success() && github.event_name == 'push' && startsWith(github.ref, 'refs/tags/')
uses: "marvinpinto/action-automatic-releases@latest"
with:
automatic_release_tag: "v${{ env.TAG_VERSION }}"
repo_token: "${{ secrets.GITHUB_TOKEN }}"
prerelease: true
files: |
LICENSE
dist/
- name: Publish Python package on test.pypi.org
if: success() && github.event_name == 'push'
run: python -m twine upload --repository testpypi dist/*
env:
TWINE_USERNAME: __token__
TWINE_PASSWORD: ${{ secrets.TEST_PYPI_PUBLIC_API_TOKEN }}
TWINE_NON_INTERACTIVE: 1
49 changes: 49 additions & 0 deletions .github/workflows/codeql-analysis.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,49 @@
name: "CodeQL"

on:
push:
branches:
- master
- develop
pull_request:
# The branches below must be a subset of the branches above
branches:
- master
- develop
schedule:
- cron: '35 0 * * 5'

jobs:
analyze:
name: Analyze
runs-on: ubuntu-latest
permissions:
actions: read
contents: read
security-events: write

strategy:
fail-fast: false

steps:
- name: Checkout repository
uses: actions/checkout@v3

# Initializes the CodeQL tools for scanning.
- name: Initialize CodeQL
uses: github/codeql-action/init@v2
with:
languages: "python"
# If you wish to specify custom queries, you can do so here or in a config file.
# By default, queries listed here will override any specified in a config file.
# Prefix the list here with "+" to use these queries and those in the config file.
# queries: ./path/to/local/query, your-org/your-repo/queries@main
queries: +security-and-quality

# Autobuild attempts to build any compiled languages (C/C++, C#, or Java).
# If this step fails, then you should remove it and run the build manually (see below)
- name: Autobuild
uses: github/codeql-action/autobuild@v2

- name: Perform CodeQL Analysis
uses: github/codeql-action/analyze@v2
63 changes: 63 additions & 0 deletions .github/workflows/fast-checks.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,63 @@
name: Fast checks

on:
workflow_dispatch:
push:
branches:
- develop
- master
pull_request:

jobs:
lint:
name: Linting
runs-on: ubuntu-latest
steps:
- name: Clone
uses: actions/checkout@v3
- run: pip install flake8
- name: Flake8 lint Python code
run: find src/ -type f -name '*.py' -exec flake8 --max-line-length=120 '{}' '+'

yapf:
name: Formatting
runs-on: ubuntu-latest
steps:
- name: Clone
uses: actions/checkout@v3
- run: pip install yapf toml
- name: Yapf source formatting
run: |
yapf src/ --recursive -d
mypy:
name: Type checking
runs-on: ubuntu-latest
steps:
- name: Clone
uses: actions/checkout@v3
- run: pip install mypy types-toml
- name: Mypy type checking
run: mypy src

bandit:
name: Security checking
runs-on: ubuntu-latest
steps:
- name: Clone
uses: actions/checkout@v3
- run: pip install bandit
- name: Bandit security checking
run: bandit -r src -ll

misspell:
name: Check misspellings
runs-on: ubuntu-latest
steps:
- name: Clone
uses: actions/checkout@v3
- name: Check misspellings
uses: codespell-project/actions-codespell@v1
with:
builtin: clear,rare
check_filenames: true

0 comments on commit bed2f0c

Please sign in to comment.