aboutsummaryrefslogtreecommitdiff
blob: 79da0a62633a8bf5b78c98addb0fe6ca765e1377 (plain)
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
name: release

on:
  push:
    branches: [deploy]
    tags: [v*]
  workflow_dispatch:

jobs:
  build-sdist:
    runs-on: ubuntu-latest
    steps:
    - name: Checkout code
      uses: actions/checkout@v4

    - name: Set up Python 3.11
      uses: actions/setup-python@v5
      with:
        python-version: "3.11"

    - name: Install dependencies
      run: |
        python -m pip install --upgrade pip
        pip install build ".[test,doc]"

    - name: Test with pytest
      env:
        PY_COLORS: 1 # forcibly enable pytest colors
      run: pytest

    - name: Build sdist
      run: |
        git clean -fxd
        make man
        make sdist

    - name: Output dist file info
      run: |
        tar -ztf dist/*.tar.gz | sort

    - name: Upload sdist artifact
      uses: actions/upload-artifact@v4
      with:
        name: dist
        path: dist/*.tar.gz


  build-wheel:
    runs-on: ubuntu-latest
    strategy:
      fail-fast: false
      matrix:
        arch: [x86_64, aarch64]

    steps:
    - name: Checkout code
      uses: actions/checkout@v4

    - name: Set up QEMU
      uses: docker/setup-qemu-action@v3
      with:
        platforms: ${{matrix.arch}}

    - name: Build wheels
      uses: joerick/cibuildwheel@v2.16.3
      with:
        output-dir: dist
      env:
        CIBW_ARCHS_LINUX: ${{matrix.arch}}

    - name: Upload wheel artifacts
      uses: actions/upload-artifact@v4
      with:
        name: dist
        path: dist/*.whl


  deploy:
    if: startsWith(github.ref, 'refs/tags/')
    needs: ["build-sdist", "build-wheel"]
    runs-on: ubuntu-latest
    environment: release

    permissions:
      id-token: write # Used to authenticate to PyPI via OIDC

      contents: write # Used to authenticate github release publish

    steps:
    - uses: actions/download-artifact@v3
      with:
        name: dist
        path: dist
        merge-multiple: true

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

    - name: Create GitHub release
      uses: softprops/action-gh-release@v1
      with:
        files: dist/*.tar.gz
        fail_on_unmatched_files: true
        draft: true

  build-and-push-docker-image:
    if: startsWith(github.ref, 'refs/tags/')
    needs: ["deploy"]
    runs-on: ubuntu-latest
    environment: release

    permissions:
      contents: read
      packages: write

    steps:
      - name: Checkout code
        uses: actions/checkout@v4

      - name: Scrape build info
        run: echo "RELEASE_VERSION=${GITHUB_REF#refs/*/v}" >> $GITHUB_ENV

      - name: Log in to the Container registry
        uses: docker/login-action@v3
        with:
          registry: ghcr.io
          username: ${{ github.actor }}
          password: ${{ secrets.GITHUB_TOKEN }}

      - name: Docker meta
        id: meta
        uses: docker/metadata-action@v5
        with:
          images: ghcr.io/pkgcore/pkgcheck
          tags: |
            type=semver,pattern={{version}}
            type=sha

      - name: Build and push
        uses: docker/build-push-action@v5
        with:
          context: .
          push: true
          tags: ${{ steps.meta.outputs.tags }}
          labels: ${{ steps.meta.outputs.labels }}
          build-args: |
            PKGCHECK_VERSION=${{ env.RELEASE_VERSION }}