File: python-publish.yml

package info (click to toggle)
python-fluss-api 0.1.9.20-1
  • links: PTS, VCS
  • area: main
  • in suites: sid
  • size: 136 kB
  • sloc: python: 189; makefile: 2
file content (164 lines) | stat: -rw-r--r-- 5,335 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
name: Publish Python Package

on:
  push:
    tags:
       - 'v*'

env:
  PACKAGE_NAME: "fluss_api"
  OWNER: "Marcello"

jobs:
  details:
    runs-on: ubuntu-latest
    outputs:
      new_version: ${{ steps.release.outputs.new_version }}
      suffix: ${{ steps.release.outputs.suffix }}
      tag_name: ${{ steps.release.outputs.tag_name }}
    steps:
      - uses: actions/checkout@v2

      - name: Extract tag and Details
        id: release
        run: |
          if [ "${{ github.ref_type }}" = "tag" ]; then
            TAG_NAME=${GITHUB_REF#refs/tags/}
            NEW_VERSION=$(echo $TAG_NAME | awk -F'-' '{print $1}')
            SUFFIX=$(echo $TAG_NAME | grep -oP '[a-z]+[0-9]+' || echo "")
            echo "new_version=$NEW_VERSION" >> "$GITHUB_OUTPUT"
            echo "suffix=$SUFFIX" >> "$GITHUB_OUTPUT"
            echo "tag_name=$TAG_NAME" >> "$GITHUB_OUTPUT"
            echo "Version is $NEW_VERSION"
            echo "Suffix is $SUFFIX"
            echo "Tag name is $TAG_NAME"
          else
            echo "No tag found"
            exit 1
          fi

  check_pypi:
    needs: details
    runs-on: ubuntu-latest
    steps:
      - name: Fetch information from PyPI
        run: |
          response=$(curl -s https://pypi.org/pypi/${{ env.PACKAGE_NAME }}/json || echo "{}")
          latest_previous_version=$(echo $response | jq --raw-output "select(.releases != null) | .releases | keys_unsorted | last")
          if [ -z "$latest_previous_version" ]; then
            echo "Package not found on PyPI."
            latest_previous_version="0.0.0"
          fi
          echo "Latest version on PyPI: $latest_previous_version"
          echo "latest_previous_version=$latest_previous_version" >> $GITHUB_ENV

      - name: Compare versions and exit if not newer
        run: |
          NEW_VERSION=${{ needs.details.outputs.new_version }}
          LATEST_VERSION=$latest_previous_version
          if [ "$(printf '%s\n' "$LATEST_VERSION" "$NEW_VERSION" | sort -rV | head -n 1)" != "$NEW_VERSION" ] || [ "$NEW_VERSION" == "$LATEST_VERSION" ]; then
            echo "The new version $NEW_VERSION is not greater than the latest version $LATEST_VERSION on PyPI."
            exit 1
          else
            echo "The new version $NEW_VERSION is greater than the latest version $LATEST_VERSION on PyPI."
          fi

  setup_and_build:
    needs: [details, check_pypi]
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4

      - name: Set up Python
        uses: actions/setup-python@v4
        with:
          python-version: "3.12"

      - name: Install Poetry
        run: |
          curl -sSL https://install.python-poetry.org | python3 -
          echo "$HOME/.local/bin" >> $GITHUB_PATH

      - name: Set project version with Poetry
        run: |
          poetry version ${{ needs.details.outputs.new_version }}

      - name: Install dependencies
        run: poetry install --sync --no-interaction

      - name: Build source and wheel distribution
        run: |
          poetry build

      - name: Upload artifacts
        uses: actions/upload-artifact@v4
        with:
          name: dist
          path: dist/

  pypi_publish:
    name: Upload release to PyPI
    needs: [setup_and_build, details]
    runs-on: ubuntu-latest
    environment:
      name: pypi
    permissions:
      id-token: write
    steps:
      - name: Download artifacts
        uses: actions/download-artifact@v4
        with:
          name: dist
          path: dist/

      - name: Publish distribution to PyPI
        uses: pypa/gh-action-pypi-publish@release/v1

  github_release:
    name: Create GitHub Release
    needs: [setup_and_build, details]
    runs-on: ubuntu-latest
    permissions:
      contents: write
    steps:
      - name: Checkout Code
        uses: actions/checkout@v3
        with:
          fetch-depth: 0

      - name: Download artifacts
        uses: actions/download-artifact@v4
        with:
          name: dist
          path: dist/

      - name: Create GitHub Release
        id: create_release
        env:
          GH_TOKEN: ${{ github.token }}
        run: |
          gh release create ${{ needs.details.outputs.tag_name }} dist/* --title ${{ needs.details.outputs.tag_name }} --generate-notes

  # bump_homebrew_formula:
  #   name: Dispatch event to Repo B
  #   needs: [details, github_release, pypi_publish]
  #   runs-on: ubuntu-latest
  #   environment:
  #     name: pypi
  #   steps:
  #     - name: Dispatch Repository Dispatch event
  #       uses: peter-evans/repository-dispatch@v2
  #       with:
  #         token: ${{ secrets.BREW_TAP_TOKEN }}
  #         repository: ${{ env.OWNER }}/{{ env.TAP_NAME }}
  #         event-type: "update-formula"
  #         client-payload: |-
  #           { 
  #             "formula_version": "${{env.FORMULA_VERSION}}", 
  #             "formula_url": "${{ env.FORMULA_URL }}", 
  #             "formula_name": "${{ env.FORMULA_NAME }}"
  #           }
  #       env:
  #         FORMULA_VERSION: ${{ needs.details.outputs.new_version }}
  #         FORMULA_NAME: ${{ env.PACKAGE_NAME }}
  #         FORMULA_URL: https://github.com/${{env.OWNER}}/${{env.PACKAGE_NAME}}/releases/download/${{ needs.details.outputs.new_version }}/${{env.PACKAGE_NAME}}-${{ needs.details.outputs.new_version }}.tar.gz