|
42 | 42 | required: true |
43 | 43 | type: boolean |
44 | 44 | default: false |
| 45 | + force_flatpak_runtime_smoke: |
| 46 | + description: Run the Flatpak routing runtime smoke even when runtime-sensitive files did not change. |
| 47 | + required: true |
| 48 | + type: boolean |
| 49 | + default: false |
45 | 50 |
|
46 | 51 | permissions: |
47 | 52 | contents: read |
@@ -99,9 +104,155 @@ jobs: |
99 | 104 | echo "::warning::publishing PyPI without creating the GitHub release uses a separate build from release assets" |
100 | 105 | fi |
101 | 106 |
|
| 107 | + runtime-risk: |
| 108 | + name: Detect runtime smoke gate |
| 109 | + needs: validate-inputs |
| 110 | + runs-on: ubuntu-24.04 |
| 111 | + |
| 112 | + outputs: |
| 113 | + required: ${{ steps.detect.outputs.required }} |
| 114 | + base_tag: ${{ steps.detect.outputs.base_tag }} |
| 115 | + |
| 116 | + steps: |
| 117 | + - name: Check out repository |
| 118 | + uses: actions/checkout@v6 |
| 119 | + with: |
| 120 | + ref: ${{ inputs.target }} |
| 121 | + fetch-depth: 0 |
| 122 | + |
| 123 | + - name: Detect runtime-sensitive changes |
| 124 | + id: detect |
| 125 | + env: |
| 126 | + CREATE_GITHUB_RELEASE: ${{ inputs.create_github_release }} |
| 127 | + DRY_RUN: ${{ inputs.dry_run }} |
| 128 | + FORCE_FLATPAK_RUNTIME_SMOKE: ${{ inputs.force_flatpak_runtime_smoke }} |
| 129 | + PUBLISH_PYPI: ${{ inputs.publish_pypi }} |
| 130 | + PUBLISH_TESTPYPI: ${{ inputs.publish_testpypi }} |
| 131 | + TAG_NAME: ${{ inputs.tag_name }} |
| 132 | + run: | |
| 133 | + set -euo pipefail |
| 134 | +
|
| 135 | + release_requested=false |
| 136 | + if { [ "$CREATE_GITHUB_RELEASE" = "true" ] || [ "$PUBLISH_TESTPYPI" = "true" ] || [ "$PUBLISH_PYPI" = "true" ]; } \ |
| 137 | + && [ "$DRY_RUN" = "false" ]; then |
| 138 | + release_requested=true |
| 139 | + fi |
| 140 | +
|
| 141 | + python3 tools/release_runtime_gate.py \ |
| 142 | + --tag "$TAG_NAME" \ |
| 143 | + --release-requested "$release_requested" \ |
| 144 | + --force "$FORCE_FLATPAK_RUNTIME_SMOKE" \ |
| 145 | + --github-output "$GITHUB_OUTPUT" \ |
| 146 | + --github-summary "$GITHUB_STEP_SUMMARY" |
| 147 | +
|
| 148 | + flatpak-runtime-smoke: |
| 149 | + name: Flatpak routing runtime smoke |
| 150 | + needs: runtime-risk |
| 151 | + if: ${{ needs['runtime-risk'].outputs.required == 'true' }} |
| 152 | + runs-on: ubuntu-24.04 |
| 153 | + timeout-minutes: 90 |
| 154 | + |
| 155 | + steps: |
| 156 | + - name: Check out repository |
| 157 | + uses: actions/checkout@v6 |
| 158 | + with: |
| 159 | + ref: ${{ inputs.target }} |
| 160 | + |
| 161 | + - name: Install Flatpak and PipeWire test dependencies |
| 162 | + run: | |
| 163 | + sudo apt-get update |
| 164 | + sudo apt-get install -y \ |
| 165 | + dbus-user-session \ |
| 166 | + flatpak \ |
| 167 | + jq \ |
| 168 | + pipewire \ |
| 169 | + pipewire-bin \ |
| 170 | + wireplumber |
| 171 | +
|
| 172 | + - name: Build and run Flatpak routing runtime smoke |
| 173 | + run: tools/run_flatpak_runtime_smoke_ci.sh |
| 174 | + |
| 175 | + runtime-gate: |
| 176 | + name: Require runtime smoke gate |
| 177 | + needs: |
| 178 | + - runtime-risk |
| 179 | + - flatpak-runtime-smoke |
| 180 | + if: ${{ always() }} |
| 181 | + runs-on: ubuntu-24.04 |
| 182 | + |
| 183 | + steps: |
| 184 | + - name: Require runtime-risk job |
| 185 | + if: ${{ needs['runtime-risk'].result != 'success' }} |
| 186 | + run: exit 1 |
| 187 | + |
| 188 | + - name: Require Flatpak routing smoke |
| 189 | + if: ${{ needs['runtime-risk'].outputs.required == 'true' && needs['flatpak-runtime-smoke'].result != 'success' }} |
| 190 | + run: | |
| 191 | + echo "::error::Flatpak routing runtime smoke is required for this release and did not pass." |
| 192 | + exit 1 |
| 193 | +
|
| 194 | + - name: Confirm runtime gate |
| 195 | + run: | |
| 196 | + if [ "${{ needs['runtime-risk'].outputs.required }}" = "true" ]; then |
| 197 | + echo "Required Flatpak routing runtime smoke passed." |
| 198 | + else |
| 199 | + echo "Flatpak routing runtime smoke was not required for this dispatch." |
| 200 | + fi |
| 201 | +
|
| 202 | + preflight: |
| 203 | + name: Release preflight |
| 204 | + needs: validate-inputs |
| 205 | + runs-on: ubuntu-24.04 |
| 206 | + timeout-minutes: 60 |
| 207 | + |
| 208 | + steps: |
| 209 | + - name: Check out repository |
| 210 | + uses: actions/checkout@v6 |
| 211 | + with: |
| 212 | + ref: ${{ inputs.target }} |
| 213 | + fetch-depth: 0 |
| 214 | + |
| 215 | + - name: Install release preflight dependencies |
| 216 | + run: | |
| 217 | + sudo apt-get update |
| 218 | + sudo apt-get install -y \ |
| 219 | + appstream \ |
| 220 | + build-essential \ |
| 221 | + dbus-user-session \ |
| 222 | + desktop-file-utils \ |
| 223 | + gir1.2-adw-1 \ |
| 224 | + gir1.2-gtk-4.0 \ |
| 225 | + git \ |
| 226 | + gnome-shell \ |
| 227 | + gobject-introspection \ |
| 228 | + libebur128-1 \ |
| 229 | + libgirepository1.0-dev \ |
| 230 | + libglib2.0-dev \ |
| 231 | + libpipewire-0.3-dev \ |
| 232 | + libspa-0.2-modules \ |
| 233 | + meson \ |
| 234 | + ninja-build \ |
| 235 | + pipewire \ |
| 236 | + pkg-config \ |
| 237 | + python3 \ |
| 238 | + python3-cairo \ |
| 239 | + python3-dev \ |
| 240 | + python3-gi \ |
| 241 | + python3-numpy \ |
| 242 | + python3-pip \ |
| 243 | + python3-setuptools \ |
| 244 | + python3-venv \ |
| 245 | + wireplumber |
| 246 | +
|
| 247 | + - name: Run release preflight |
| 248 | + run: docker/run-release-preflight.sh |
| 249 | + |
102 | 250 | build: |
103 | 251 | name: Build release artifacts |
104 | | - needs: validate-inputs |
| 252 | + needs: |
| 253 | + - validate-inputs |
| 254 | + - runtime-gate |
| 255 | + - preflight |
105 | 256 | runs-on: ubuntu-24.04 |
106 | 257 |
|
107 | 258 | steps: |
|
0 commit comments