goincrypto/cryptocom-exchange

View on GitHub
.github/workflows/test_release.yml

Summary

Maintainability
Test Coverage
---
name: Test & Release
on:
  schedule:
    - cron: "0 0 */5 * *"
  push:
    branches:
      - main
      - production
      - feature/*
      - fix/*
  pull_request:
    branches:
      - main
      - production
jobs:
  test:
    strategy:
      max-parallel: 1
      matrix:
        python-version: ['3.10.7', '3.9', '3.8', '3.7']
    runs-on: ubuntu-latest
    steps:
      - name: Download code
        uses: actions/checkout@v3
        with:
          persist-credentials: false
          fetch-depth: 0
      - name: Setup Python ${{ matrix.python-version }}
        uses: actions/setup-python@v4
        with:
          python-version: ${{ matrix.python-version }}
      - name: Download cache for pip
        uses: actions/cache@v3
        with:
          path: ~/.cache/pip
          key: py-${{ matrix.python-version }}-poetry-pip-1.2.2
          restore-keys: poetry-pip
      - name: Install poetry
        run: pip install poetry==1.2.2
      - name: Download cache for poetry
        id: poetry-install
        uses: actions/cache@v3
        with:
          path: ./.venv/
          key: py-${{ matrix.python-version }}-poetry-install-${{ hashFiles('poetry.lock') }}
          restore-keys: poetry-install
      - name: Install packages
        if: steps.poetry-install.outputs.cache-hit != 'true'
        run: rm -rf ./.venv/ && poetry install
      - name: Download cache for pre-commit
        if: matrix.python-version == '3.10.7'
        id: pre-commit-install
        uses: actions/cache@v3
        with:
          path: ~/.cache/pre-commit
          key: py-${{ matrix.python-version }}-pre-commit-install-${{ hashFiles('.pre-commit-config.yaml') }}
          restore-keys: pre-commit-install
      - name: Verify commit
        if: matrix.python-version == '3.10.7'
        run: poetry run pre-commit run -a
      - name: Auto-generate missing pairs
        run: . activate.sh && poetry run python generatestructs.py
      - name: Commit & Push changes
        if: matrix.python-version == '3.10.7' && github.ref == 'refs/heads/main'
        uses: actions-js/push@v1.3
        with:
          author_email: "morty.space@gmail.com"
          author_name: "Morty Space"
          directory: './src'
          message: "sync: updated API pairs and coins"
          github_token: ${{ secrets.GITHUB_TOKEN }}
      - name: Prepare codeclimate
        if: matrix.python-version == '3.10.7'
        run: |
          curl -L https://codeclimate.com/downloads/test-reporter/test-reporter-latest-linux-amd64 > ./cc-test-reporter
          chmod +x ./cc-test-reporter
          ./cc-test-reporter before-build
      - name: Test docs
        run: . activate.sh && cd docs && make doctest && cd ..
      - name: Test code
        timeout-minutes: 6
        run: . activate.sh && poetry run pytest -v --cov . --cov-report xml:coverage.xml
      - name: Send codeclimate analytics
        if: matrix.python-version == '3.10.7'
        run: ./cc-test-reporter after-build -r ${{ secrets.CC_TEST_REPORTER_ID }} --exit-code $?
  release:
    runs-on: ubuntu-latest
    needs: test
    if: github.ref == 'refs/heads/main'
    steps:
      - name: Setup Python
        uses: actions/setup-python@v4
        with:
          python-version: '3.10.7'
      - name: Checkout code
        uses: actions/checkout@v3
        with:
          fetch-depth: 0
      - name: Release
        env:
          GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
          REPOSITORY_USERNAME: '__token__'
          REPOSITORY_PASSWORD: ${{ secrets.REPOSITORY_PASSWORD }}
        run: |
          git fetch --all
          git reset --hard origin/main
          pip install python-semantic-release
          git config user.name github-actions
          git config user.email github-actions@github.com
          semantic-release publish