env, ci: add better CI diagnosis via is_manageable/0 for when sdkmanager is broken
#630
Workflow file for this run
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| name: Build APK/AAB CI | |
| on: | |
| push: | |
| paths-ignore: | |
| - "**.md" | |
| pull_request: | |
| paths-ignore: | |
| - "**.md" | |
| concurrency: | |
| group: ${{ github.workflow }}-${{ github.ref == 'refs/heads/master' && github.sha || github.ref }} | |
| cancel-in-progress: true | |
| jobs: | |
| apk-and-aab: | |
| runs-on: ${{ matrix.os }} | |
| strategy: | |
| matrix: | |
| os: [ubuntu-24.04] | |
| java-version: [11,15,20] | |
| android-api: [31, 33] | |
| fail-fast: false | |
| timeout-minutes: 20 | |
| env: | |
| VAB_FLAGS: -v 3 --build-tools 29.0.0 | |
| steps: | |
| - uses: actions/setup-java@v4 | |
| with: | |
| distribution: 'adopt' | |
| java-version: ${{ matrix.java-version }} | |
| - name: Checkout V | |
| uses: actions/checkout@v4 | |
| with: | |
| repository: vlang/v | |
| - name: Build local v | |
| run: make -j2 | |
| - name: Checkout vab | |
| uses: actions/checkout@v4 | |
| with: | |
| path: vab | |
| - name: Simulate "v install vab" | |
| run: mv vab ~/.vmodules | |
| - name: Build vab | |
| run: ./v -g ~/.vmodules/vab | |
| - name: Symlink vab | |
| run: sudo ln -s ~/.vmodules/vab/vab /usr/local/bin/vab | |
| - name: Run vab --help | |
| run: vab --help | |
| - name: Run 'vab doctor' before install | |
| run: vab doctor | |
| # It is a sisyphus task to get all combinations of the pre-installed SDK / tools and Java working | |
| # so we simply remove the system install and use our own minimal base-setup via 'vab install auto'... | |
| - name: Setup predictable Android environment | |
| run: | | |
| sudo rm -fr /usr/local/lib/android # location of pre-installed SDK on Ubuntu | |
| unset ANDROID_SDK_ROOT # These are set in the CI by default | |
| unset ANDROID_HOME | |
| unset ANDROID_NDK_ROOT | |
| vab install auto | |
| - name: Run 'vab doctor' after install | |
| run: vab doctor | |
| - name: Run tests | |
| run: ./v test ~/.vmodules/vab | |
| # AAB | |
| - name: Install AAB dependencies | |
| run: | | |
| vab install bundletool | |
| vab install aapt2 | |
| - name: Run vab install build-tools | |
| run: vab install "build-tools;29.0.0" | |
| - name: Run 'vab doctor' after build-tools install | |
| run: vab doctor | |
| - name: Build examples as APK + AAB (Java ${{ matrix.java-version }}) ${{ matrix.android-api }} | |
| run: | | |
| declare -a v_examples=('flappylearning' '2048' 'fireworks' 'tetris' 'sokol/particles' 'sokol/drawing.v' 'sokol/freetype_raven.v' 'gg/polygons.v' 'gg/raven_text_rendering.v' 'gg/rectangles.v' 'gg/stars.v' 'gg/worker_thread.v') | |
| for example in "${v_examples[@]}"; do | |
| package_id=$( echo "$example" | sed 's%/%%' | sed 's%\.%%' ) | |
| package_id=$( echo "v$package_id" ) | |
| # Setup env | |
| mkdir -p java-${{ matrix.java-version }}/$example | |
| # APK | |
| vab --package-id "io.v.apk.$package_id" --api ${{ matrix.android-api }} "examples/$example" -o java-${{ matrix.java-version }}/$example/$package_id.apk | |
| [ -f java-${{ matrix.java-version }}/$example/$package_id.apk ] | |
| # AAB | |
| vab --package-id "io.v.aab.$package_id" --api ${{ matrix.android-api }} "examples/$example" -o java-${{ matrix.java-version }}/$example/$package_id.aab | |
| # Checks output inferring | |
| [ -f java-${{ matrix.java-version }}/$example/$package_id.aab ] | |
| done | |
| gc-disabled: | |
| runs-on: ${{ matrix.os }} | |
| strategy: | |
| matrix: | |
| os: [ubuntu-24.04] | |
| java-version: [11, 15, 20] | |
| android-api: [31, 33] | |
| fail-fast: false | |
| timeout-minutes: 20 | |
| env: | |
| VAB_FLAGS: -v 3 -gc none | |
| steps: | |
| - uses: actions/setup-java@v4 | |
| with: | |
| distribution: 'adopt' | |
| java-version: ${{ matrix.java-version }} | |
| - name: Checkout V | |
| uses: actions/checkout@v4 | |
| with: | |
| repository: vlang/v | |
| - name: Build local v | |
| run: make -j2 | |
| - name: Checkout vab | |
| uses: actions/checkout@v4 | |
| with: | |
| path: vab | |
| - name: Simulate "v install vab" | |
| run: mv vab ~/.vmodules | |
| - name: Build vab | |
| run: ./v -g ~/.vmodules/vab | |
| - name: Symlink vab | |
| run: sudo ln -s ~/.vmodules/vab/vab /usr/local/bin/vab | |
| - name: Run vab --help | |
| run: vab --help | |
| - name: Run vab doctor | |
| run: vab doctor | |
| - name: Run tests | |
| run: ./v test ~/.vmodules/vab | |
| - name: Build examples with garbage collector (Java ${{ matrix.java-version }}) ${{ matrix.android-api }} | |
| run: | | |
| declare -a v_examples=('flappylearning' '2048' 'fireworks' 'tetris' 'sokol/particles' 'sokol/drawing.v' 'sokol/freetype_raven.v' 'gg/polygons.v' 'gg/raven_text_rendering.v' 'gg/rectangles.v' 'gg/stars.v' 'gg/worker_thread.v') | |
| for example in "${v_examples[@]}"; do | |
| package_id=$( echo "$example" | sed 's%/%%' | sed 's%\.%%' ) | |
| package_id=$( echo "vgc$package_id" ) | |
| # Setup env | |
| mkdir -p gc-java-${{ matrix.java-version }}/$example | |
| # APK | |
| vab -gc boehm --package-id "io.v.apk.$package_id" --api ${{ matrix.android-api }} "examples/$example" -o gc-java-${{ matrix.java-version }}/$example/$package_id.apk | |
| done | |
| legacy-as-apk-and-aab: | |
| runs-on: ${{ matrix.os }} | |
| strategy: | |
| matrix: | |
| os: [ubuntu-24.04] | |
| java-version: [8] # 9, 10 is in a bad state currently | |
| android-api: [31, 33] | |
| fail-fast: false | |
| timeout-minutes: 20 | |
| env: | |
| VAB_FLAGS: -v 3 | |
| steps: | |
| - uses: actions/setup-java@v4 | |
| with: | |
| distribution: 'adopt' | |
| java-version: ${{ matrix.java-version }} | |
| - name: Checkout V | |
| uses: actions/checkout@v4 | |
| with: | |
| repository: vlang/v | |
| - name: Build local v | |
| run: make -j2 | |
| - name: Checkout vab | |
| uses: actions/checkout@v4 | |
| with: | |
| path: vab | |
| - name: Simulate "v install vab" | |
| run: mv vab ~/.vmodules | |
| - name: Build vab | |
| run: ./v -g ~/.vmodules/vab | |
| - name: Symlink vab | |
| run: sudo ln -s ~/.vmodules/vab/vab /usr/local/bin/vab | |
| - name: Run vab --help | |
| run: vab --help | |
| - name: Ruin Android environment on purpose | |
| run: | | |
| sudo rm -fr /usr/local/lib/android | |
| - name: Run 'vab doctor' before install | |
| run: vab doctor | |
| - name: Run 'vab install auto' | |
| run: | | |
| unset ANDROID_SDK_ROOT # These are set in the CI by default | |
| unset ANDROID_HOME | |
| unset ANDROID_NDK_ROOT | |
| vab install auto | |
| - name: Run 'vab doctor' after install | |
| run: vab doctor | |
| - name: Run tests | |
| run: ./v test ~/.vmodules/vab | |
| # AAB | |
| - name: Install AAB dependencies | |
| run: | | |
| vab install bundletool | |
| vab install aapt2 | |
| - name: Build examples as APK + AAB (Java ${{ matrix.java-version }}) ${{ matrix.android-api }} | |
| run: | | |
| declare -a v_examples=('flappylearning' '2048' 'fireworks' 'tetris' 'sokol/particles' 'sokol/drawing.v' 'sokol/freetype_raven.v' 'gg/polygons.v' 'gg/raven_text_rendering.v' 'gg/rectangles.v' 'gg/stars.v' 'gg/worker_thread.v') | |
| for example in "${v_examples[@]}"; do | |
| package_id=$( echo "$example" | sed 's%/%%' | sed 's%\.%%' ) | |
| package_id=$( echo "v$package_id" ) | |
| # Setup env | |
| mkdir -p java-${{ matrix.java-version }}/$example | |
| # APK | |
| vab --package-id "io.v.apk.$package_id" --api ${{ matrix.android-api }} "examples/$example" -o java-${{ matrix.java-version }}/$example/$package_id.apk | |
| [ -f java-${{ matrix.java-version }}/$example/$package_id.apk ] | |
| # AAB | |
| vab --package-id "io.v.aab.$package_id" --api ${{ matrix.android-api }} "examples/$example" -o java-${{ matrix.java-version }}/$example/$package_id.aab | |
| # Checks output inferring | |
| [ -f java-${{ matrix.java-version }}/$example/$package_id.aab ] | |
| done |