avocado-framework/avocado

View on GitHub
.github/workflows/release.yml

Summary

Maintainability
Test Coverage
# must do before using this action:
# - set up RELEASE_TOKEN in secrets of the repository avocado-framework/avocado
# - set up RTD_TOKEN in secrets to update readthedocs
# - set up two tokens for twine: PYPI_USER and PYPI_PASSWD

name: Release tests
on:
  workflow_dispatch:
    inputs:
      version:
        description: 'Release version'
        required: true
        default: '0.0'
      devel_name:
        description: 'Developer Name'
        required: true
        default: 'Avocado Developer'
      devel_mail:
        description: 'Developer mail'
        required: true
        default: 'avocado@redhat.com'
      rtd_project:
        description: 'readthedocs project name'
        required: true
        default: 'avocado-framework'

jobs:

  release:
    name: Release pipeline
    runs-on: ubuntu-latest
    container:
      image: fedora:34
    env:
      VERSION: ${{ github.event.inputs.version }}
      DEVEL_NAME: ${{ github.event.inputs.devel_name }}
      DEVEL_MAIL: ${{ github.event.inputs.devel_mail }}
      PYTHON: /usr/bin/python3
      TOKEN_RTD: ${{ secrets.RTD_TOKEN }}
      URL: "https://readthedocs.org/api/v3/projects/${{ github.event.inputs.rtd_project }}"

    steps:
      - name: Generate token
        id: generate_token
        uses: tibdex/github-app-token@021a2405c7f990db57f5eae5397423dcc554159c
        with:
          app_id: ${{ secrets.MR_AVOCADO_ID }}
          installation_id: ${{ secrets.MR_AVOCADO_INSTALLATION_ID }}
          private_key: ${{ secrets.MR_AVOCADO_PRIVATE_KEY }}
      - name: install required packages
        run:  dnf -y install rpmdevtools git python3-pip make
      - uses: actions/checkout@v4
        with:
          persist-credentials: false
          fetch-depth: 0
      - name: Update VERSION files and python-avocado.spec
        run: |
          make -f Makefile.gh propagate-version
          make -f Makefile.gh release-update-spec
      - name: Commit files and tag
        run: |
          git config --global --add safe.directory `pwd`
          git config --local user.email "${{ github.event.inputs.devel_mail }}"
          git config --local user.name "${{ github.event.inputs.devel_name }}"
          make -f Makefile.gh release-commit-tag
      - name: Push changes to github
        uses: ad-m/github-push-action@master
        with:
          github_token: ${{ steps.generate_token.outputs.token }}
          branch: ${{ github.ref }}
      - name: Build wheel
        run: make -f Makefile.gh build-wheel check-wheel
      - name: Save wheel as artifact
        uses: actions/upload-artifact@v4
        with:
          name: wheel
          path: ${{github.workspace}}/PYPI_UPLOAD/
          retention-days: 3
      - name: Build documentation readthedocs
        run: |
          make -f Makefile.gh build-update-readthedocs
      - run: echo "In a few minutes the release documentation will be available in https://${{ github.event.inputs.rtd_project }}.readthedocs.io/en/${{ github.event.inputs.version }}/"
      - name: Upload to pypi
        continue-on-error: true
        env:
          TWINE_USERNAME: ${{ secrets.PYPI_USER }}
          TWINE_PASSWORD: ${{ secrets.PYPI_PASSWD }}
        run: make -f Makefile.gh update-pypi

  build-and-publish-eggs:
    name: Build eggs and publish them
    runs-on: ubuntu-20.04
    needs: release
    strategy:
      matrix:
        python-version: [3.8.16, 3.9.16, 3.10.9, 3.11.1, 3.12.0]
      fail-fast: false

    steps:
      - uses: actions/checkout@v4
        with:
          persist-credentials: false
          fetch-depth: 0
          ref: ${{ github.event.inputs.version }}
      - name: Set up Python
        uses: actions/setup-python@v5
        with:
          python-version: ${{ matrix.python-version }}
      - name: Build eggs
        run: |
          if python -c 'import sys; exit(0) if sys.version_info.minor > 11 else exit(1)' ; then
            pip install setuptools
          fi
          make -f Makefile.gh build-egg
      - name: Upload binaries to release
        uses: svenstaro/upload-release-action@v2
        with:
          repo_token: ${{ steps.generate_token.outputs.token }}
          file: ${{ github.workspace }}/EGG_UPLOAD/avocado_framework*egg
          tag: ${{ github.event.inputs.version }}
          overwrite: true
          file_glob: true