|
14 | 14 | type: boolean |
15 | 15 | publish: |
16 | 16 | required: false |
17 | | - type: string |
| 17 | + type: boolean |
| 18 | + default: false |
18 | 19 | setup: |
19 | 20 | required: false |
20 | 21 | type: string |
|
26 | 27 | if: ${{ inputs.if }} |
27 | 28 | name: stable - ${{ inputs.target }} - python@3.12 |
28 | 29 | runs-on: ${{ inputs.host }} |
| 30 | + env: |
| 31 | + PYTHON_VERSION: "3.12" |
| 32 | + MATURIN_VERSION: "v1.9.1" |
| 33 | + XWIN_VERSION: "16" |
29 | 34 | steps: |
30 | 35 | - name: Checkout |
31 | 36 | uses: actions/checkout@v4 |
|
50 | 55 | if: ${{ inputs.target == 'i686-pc-windows-msvc' }} |
51 | 56 | uses: actions/setup-python@v5 |
52 | 57 | with: |
53 | | - python-version: "3.12" |
| 58 | + python-version: ${{ env.PYTHON_VERSION }} |
54 | 59 | architecture: "x86" |
| 60 | + - name: Download ARM64 Python SDK |
| 61 | + if: ${{ inputs.target == 'aarch64-pc-windows-msvc' }} |
| 62 | + run: | |
| 63 | + curl -LO https://www.python.org/ftp/python/${{ env.PYTHON_VERSION }}.0/python-${{ env.PYTHON_VERSION }}.0-embed-arm64.zip |
| 64 | + mkdir python-arm64 |
| 65 | + tar -xf python-${{ env.PYTHON_VERSION }}.0-embed-arm64.zip -C python-arm64 |
| 66 | + - name: Set ARM64 Python environment variables |
| 67 | + if: ${{ inputs.target == 'aarch64-pc-windows-msvc' }} |
| 68 | + shell: pwsh |
| 69 | + run: | |
| 70 | + echo "PYTHONHOME=${{ github.workspace }}\python-arm64" | Out-File -FilePath $env:GITHUB_ENV -Encoding utf8 -Append |
| 71 | + echo "PYTHONPATH=${{ github.workspace }}\python-arm64" | Out-File -FilePath $env:GITHUB_ENV -Encoding utf8 -Append |
| 72 | + echo "PATH=${{ github.workspace }}\python-arm64;${env:PATH}" | Out-File -FilePath $env:GITHUB_ENV -Encoding utf8 -Append |
| 73 | +
|
55 | 74 | - name: Build and (Publish) musl for ${{ inputs.target }} |
56 | 75 | uses: addnab/docker-run-action@v3 |
57 | 76 | if: ${{ inputs.target == 'x86_64-unknown-linux-musl' || inputs.target == 'aarch64-unknown-linux-musl' }} |
|
72 | 91 |
|
73 | 92 | if [ "${SHOULD_PUBLISH}" == 'true' ]; then |
74 | 93 | echo "~~~~ maturin publishing" |
75 | | - . ./venv/bin/activate && maturin publish --no-sdist -u __token__ -p ${{ secrets.MATURIN_PASSWORD }} |
| 94 | + . ./venv/bin/activate && maturin publish --no-sdist --skip-existing -u __token__ -p ${{ secrets.MATURIN_PASSWORD }} |
76 | 95 | fi |
| 96 | +
|
77 | 97 | - name: Build and (Publish) aarch64-unknown-linux-gnu |
78 | 98 | uses: addnab/docker-run-action@v3 |
79 | 99 | if: ${{ inputs.target == 'aarch64-unknown-linux-gnu' }} |
@@ -101,7 +121,7 @@ jobs: |
101 | 121 | if [ "${SHOULD_PUBLISH}" = 'true' ]; then |
102 | 122 | echo "~~~~ maturin publishing" |
103 | 123 | # pass '--debug' to avoid optimization, which breaks tls signature validation on this platform |
104 | | - . .env/bin/activate && maturin publish --target ${{ inputs.target }} --no-sdist --debug -u __token__ -p ${{ secrets.MATURIN_PASSWORD }} |
| 124 | + . .env/bin/activate && maturin publish --target ${{ inputs.target }} --no-sdist --skip-existing --debug -u __token__ -p ${{ secrets.MATURIN_PASSWORD }} |
105 | 125 | else |
106 | 126 | echo "~~~~ maturin building" |
107 | 127 | . .env/bin/activate && maturin build --target ${{ inputs.target }} |
@@ -136,30 +156,59 @@ jobs: |
136 | 156 | if [ "${SHOULD_PUBLISH}" = 'true' ]; then |
137 | 157 | echo "~~~~ maturin publishing" |
138 | 158 | # pass '--debug' to avoid optimization, which breaks tls signature validation on this platform |
139 | | - . .env/bin/activate && maturin publish --target ${{ inputs.target }} --no-sdist --debug -u __token__ -p ${{ secrets.MATURIN_PASSWORD }} |
| 159 | + . .env/bin/activate && maturin publish --target ${{ inputs.target }} --no-sdist --skip-existing --debug -u __token__ -p ${{ secrets.MATURIN_PASSWORD }} |
140 | 160 | else |
141 | 161 | echo "~~~~ maturin building" |
142 | 162 | RUST_BACKTRACE=1 . .env/bin/activate && maturin build --target ${{ inputs.target }} --verbose |
143 | 163 | fi |
| 164 | + - name: Build and (Publish) x86_64-unknown-linux-gnu |
| 165 | + uses: addnab/docker-run-action@v3 |
| 166 | + if: ${{ inputs.target == 'x86_64-unknown-linux-gnu' }} |
| 167 | + with: |
| 168 | + image: ${{ inputs.docker }} |
| 169 | + options: '-e SHOULD_PUBLISH=${{ inputs.publish }} --user 0:0 -v ${{ github.workspace }}/.cargo-cache/git/db:/usr/local/cargo/git/db -v ${{ github.workspace }}/.cargo/registry/cache:/usr/local/cargo/registry/cache -v ${{ github.workspace }}/.cargo/registry/index:/usr/local/cargo/registry/index -v ${{ github.workspace }}:/build -w /build' |
| 170 | + run: | |
| 171 | + # Update and install required packages |
| 172 | + sudo apt-get update |
| 173 | + sudo apt-get install -y llvm-dev clang libclang-dev gcc-multilib |
| 174 | +
|
| 175 | + # Install Rust minimal toolchain |
| 176 | + curl --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y --profile minimal |
| 177 | + export PATH="$HOME/.cargo/bin:$PATH" |
| 178 | +
|
| 179 | + # Add necessary Rust targets and components |
| 180 | + rustup component add llvm-tools-preview || true |
| 181 | + rustup target add x86_64-unknown-linux-gnu |
| 182 | +
|
| 183 | + # Create and activate Python virtual environment |
| 184 | + python3 -m venv .env |
| 185 | + . .env/bin/activate && pip install -r requirements.txt |
| 186 | + . .env/bin/activate && pip install patchelf |
| 187 | +
|
| 188 | + if [ "${SHOULD_PUBLISH}" = 'true' ]; then |
| 189 | + echo "~~~~ maturin publishing" |
| 190 | + . .env/bin/activate && maturin publish --target ${{ inputs.target }} --no-sdist --skip-existing -i python3.12 -u __token__ -p ${{ secrets.MATURIN_PASSWORD }} |
| 191 | + else |
| 192 | + echo "~~~~ maturin building" |
| 193 | + . .env/bin/activate && maturin build --target ${{ inputs.target }} |
| 194 | + fi |
144 | 195 | - name: Build Python Extension Module (non-docker) |
145 | 196 | if: ${{ inputs.publish != true && !inputs.docker && !contains(inputs.target,'android') }} |
146 | 197 | uses: PyO3/maturin-action@v1 |
147 | 198 | with: |
148 | | - maturin-version: v1.6.0 |
| 199 | + maturin-version: ${{ env.MATURIN_VERSION }} |
149 | 200 | target: ${{ inputs.target }} |
150 | | - # builds in release mode with the specified python version as the interpreter and the Cargo.toml file as the manifest |
151 | | - args: --release -i python3.12 --target ${{ inputs.target }} -m Cargo.toml |
| 201 | + args: --release -i python${{ env.PYTHON_VERSION }} --target ${{ inputs.target }} -m Cargo.toml |
152 | 202 | env: |
153 | | - # see https://github.com/PyO3/maturin/issues/2110 |
154 | | - XWIN_VERSION: '16' |
| 203 | + XWIN_VERSION: ${{ env.XWIN_VERSION }} |
155 | 204 | - name: Publish to PyPI (non-docker) |
156 | 205 | if: ${{ inputs.publish == true && !inputs.docker && !contains(inputs.target,'android') }} |
157 | 206 | uses: PyO3/maturin-action@v1 |
158 | 207 | with: |
159 | 208 | command: publish |
160 | | - maturin-version: v1.6.0 |
| 209 | + maturin-version: ${{ env.MATURIN_VERSION }} |
161 | 210 | target: ${{ inputs.target }} |
162 | | - args: --no-sdist -i python3.12 -m Cargo.toml -u __token__ -p ${{ secrets.MATURIN_PASSWORD }} |
| 211 | + args: --no-sdist --skip-existing -i python${{ env.PYTHON_VERSION }} -m Cargo.toml -u __token__ -p ${{ secrets.MATURIN_PASSWORD }} |
163 | 212 | - name: Upload artifact |
164 | 213 | uses: actions/upload-artifact@v4 |
165 | 214 | with: |
|
0 commit comments