Skip to content

Release/3.6.0 #249

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 28 commits into from
Apr 23, 2025
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
28 commits
Select commit Hold shift + click to select a range
a687588
Update LoopWorkspace to 3.5.0 dev Loop
ps2 Jul 13, 2024
37cb1a0
Omnipod changes
ps2 Aug 21, 2024
a32a19d
Update submodules
ps2 Aug 21, 2024
e31c438
Add branch+commit to "What to Test" field in TestFlight. (#97)
MikePlante1 Oct 5, 2024
b36318a
update actions/checkout to v4 (#118)
bastienmoulia Oct 5, 2024
ec86060
Update Gemfile.lock for Fastlane 2.223.1 (#207)
marionbarker Oct 6, 2024
ab1c67e
update Browser Build features to match main branch
marionbarker Jan 25, 2025
72b0887
update Loop: restore TestFlight expiration date
marionbarker Jan 26, 2025
0a2104b
update LibreTransmitter: add new libre 2 plus EU sensors
marionbarker Jan 25, 2025
af93582
update OmniXXX: pod improvements, protect against 0x31
marionbarker Jan 25, 2025
01d91a4
update LoopKit: improve visibility for options to select
marionbarker Jan 25, 2025
7e4fba1
update to Fastlane 2.225.0
marionbarker Jan 25, 2025
967d5ec
update using Trio (PR 453) to automate new certificates, credit @bjor…
marionbarker Jan 26, 2025
77dc12e
modify time of day for automatic run, deconflict possible nuke cert f…
marionbarker Feb 12, 2025
9f14aac
update OmniXXX: fix podSuspend logic error, incorporate tryToValidate…
marionbarker Feb 12, 2025
c13c5ce
update actions to use macos 15 and Xcode_16.2
marionbarker Mar 3, 2025
e7e54e5
update Loop: Adjust provisioning profile path in script for Xcode 16 …
marionbarker Mar 21, 2025
3d48a5c
Merge pull request #234 from loopandlearn/dev_updates_to_main_certs_f…
marionbarker Mar 21, 2025
67e91f7
Configure the version number in LoopWorkspace, not Loop (#241)
marionbarker Apr 7, 2025
a26084a
Fix typo in testflight.md build instructions (#240)
marionbarker Apr 13, 2025
30e24d0
Update to fastlane 2.227.1 and Xcode 16.3 (#243)
marionbarker Apr 14, 2025
f3021a5
update G7SensorKit: End of session detection bugfix PR 34 (#244)
marionbarker Apr 14, 2025
4cb293f
update testflight.md, loopdocs links, generic instructions (#245)
marionbarker Apr 19, 2025
898fd08
Update submodules (#246)
marionbarker Apr 19, 2025
b121942
disable keepalive-workflow because the repo is no longer available (#…
marionbarker Apr 22, 2025
c68c69b
Update to 3.6.0
marionbarker Apr 22, 2025
7753c39
Merge branch 'release/3.6.0'
marionbarker Apr 22, 2025
32cbd99
update RileyLinkKit: Add build dependencies
marionbarker Apr 22, 2025
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 1 addition & 5 deletions .github/workflows/add_identifiers.yml
Original file line number Diff line number Diff line change
Expand Up @@ -12,12 +12,8 @@ jobs:
identifiers:
name: Add Identifiers
needs: validate
runs-on: macos-14
runs-on: macos-15
steps:
# Uncomment to manually select latest Xcode if needed
#- name: Select Latest Xcode
# run: "sudo xcode-select --switch /Applications/Xcode_13.0.app/Contents/Developer"

# Checks-out the repo
- name: Checkout Repo
uses: actions/checkout@v4
Expand Down
41 changes: 24 additions & 17 deletions .github/workflows/build_loop.yml
Original file line number Diff line number Diff line change
Expand Up @@ -6,9 +6,12 @@ on:
## Remove the "#" sign from the beginning of the line below to get automated builds on push (code changes in your repository)
#push:

# Automated builds now include automatic certificate update - the nuke certs part of that process could
# affect other OS apps if run simultaneously.
# Each OS needs a time of day distinct from other apps, LoopWorkspace uses 9 every Wed and 7 every 1st of month
schedule:
- cron: "0 8 * * 3" # Checks for updates at 08:00 UTC every Wednesday
- cron: "0 6 1 * *" # Builds the app on the 1st of every month at 06:00 UTC
- cron: "0 9 * * 3" # Checks for updates at 09:00 UTC every Wednesday
- cron: "0 7 1 * *" # Builds the app on the 1st of every month at 07:00 UTC

env:
UPSTREAM_REPO: LoopKit/LoopWorkspace
Expand All @@ -18,15 +21,17 @@ env:
ALIVE_BRANCH_DEV: alive-dev

jobs:
validate:
name: Validate
uses: ./.github/workflows/validate_secrets.yml
# Checks if Distribution certificate is present and valid, optionally nukes and
# creates new certs if the repository variable ENABLE_NUKE_CERTS == 'true'
check_certs:
name: Check certificates
uses: ./.github/workflows/create_certs.yml
secrets: inherit

# Checks if GH_PAT holds workflow permissions
# Checks for existence of alive branch; if non-existent creates it
check_alive_and_permissions:
needs: validate
needs: check_certs
runs-on: ubuntu-latest
name: Check alive branch and permissions
permissions:
Expand Down Expand Up @@ -96,7 +101,7 @@ jobs:
# Checks for changes in upstream repository; if changes exist prompts sync for build
# Performs keepalive to avoid stale fork
check_latest_from_upstream:
needs: [validate, check_alive_and_permissions]
needs: [check_certs, check_alive_and_permissions]
runs-on: ubuntu-latest
name: Check upstream and keep alive
outputs:
Expand Down Expand Up @@ -166,12 +171,14 @@ jobs:

# Keep repository "alive": add empty commits to ALIVE_BRANCH after "time_elapsed" days of inactivity to avoid inactivation of scheduled workflows
- name: Keep alive
if: |
needs.check_alive_and_permissions.outputs.WORKFLOW_PERMISSION == 'true' &&
(vars.SCHEDULED_BUILD != 'false' || vars.SCHEDULED_SYNC != 'false')
uses: gautamkrishnar/keepalive-workflow@v1 # using the workflow with default settings
with:
time_elapsed: 20 # Time elapsed from the previous commit to trigger a new automated commit (in days)
run: |
echo "Keep Alive is no longer available"
# if: |
# needs.check_alive_and_permissions.outputs.WORKFLOW_PERMISSION == 'true' &&
# (vars.SCHEDULED_BUILD != 'false' || vars.SCHEDULED_SYNC != 'false')
# uses: gautamkrishnar/keepalive-workflow@v1 # using the workflow with default settings
# with:
# time_elapsed: 20 # Time elapsed from the previous commit to trigger a new automated commit (in days)

- name: Show scheduled build configuration message
if: needs.check_alive_and_permissions.outputs.WORKFLOW_PERMISSION != 'true'
Expand All @@ -185,20 +192,20 @@ jobs:
# Builds Loop
build:
name: Build
needs: [validate, check_alive_and_permissions, check_latest_from_upstream]
runs-on: macos-14
needs: [check_certs, check_alive_and_permissions, check_latest_from_upstream]
runs-on: macos-15
permissions:
contents: write
if:
| # runs if started manually, or if sync schedule is set and enabled and scheduled on the first Saturday each month, or if sync schedule is set and enabled and new commits were found
github.event_name == 'workflow_dispatch' ||
(needs.check_alive_and_permissions.outputs.WORKFLOW_PERMISSION == 'true' &&
(vars.SCHEDULED_BUILD != 'false' && github.event.schedule == '0 6 1 * *') ||
(vars.SCHEDULED_BUILD != 'false' && github.event.schedule == '0 7 1 * *') ||
(vars.SCHEDULED_SYNC != 'false' && needs.check_latest_from_upstream.outputs.NEW_COMMITS == 'true' )
)
steps:
- name: Select Xcode version
run: "sudo xcode-select --switch /Applications/Xcode_15.4.app/Contents/Developer"
run: "sudo xcode-select --switch /Applications/Xcode_16.3.app/Contents/Developer"

- name: Checkout Repo for syncing
if: |
Expand Down
105 changes: 85 additions & 20 deletions .github/workflows/create_certs.yml
Original file line number Diff line number Diff line change
@@ -1,23 +1,32 @@
name: 3. Create Certificates
run-name: Create Certificates (${{ github.ref_name }})
on:
workflow_dispatch:

on: [workflow_call, workflow_dispatch]

env:
TEAMID: ${{ secrets.TEAMID }}
GH_PAT: ${{ secrets.GH_PAT }}
GH_TOKEN: ${{ secrets.GH_PAT }}
MATCH_PASSWORD: ${{ secrets.MATCH_PASSWORD }}
FASTLANE_KEY_ID: ${{ secrets.FASTLANE_KEY_ID }}
FASTLANE_ISSUER_ID: ${{ secrets.FASTLANE_ISSUER_ID }}
FASTLANE_KEY: ${{ secrets.FASTLANE_KEY }}

jobs:
validate:
name: Validate
uses: ./.github/workflows/validate_secrets.yml
secrets: inherit

certificates:
name: Create Certificates


create_certs:
name: Certificates
needs: validate
runs-on: macos-14
runs-on: macos-15
outputs:
new_certificate_needed: ${{ steps.set_output.outputs.new_certificate_needed }}

steps:
# Uncomment to manually select latest Xcode if needed
#- name: Select Latest Xcode
# run: "sudo xcode-select --switch /Applications/Xcode_13.0.app/Contents/Developer"

# Checks-out the repo
- name: Checkout Repo
uses: actions/checkout@v4
Expand All @@ -41,13 +50,69 @@ jobs:
- name: Sync clock
run: sudo sntp -sS time.windows.com

# Create or update certificates for app
- name: Create Certificates
run: bundle exec fastlane certs
env:
TEAMID: ${{ secrets.TEAMID }}
GH_PAT: ${{ secrets.GH_PAT }}
MATCH_PASSWORD: ${{ secrets.MATCH_PASSWORD }}
FASTLANE_KEY_ID: ${{ secrets.FASTLANE_KEY_ID }}
FASTLANE_ISSUER_ID: ${{ secrets.FASTLANE_ISSUER_ID }}
FASTLANE_KEY: ${{ secrets.FASTLANE_KEY }}
# Create or update Distribution certificate and provisioning profiles
- name: Check and create or update Distribution certificate and profiles if needed
run: |
echo "Running Fastlane certs lane..."
bundle exec fastlane certs || true # ignore and continue on errors without annotating an exit code
- name: Check Distribution certificate and launch Nuke certificates if needed
run: bundle exec fastlane check_and_renew_certificates
id: check_certs

- name: Set output and annotations based on Fastlane result
id: set_output
run: |
CERT_STATUS_FILE="${{ github.workspace }}/fastlane/new_certificate_needed.txt"
ENABLE_NUKE_CERTS=${{ vars.ENABLE_NUKE_CERTS }}

if [ -f "$CERT_STATUS_FILE" ]; then
CERT_STATUS=$(cat "$CERT_STATUS_FILE" | tr -d '\n' | tr -d '\r') # Read file content and strip newlines
echo "new_certificate_needed: $CERT_STATUS"
echo "new_certificate_needed=$CERT_STATUS" >> $GITHUB_OUTPUT
else
echo "Certificate status file not found. Defaulting to false."
echo "new_certificate_needed=false" >> $GITHUB_OUTPUT
fi
# Check if ENABLE_NUKE_CERTS is not set to true when certs are valid
if [ "$CERT_STATUS" != "true" ] && [ "$ENABLE_NUKE_CERTS" != "true" ]; then
echo "::notice::🔔 Automated renewal of certificates is disabled because the repository variable ENABLE_NUKE_CERTS is not set to 'true'."
fi
# Check if ENABLE_NUKE_CERTS is not set to true when certs are not valid
if [ "$CERT_STATUS" = "true" ] && [ "$ENABLE_NUKE_CERTS" != "true" ]; then
echo "::error::❌ No valid distribution certificate found. Automated renewal of certificates was skipped because the repository variable ENABLE_NUKE_CERTS is not set to 'true'."
exit 1
fi
# Check if vars.FORCE_NUKE_CERTS is not set to true
if [ vars.FORCE_NUKE_CERTS = "true" ]; then
echo "::warning::‼️ Nuking of certificates was forced because the repository variable FORCE_NUKE_CERTS is set to 'true'."
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
needs: [validate, create_certs]
runs-on: macos-15
if: ${{ (needs.create_certs.outputs.new_certificate_needed == 'true' && vars.ENABLE_NUKE_CERTS == 'true') || vars.FORCE_NUKE_CERTS == 'true' }}
steps:
- name: Output from step id 'check_certs'
run: echo "new_certificate_needed=${{ needs.create_certs.outputs.new_certificate_needed }}"

- name: Checkout repository
uses: actions/checkout@v4

- name: Install dependencies
run: bundle install

- name: Run Fastlane nuke_certs
run: |
set -e # Set error immediately after this step if error occurs
bundle exec fastlane nuke_certs
- name: Recreate Distribution certificate after nuking
run: |
set -e # Set error immediately after this step if error occurs
bundle exec fastlane certs
- name: Add success annotations for nuke and certificate recreation
if: ${{ success() }}
run: |
echo "::warning::⚠️ All Distribution certificates and TestFlight profiles have been revoked and recreated."
echo "::warning::❗️ If you have other apps being distributed by GitHub Actions / Fastlane / TestFlight that does not renew certificates automatically, please run the '3. Create Certificates' workflow for each of these apps to allow these apps to be built."
echo "::warning::✅ But don't worry about your existing TestFlight builds, they will keep working!"
15 changes: 7 additions & 8 deletions .github/workflows/validate_secrets.yml
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ on: [workflow_call, workflow_dispatch]
jobs:
validate-access-token:
name: Access
runs-on: macos-14
runs-on: macos-15
env:
GH_PAT: ${{ secrets.GH_PAT }}
GH_TOKEN: ${{ secrets.GH_PAT }}
Expand Down Expand Up @@ -74,7 +74,7 @@ jobs:
validate-match-secrets:
name: Match-Secrets
needs: validate-access-token
runs-on: macos-14
runs-on: macos-15
env:
GH_TOKEN: ${{ secrets.GH_PAT }}
steps:
Expand Down Expand Up @@ -112,7 +112,7 @@ jobs:
validate-fastlane-secrets:
name: Fastlane
needs: [validate-access-token, validate-match-secrets]
runs-on: macos-14
runs-on: macos-15
env:
GH_PAT: ${{ secrets.GH_PAT }}
GH_TOKEN: ${{ secrets.GH_PAT }}
Expand Down Expand Up @@ -178,16 +178,15 @@ jobs:
elif ! echo "$FASTLANE_KEY" | openssl pkcs8 -nocrypt >/dev/null; then
failed=true
echo "::error::The FASTLANE_KEY secret is set but invalid. Verify that you copied it correctly from the API Key file (*.p8) you downloaded and try again."
elif ! bundle exec fastlane validate_secrets 2>&1 | tee fastlane.log; then
elif ! (bundle exec fastlane validate_secrets 2>&1 || true) | tee fastlane.log; then # ignore "fastlane validate_secrets" errors and continue on errors without annotating an exit code
if grep -q "bad decrypt" fastlane.log; then
failed=true
echo "::error::Unable to decrypt the Match-Secrets repository using the MATCH_PASSWORD secret. Verify that it is set correctly and try again."
elif grep -q -e "required agreement" -e "license agreement" fastlane.log; then
failed=true
echo "::error::Unable to create a valid authorization token for the App Store Connect API. Verify that the latest developer program license agreement has been accepted at https://developer.apple.com/account (review and accept any updated agreement), then wait a few minutes for changes to propagate and try again."
elif ! grep -q -e "No code signing identity found" -e "Could not install WWDR certificate" fastlane.log; then
failed=true
echo "::error::Unable to create a valid authorization token for the App Store Connect API. Verify that the FASTLANE_ISSUER_ID, FASTLANE_KEY_ID, and FASTLANE_KEY secrets are set correctly and try again."
echo "::error::❗️ Verify that the latest developer program license agreement has been accepted at https://developer.apple.com/account (review and accept any updated agreement), then wait a few minutes for changes to take effect and try again."
elif grep -q "Your certificate .* is not valid" fastlane.log; then
echo "::notice::Your Distribution certificate is invalid or expired. Automated renewal of the certificate will be attempted."
fi
fi

Expand Down
Loading