diff options
Diffstat (limited to '.github')
-rw-r--r-- | .github/FUNDING.yml | 2 | ||||
-rw-r--r-- | .github/workflows/release.yaml | 146 | ||||
-rw-r--r-- | .github/workflows/test-binary-build.yaml | 77 | ||||
-rw-r--r-- | .github/workflows/test.yaml | 88 |
4 files changed, 313 insertions, 0 deletions
diff --git a/.github/FUNDING.yml b/.github/FUNDING.yml new file mode 100644 index 0000000..9db21e2 --- /dev/null +++ b/.github/FUNDING.yml @@ -0,0 +1,2 @@ +patreon: laixintao +custom: ["https://www.kawabangga.com/sponsor", "http://paypal.me/laixintao"] diff --git a/.github/workflows/release.yaml b/.github/workflows/release.yaml new file mode 100644 index 0000000..d8b20c1 --- /dev/null +++ b/.github/workflows/release.yaml @@ -0,0 +1,146 @@ +name: Release + +on: + push: + tags: + - v* + +jobs: + release-pypi: + name: release-pypi + runs-on: ubuntu-latest + + # FIXME + # help test shouldn't depends on this to run + services: + redis: + image: redis:5 + ports: + - 6379:6379 + options: --entrypoint redis-server + + steps: + - uses: actions/checkout@v2 + - uses: actions/setup-python@v1 + with: + python-version: 3.8 + architecture: 'x64' + - name: Cache venv + uses: actions/cache@v1 + with: + path: venv + # Look to see if there is a cache hit for the corresponding requirements file + key: ubuntu-latest-poetryenv-${{ hashFiles('poetry.lock') }} + - name: Install Dependencies + run: | + python3 -m venv venv + . venv/bin/activate + pip install -U pip + pip install poetry + poetry install + python -c "import sys; print(sys.version)" + pip list + - name: Poetry Build + run: | + . venv/bin/activate + poetry build + - name: Test Build + run: | + python3 -m venv fresh_env + . fresh_env/bin/activate + pip install dist/*.whl + + iredis -h + iredis help GET + + - name: Upload to Pypi + env: + PASSWORD: ${{ secrets.PYPI_TOKEN }} + run: | + . venv/bin/activate + poetry publish --username __token__ --password ${PASSWORD} + + release-binary: + name: Release Executable Binary. + runs-on: ubuntu-latest + + # FIXME + # help test shouldn't depends on this to run + services: + redis: + image: redis + ports: + - 6379:6379 + options: --entrypoint redis-server + + steps: + - uses: actions/checkout@v2 + - uses: actions/setup-python@v1 + with: + python-version: 3.8 + architecture: 'x64' + - name: Cache venv + uses: actions/cache@v1 + with: + path: venv + # Look to see if there is a cache hit for the corresponding requirements file + key: ubuntu-latest-poetryenv-${{ hashFiles('poetry.lock') }} + - name: Install Dependencies + run: | + python3 -m venv venv + . venv/bin/activate + pip install pip + pip install poetry + poetry install + python -c "import sys; print(sys.version)" + pip list + - name: Poetry Build + run: | + . venv/bin/activate + poetry build + - name: Test Build + run: | + python3 -m venv fresh_env + . fresh_env/bin/activate + pip install dist/*.whl + + iredis -h + iredis help GET + + - name: Executable Build + run: | + # pyoxidizer doesn't know the wheel path, and it doesn't support passing env vars + export WHEEL_PATH=`ls ./dist/iredis*.whl` + envsubst '$WHEEL_PATH' < pyoxidizer.template.bzl > pyoxidizer.bzl + pip install pyoxidizer + pyoxidizer build --release install + cd ./build/x86*/release/install + tar -zcf ../../../iredis.tar.gz lib/ iredis + cd - + + - name: Test Executable + run: | + ./build/x86*/release/install/iredis -h + ./build/x86*/release/install/iredis help GET + + - name: Create Release + id: create_release + uses: actions/create-release@v1 + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + with: + tag_name: ${{ github.ref }} + release_name: Release ${{ github.ref }} + draft: false + prerelease: false + + - name: Upload Release Asset + id: upload-release-asset + uses: actions/upload-release-asset@v1 + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + with: + upload_url: ${{ steps.create_release.outputs.upload_url }} + asset_path: ./build/iredis.tar.gz + asset_name: iredis.tar.gz + asset_content_type: application/gzip diff --git a/.github/workflows/test-binary-build.yaml b/.github/workflows/test-binary-build.yaml new file mode 100644 index 0000000..1fbcd80 --- /dev/null +++ b/.github/workflows/test-binary-build.yaml @@ -0,0 +1,77 @@ +name: Test binary build. + +on: + pull_request: + push: + branches: + - master + +jobs: + test-release-binary: + name: Test Build Executable Binary. You can download from Artifact after building. + runs-on: ubuntu-latest + + # FIXME + # help test shouldn't depends on this to run + services: + redis: + image: redis + ports: + - 6379:6379 + options: --entrypoint redis-server + + steps: + - uses: actions/checkout@v2 + - uses: actions/setup-python@v1 + with: + python-version: 3.8 + architecture: 'x64' + - name: Cache venv + uses: actions/cache@v1 + with: + path: venv + # Look to see if there is a cache hit for the corresponding requirements file + key: ubuntu-latest-poetryenv-${{ hashFiles('poetry.lock') }} + - name: Install Dependencies + run: | + python3 -m venv venv + . venv/bin/activate + pip install pip + pip install poetry + poetry install + python -c "import sys; print(sys.version)" + pip list + - name: Poetry Build + run: | + . venv/bin/activate + poetry build + - name: Test Build + run: | + python3 -m venv fresh_env + . fresh_env/bin/activate + pip install dist/*.whl + + iredis -h + iredis help GET + + - name: Executable Build + run: | + # pyoxidizer doesn't know the wheel path, and it doesn't support passing env vars + export WHEEL_PATH=`ls ./dist/iredis*.whl` + envsubst '$WHEEL_PATH' < pyoxidizer.template.bzl > pyoxidizer.bzl + pip install pyoxidizer + pyoxidizer build --release install + cd ./build/x86*/release/install + tar -zcf ../../../iredis.tar.gz lib/ iredis + cd - + + - name: Test Executable + run: | + ./build/x86*/release/install/iredis -h + ./build/x86*/release/install/iredis help GET + + - name: Upload Release Asset to Github Artifact + uses: actions/upload-artifact@v2 + with: + name: iredis-${{github.sha}}.tar.gz + path: ./build/iredis.tar.gz diff --git a/.github/workflows/test.yaml b/.github/workflows/test.yaml new file mode 100644 index 0000000..feedaa5 --- /dev/null +++ b/.github/workflows/test.yaml @@ -0,0 +1,88 @@ +name: Test + +on: + pull_request: + push: + branches: + - master + +jobs: + test: + name: Pytest + strategy: + fail-fast: false + matrix: + os: ["ubuntu-20.04"] + python: ["3.8", "3.9", "3.10", "3.11.1"] + redis: [5, 6, 7, 7.2] + runs-on: ${{ matrix.os }} + + services: + redis: + image: redis:${{ matrix.redis }} + ports: + - 6379:6379 + options: --entrypoint redis-server + + steps: + - uses: actions/checkout@v2 + - uses: actions/setup-python@v4 + with: + python-version: ${{ matrix.python }} + architecture: "x64" + - name: Cache venv + uses: actions/cache@v2 + with: + path: venv + # Look to see if there is a cache hit for the corresponding requirements file + key: + poetryenv-${{ matrix.os }}-${{ matrix.python }}-${{ + hashFiles('poetry.lock') }} + - name: Install Dependencies + run: | + python3 -m venv venv + . venv/bin/activate + pip install -U pip setuptools + pip install poetry + poetry install + python -c "import sys; print(sys.version)" + pip list + - name: Pytest + env: + REDIS_VERSION: ${{ matrix.redis }} + run: | + . venv/bin/activate + pytest + lint: + name: flake8 & black + runs-on: ubuntu-latest + + steps: + - uses: actions/checkout@v2 + - uses: codespell-project/actions-codespell@master + with: + ignore_words_list: fo,ists,oll,optin,ot,smove,tre,whe,EXAT,exat + skip: ./docs/assets/demo.svg,./iredis/data/commands.json,./iredis/data/commands/*,./tests/unittests/* + - uses: actions/setup-python@v4 + with: + python-version: 3.8 + architecture: "x64" + - name: Cache venv + uses: actions/cache@v2 + with: + path: venv + # Look to see if there is a cache hit for the corresponding requirements file + key: lintenv-v2 + - name: Install Dependencies + run: | + python3 -m venv venv + . venv/bin/activate + pip install -U pip flake8 black + - name: Flake8 test + run: | + . venv/bin/activate + flake8 . + - name: Black test + run: | + . venv/bin/activate + black --check . |