diff --git a/.github/workflows/add_identifiers.yml b/.github/workflows/add_identifiers.yml index 71bf56f91f..2bc22dbfb7 100644 --- a/.github/workflows/add_identifiers.yml +++ b/.github/workflows/add_identifiers.yml @@ -3,6 +3,9 @@ run-name: Add Identifiers (${{ github.ref_name }}) on: workflow_dispatch: +env: + FASTLANE_SKIP_UPDATE_CHECK: true + jobs: validate: name: Validate diff --git a/.github/workflows/build_loop.yml b/.github/workflows/build_loop.yml index 3a93a9fdc6..f0fcabcdd2 100644 --- a/.github/workflows/build_loop.yml +++ b/.github/workflows/build_loop.yml @@ -1,13 +1,18 @@ -name: 4. Build Loop Manual -run-name: Build Loop Manual (${{ github.ref_name }}) +name: 4. Build Loop +run-name: Build Loop (${{ github.ref_name }}) on: workflow_dispatch: + schedule: + # Check for updates every Sunday + # Later logic builds if there are updates or if it is the 2nd Sunday of the month + - cron: "33 7 * * 0" # Sunday at UTC 7:33 env: GH_PAT: ${{ secrets.GH_PAT }} UPSTREAM_REPO: LoopKit/LoopWorkspace UPSTREAM_BRANCH: ${{ github.ref_name }} # branch on upstream repository to sync from (replace with specific branch name if needed) TARGET_BRANCH: ${{ github.ref_name }} # target branch on fork to be kept in sync + FASTLANE_SKIP_UPDATE_CHECK: true jobs: # use a single runner for these sequential steps @@ -144,6 +149,30 @@ jobs: echo "is_second_instance=false" >> "$GITHUB_OUTPUT" fi + # When a scheduled run finds nothing new to build, cancel the run so it shows + # as "cancelled" instead of "success" — a green check should always mean a + # new build was made. + cancel_when_no_build: + needs: check_status + name: Cancel run when there is nothing to build + runs-on: ubuntu-26.04 + permissions: + actions: write + if: | + github.event_name == 'schedule' && + !(vars.SCHEDULED_BUILD != 'false' && needs.check_status.outputs.IS_SECOND_IN_MONTH == 'true') && + !(vars.SCHEDULED_SYNC != 'false' && needs.check_status.outputs.NEW_COMMITS == 'true') + steps: + - name: Cancel the run + env: + GH_TOKEN: ${{ github.token }} + run: | + echo "Repository is up to date and no monthly build is due — cancelling this run so it is not reported as a successful build." >> "$GITHUB_STEP_SUMMARY" + gh run cancel ${{ github.run_id }} --repo ${{ github.repository }} + # Keep the job alive until the cancellation lands, so the run ends as + # "cancelled" rather than completing successfully first. + sleep 300 + # Checks if Distribution certificate is present and valid, optionally nukes and # creates new certs if the repository variable ENABLE_NUKE_CERTS == 'true' # only run if a build is planned @@ -171,7 +200,7 @@ jobs: (vars.SCHEDULED_SYNC != 'false' && needs.check_status.outputs.NEW_COMMITS == 'true' ) steps: - name: Select Xcode version - run: "sudo xcode-select --switch /Applications/Xcode_27.0.app/Contents/Developer" + run: "sudo xcode-select --switch /Applications/Xcode_27.1.app/Contents/Developer" - name: Checkout Repo for building uses: actions/checkout@v5 diff --git a/.github/workflows/build_loop_auto.yml b/.github/workflows/build_loop_auto.yml index 83c12b1087..d7afdf2765 100644 --- a/.github/workflows/build_loop_auto.yml +++ b/.github/workflows/build_loop_auto.yml @@ -1,17 +1,14 @@ -name: 4. Build Loop Auto -run-name: Build Loop Auto (${{ github.ref_name }}) +name: zzz Phasing Out +run-name: Phasing Out (${{ github.ref_name }}) on: workflow_dispatch: - schedule: - # Check for updates every Sunday - # Later logic builds if there are updates or if it is the 2nd Sunday of the month - - cron: "33 7 * * 0" # Sunday at UTC 7:33 env: GH_PAT: ${{ secrets.GH_PAT }} UPSTREAM_REPO: LoopKit/LoopWorkspace UPSTREAM_BRANCH: ${{ github.ref_name }} # branch on upstream repository to sync from (replace with specific branch name if needed) TARGET_BRANCH: ${{ github.ref_name }} # target branch on fork to be kept in sync + FASTLANE_SKIP_UPDATE_CHECK: true jobs: # use a single runner for these sequential steps @@ -148,30 +145,6 @@ jobs: echo "is_second_instance=false" >> "$GITHUB_OUTPUT" fi - # When a scheduled run finds nothing new to build, cancel the run so it shows - # as "cancelled" instead of "success" — a green check should always mean a - # new build was made. - cancel_when_no_build: - needs: check_status - name: Cancel run when there is nothing to build - runs-on: ubuntu-26.04 - permissions: - actions: write - if: | - github.event_name == 'schedule' && - !(vars.SCHEDULED_BUILD != 'false' && needs.check_status.outputs.IS_SECOND_IN_MONTH == 'true') && - !(vars.SCHEDULED_SYNC != 'false' && needs.check_status.outputs.NEW_COMMITS == 'true') - steps: - - name: Cancel the run - env: - GH_TOKEN: ${{ github.token }} - run: | - echo "Repository is up to date and no monthly build is due — cancelling this run so it is not reported as a successful build." >> "$GITHUB_STEP_SUMMARY" - gh run cancel ${{ github.run_id }} --repo ${{ github.repository }} - # Keep the job alive until the cancellation lands, so the run ends as - # "cancelled" rather than completing successfully first. - sleep 300 - # Checks if Distribution certificate is present and valid, optionally nukes and # creates new certs if the repository variable ENABLE_NUKE_CERTS == 'true' # only run if a build is planned @@ -199,7 +172,7 @@ jobs: (vars.SCHEDULED_SYNC != 'false' && needs.check_status.outputs.NEW_COMMITS == 'true' ) steps: - name: Select Xcode version - run: "sudo xcode-select --switch /Applications/Xcode_27.0.app/Contents/Developer" + run: "sudo xcode-select --switch /Applications/Xcode_27.1.app/Contents/Developer" - name: Checkout Repo for building uses: actions/checkout@v5 diff --git a/.github/workflows/create_certs.yml b/.github/workflows/create_certs.yml index 9ec166f9fd..69c2f10a29 100644 --- a/.github/workflows/create_certs.yml +++ b/.github/workflows/create_certs.yml @@ -11,6 +11,7 @@ env: FASTLANE_KEY_ID: ${{ secrets.FASTLANE_KEY_ID }} FASTLANE_ISSUER_ID: ${{ secrets.FASTLANE_ISSUER_ID }} FASTLANE_KEY: ${{ secrets.FASTLANE_KEY }} + FASTLANE_SKIP_UPDATE_CHECK: true jobs: validate: @@ -52,9 +53,15 @@ jobs: # Create or update Distribution certificate and provisioning profiles - name: Check and create or update Distribution certificate and profiles if needed + id: certs run: | echo "Running Fastlane certs lane..." - bundle exec fastlane certs || true # ignore and continue on errors without annotating an exit code + # Continue on errors without annotating an exit code; set_output fails the job if no renewal follows + if bundle exec fastlane certs; then + echo "certs_failed=false" >> $GITHUB_OUTPUT + else + echo "certs_failed=true" >> $GITHUB_OUTPUT + fi - name: Check Distribution certificate and launch Nuke certificates if needed run: bundle exec fastlane check_and_renew_certificates id: check_certs @@ -87,6 +94,11 @@ jobs: if [ "$FORCE_NUKE_CERTS" = "true" ]; then echo "::warning::‼️ Nuking of certificates was forced because the repository variable FORCE_NUKE_CERTS is set to 'true'." fi + # Fail if the certificate setup failed and no renewal will replace it + if [ "${{ steps.certs.outputs.certs_failed }}" = "true" ] && [ "$CERT_STATUS" != "true" ] && [ "$FORCE_NUKE_CERTS" != "true" ]; then + echo "::error::❌ Fastlane Match could not use the Distribution certificate in your Match-Secrets repository, and automated renewal will not run because another valid certificate exists. Delete https://github.com/${{ github.repository_owner }}/Match-Secrets and run action again: https://loopkit.github.io/loopdocs/browser/bb-errors/#delete-match-secrets" + exit 1 + fi # Nuke Certs if needed, and if the repository variable ENABLE_NUKE_CERTS is set to 'true', or if FORCE_NUKE_CERTS is set to 'true', which will always force certs to be nuked nuke_certs: name: Nuke certificates diff --git a/.github/workflows/validate_secrets.yml b/.github/workflows/validate_secrets.yml index b07655d5d9..1718bcd7f8 100644 --- a/.github/workflows/validate_secrets.yml +++ b/.github/workflows/validate_secrets.yml @@ -2,6 +2,9 @@ name: 1. Validate Secrets run-name: Validate Secrets (${{ github.ref_name }}) on: [workflow_call, workflow_dispatch] +env: + FASTLANE_SKIP_UPDATE_CHECK: true + jobs: validate-access-token: name: Access diff --git a/EversenseKit b/EversenseKit index e7a1850fd2..9a3f3ec6f5 160000 --- a/EversenseKit +++ b/EversenseKit @@ -1 +1 @@ -Subproject commit e7a1850fd28665de2e61831d606abc1e4112c545 +Subproject commit 9a3f3ec6f5f707071d52d52ec1db975f0c2a390d diff --git a/G7SensorKit b/G7SensorKit index dd91f465b8..dccdcfeea9 160000 --- a/G7SensorKit +++ b/G7SensorKit @@ -1 +1 @@ -Subproject commit dd91f465b8b7392354b74463b9b9cc7aae32db9f +Subproject commit dccdcfeea988c2b542cebb3bca91418f5d5a63da diff --git a/Loop b/Loop index 7bb1749228..813f07cb18 160000 --- a/Loop +++ b/Loop @@ -1 +1 @@ -Subproject commit 7bb17492288f6a6ea76e427277e2d82661dd0a3e +Subproject commit 813f07cb18bf0d31c2dbd720b68703e454d9691e diff --git a/LoopKit b/LoopKit index 915f58309f..a7b43f4d8e 160000 --- a/LoopKit +++ b/LoopKit @@ -1 +1 @@ -Subproject commit 915f58309ff61b6def4981df09dfd96e40bc50af +Subproject commit a7b43f4d8e3cfcafe287c96303be13aff23492cd diff --git a/LoopSupport b/LoopSupport index 929bee8bd4..aad2874e31 160000 --- a/LoopSupport +++ b/LoopSupport @@ -1 +1 @@ -Subproject commit 929bee8bd484cc915fa6c303e7fdade61db34c0e +Subproject commit aad2874e31151ccaa30b5dbcc96348e1191a24e4 diff --git a/MedtrumKit b/MedtrumKit index c33699595b..043bcec5b5 160000 --- a/MedtrumKit +++ b/MedtrumKit @@ -1 +1 @@ -Subproject commit c33699595b6f636d8ca1bff377a8765df5597c34 +Subproject commit 043bcec5b5656dddcd6273a85a1b4577703c631b diff --git a/MinimedKit b/MinimedKit index a7b26858e3..cce1a492f5 160000 --- a/MinimedKit +++ b/MinimedKit @@ -1 +1 @@ -Subproject commit a7b26858e3073ac8881e7303b675c6b0f8c51ee9 +Subproject commit cce1a492f5d8e1501681b3ddf0c6383670e778fc diff --git a/OmnipodKit b/OmnipodKit index 0c6d68b00d..8df3d7bea3 160000 --- a/OmnipodKit +++ b/OmnipodKit @@ -1 +1 @@ -Subproject commit 0c6d68b00d45f4fecd9b0fc0477fc00e2d7e4c02 +Subproject commit 8df3d7bea37dead538acba735901cebd29f0f668 diff --git a/VersionOverride.xcconfig b/VersionOverride.xcconfig index 67978ed733..5addab6eb6 100644 --- a/VersionOverride.xcconfig +++ b/VersionOverride.xcconfig @@ -8,5 +8,5 @@ // Version [for DIY Loop] // configure the version number in LoopWorkspace -LOOP_MARKETING_VERSION = 3.14.11 +LOOP_MARKETING_VERSION = 3.14.12 CURRENT_PROJECT_VERSION = 57