diff --git a/.github/workflows/build-submit-android.yml b/.github/workflows/build-submit-android.yml new file mode 100644 index 00000000..051e9515 --- /dev/null +++ b/.github/workflows/build-submit-android.yml @@ -0,0 +1,61 @@ +--- +name: Build and Submit Android + +on: + workflow_dispatch: + inputs: + profile: + type: choice + description: Build profile to use + options: + - production + +jobs: + build: + name: Build and Submit Android + runs-on: ubuntu-latest + steps: + - name: Check for EXPO_TOKEN + run: > + if [ -z "${{ secrets.EXPO_TOKEN }}" ]; then + echo "You must provide an EXPO_TOKEN secret linked to this project's Expo account in this repo's secrets. Learn more: https://docs.expo.dev/eas-update/github-actions" + exit 1 + fi + + - name: ā¬‡ļø Checkout + uses: actions/checkout@v4 + + - name: šŸ”§ Setup Node + uses: actions/setup-node@v3 + with: + node-version: 18.x + cache: yarn + + - name: šŸ”Ø Setup EAS + uses: expo/expo-github-action@v8 + with: + expo-version: latest + eas-version: latest + token: ${{ secrets.EXPO_TOKEN }} + + - name: ā›ļø Setup EAS local builds + run: yarn global add eas-cli-local-build-plugin + + - uses: actions/setup-java@v4 + with: + distribution: 'temurin' + java-version: '17' + + - name: āš™ļø Install dependencies + run: yarn install + + - name: āœļø Write environment variables + run: | + echo "${{ secrets.ENV_TOKEN }}" > .env + echo "${{ secrets.GOOGLE_SERVICES_TOKEN }}" > google-services.json + + - name: šŸ—ļø EAS Build + run: yarn use-build-number eas build -p android --profile production --local --output build.aab --non-interactive + + - name: šŸš€ Deploy + run: eas submit -p android --non-interactive --path build.aab diff --git a/.github/workflows/build-submit-ios.yml b/.github/workflows/build-submit-ios.yml new file mode 100644 index 00000000..0fd691bb --- /dev/null +++ b/.github/workflows/build-submit-ios.yml @@ -0,0 +1,72 @@ +--- +name: Build and Submit iOS + +on: + schedule: + - cron: '0 5 * * *' + workflow_dispatch: + inputs: + profile: + type: choice + description: Build profile to use + options: + - production + +jobs: + build: + name: Build and Submit iOS + runs-on: macos-14 + steps: + - name: Check for EXPO_TOKEN + run: > + if [ -z "${{ secrets.EXPO_TOKEN }}" ]; then + echo "You must provide an EXPO_TOKEN secret linked to this project's Expo account in this repo's secrets. Learn more: https://docs.expo.dev/eas-update/github-actions" + exit 1 + fi + + - name: ā¬‡ļø Checkout + uses: actions/checkout@v4 + + - name: šŸ”§ Setup Node + uses: actions/setup-node@v3 + with: + node-version: 18.x + cache: yarn + + - name: šŸ”Ø Setup EAS + uses: expo/expo-github-action@v8 + with: + expo-version: latest + eas-version: latest + token: ${{ secrets.EXPO_TOKEN }} + + - name: ā›ļø Setup EAS local builds + run: yarn global add eas-cli-local-build-plugin + + - name: āš™ļø Install dependencies + run: yarn install + + - name: ā˜•ļø Setup Cocoapods + uses: maxim-lobanov/setup-cocoapods@v1 + with: + version: 1.14.3 + + - name: šŸ’¾ Cache Pods + uses: actions/cache@v3 + id: pods-cache + with: + path: ./ios/Pods + # We'll use the yarn.lock for our hash since we don't yet have a Podfile.lock. Pod versions will not + # change unless the yarn version changes as well. + key: ${{ runner.os }}-pods-${{ hashFiles('yarn.lock') }} + + - name: āœļø Write environment variables + run: | + echo "${{ secrets.ENV_TOKEN }}" > .env + echo "${{ secrets.GOOGLE_SERVICES_TOKEN }}" > google-services.json + + - name: šŸ—ļø EAS Build + run: yarn use-build-number eas build -p ios --profile production --local --output build.ipa --non-interactive + + - name: šŸš€ Deploy + run: eas submit -p ios --non-interactive --path build.ipa diff --git a/.github/workflows/deploy-nightly-testflight.yml b/.github/workflows/deploy-nightly-testflight.yml deleted file mode 100644 index e3875899..00000000 --- a/.github/workflows/deploy-nightly-testflight.yml +++ /dev/null @@ -1,52 +0,0 @@ -name: Deploy Nightly Testflight Release - -on: - schedule: - - cron: '0 5 * * *' - -jobs: - build: - name: Deploy Nightly Testflight Release - runs-on: ubuntu-latest - permissions: - contents: write - - steps: - - name: Check for EXPO_TOKEN - run: | - if [ -z "${{ secrets.EXPO_TOKEN }}" ]; then - echo "You must provide an EXPO_TOKEN secret linked to this project's Expo account in this repo's secrets. Learn more: https://docs.expo.dev/eas-update/github-actions" - exit 1 - fi - - - name: Checkout - uses: actions/checkout@v4 - - - name: Setup Node - uses: actions/setup-node@v3 - with: - node-version: 18.x - cache: yarn - - - name: Setup EAS - uses: expo/expo-github-action@v8 - with: - eas-version: latest - token: ${{ secrets.EXPO_TOKEN }} - - - name: Install dependencies - run: yarn install - - - name: Bump build number - run: yarn bump:ios - - - name: EAS build and submit - run: eas build -p ios --profile production --auto-submit --non-interactive - - - name: Commit - uses: stefanzweifel/git-auto-commit-action@v5 - with: - commit_message: Nightly iOS Build Bump - branch: main - commit_user_name: github-actions[bot] - commit_user_email: github-actions[bot]@users.noreply.github.com diff --git a/app.config.js b/app.config.js index 9814065f..e710420b 100644 --- a/app.config.js +++ b/app.config.js @@ -11,24 +11,12 @@ const DARK_SPLASH_CONFIG = { resizeMode: 'cover', } -module.exports = function () { +module.exports = function (config) { /** * App version number. Should be incremented as part of a release cycle. */ const VERSION = pkg.version - /** - * iOS build number. Must be incremented for each TestFlight version. - * WARNING: Always leave this variable on line 24! If it is moved, you need to update ./scripts/bumpIosBuildNumber.sh - */ - const IOS_BUILD_NUMBER = '7' - - /** - * Android build number. Must be incremented for each release. - * WARNING: Always leave this variable on line 30! If it is moved, you need to update ./scripts/bumpAndroidBuildNumber.sh - */ - const ANDROID_VERSION_CODE = 62 - /** * Uses built-in Expo env vars * @@ -36,11 +24,10 @@ module.exports = function () { */ const PLATFORM = process.env.EAS_BUILD_PLATFORM - /** - * Additional granularity for the `dist` field - */ const DIST_BUILD_NUMBER = - PLATFORM === 'android' ? ANDROID_VERSION_CODE : IOS_BUILD_NUMBER + PLATFORM === 'android' + ? process.env.BSKY_ANDROID_VERSION_CODE + : process.env.BSKY_IOS_BUILD_NUMBER return { expo: { @@ -57,7 +44,6 @@ module.exports = function () { userInterfaceStyle: 'automatic', splash: SPLASH_CONFIG, ios: { - buildNumber: IOS_BUILD_NUMBER, supportsTablet: false, bundleIdentifier: 'xyz.blueskyweb.app', config: { @@ -85,7 +71,6 @@ module.exports = function () { backgroundColor: '#ffffff', }, android: { - versionCode: ANDROID_VERSION_CODE, icon: './assets/icon.png', adaptiveIcon: { foregroundImage: './assets/icon-android-foreground.png', diff --git a/eas.json b/eas.json index 75254d29..2b4c7cb6 100644 --- a/eas.json +++ b/eas.json @@ -1,7 +1,8 @@ { "cli": { "version": ">= 3.8.1", - "promptToConfigurePushNotifications": false + "promptToConfigurePushNotifications": false, + "appVersionSource": "remote" }, "build": { "base": { @@ -28,7 +29,21 @@ "production": { "extends": "base", "ios": { - "resourceClass": "large" + "resourceClass": "large", + "autoIncrement": true + }, + "android": { + "autoIncrement": true + }, + "channel": "production" + }, + "github": { + "extends": "base", + "ios": { + "autoIncrement": true + }, + "android": { + "autoIncrement": true }, "channel": "production" } diff --git a/package.json b/package.json index 4a3a2a7d..5c31f10f 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "bsky.app", - "version": "1.68.0", + "version": "1.69.0", "private": true, "engines": { "node": ">=18" @@ -12,8 +12,12 @@ "android": "expo run:android", "ios": "expo run:ios", "web": "expo start --web", + "use-build-number": "./scripts/useBuildNumberEnv.sh", "build-web": "expo export:web && node ./scripts/post-web-build.js && cp -v ./web-build/static/js/*.* ./bskyweb/static/js/", - "build-all": "yarn intl:build && eas build --platform all", + "build-all": "yarn intl:build && yarn use-build-number eas build --platform all", + "build-ios": "yarn use-build-number eas build -p ios", + "build-android": "yarn use-build-number eas build -p android", + "build": "yarn use-build-number eas build", "start": "expo start --dev-client", "start:prod": "expo start --dev-client --no-dev --minify", "clean-cache": "rm -rf node_modules/.cache/babel-loader/*", @@ -36,10 +40,7 @@ "intl:check": "yarn intl:extract && git diff-index -G'(^[^\\*# /])|(^#\\w)|(^\\s+[^\\*#/])' HEAD || (echo '\nāš ļø i18n detected un-extracted translations\n' && exit 1)", "intl:extract": "lingui extract", "intl:compile": "lingui compile", - "nuke": "rm -rf ./node_modules && rm -rf ./ios && rm -rf ./android", - "bump": "./scripts/bumpIosBuildNumber.sh && ./scripts/bumpAndroidBuildNumber.sh", - "bump:ios": "./scripts/bumpIosBuildNumber.sh", - "bump:android": "./scripts/bumpAndroidBuildNumber.sh" + "nuke": "rm -rf ./node_modules && rm -rf ./ios && rm -rf ./android" }, "dependencies": { "@atproto/api": "^0.9.5", diff --git a/scripts/bumpAndroidBuildNumber.sh b/scripts/bumpAndroidBuildNumber.sh deleted file mode 100755 index 105f1296..00000000 --- a/scripts/bumpAndroidBuildNumber.sh +++ /dev/null @@ -1,10 +0,0 @@ -#!/bin/sh -# The number here should always be the line number the iOS build variable is on -line=$(sed "30q;d" ./app.config.js) -currentBuildNumber=$(echo "$line" | grep -oE '[0-9]+([.][0-9]+)?') -newBuildNumber=$((currentBuildNumber+1)) -newBuildVariable="const ANDROID_VERSION_CODE = '$newBuildNumber'" -sed -i.bak "30s/.*/ $newBuildVariable/" ./app.config.js -rm -rf ./app.config.js.bak - -echo "Android build number bumped to $newBuildNumber" diff --git a/scripts/bumpIosBuildNumber.sh b/scripts/bumpIosBuildNumber.sh deleted file mode 100755 index b78d2e69..00000000 --- a/scripts/bumpIosBuildNumber.sh +++ /dev/null @@ -1,10 +0,0 @@ -#!/bin/sh -# The number here should always be the line number the iOS build variable is on -line=$(sed "24q;d" ./app.config.js) -currentBuildNumber=$(echo "$line" | grep -oE '[0-9]+([.][0-9]+)?') -newBuildNumber=$((currentBuildNumber+1)) -newBuildVariable="const IOS_BUILD_NUMBER = '$newBuildNumber'" -sed -i.bak "24s/.*/ $newBuildVariable/" ./app.config.js -rm -rf ./app.config.js.bak - -echo "iOS build number bumped to $newBuildNumber" diff --git a/scripts/useBuildNumberEnv.sh b/scripts/useBuildNumberEnv.sh new file mode 100755 index 00000000..fe273d39 --- /dev/null +++ b/scripts/useBuildNumberEnv.sh @@ -0,0 +1,11 @@ +#!/bin/bash +outputIos=$(eas build:version:get -p ios) +outputAndroid=$(eas build:version:get -p android) +currentIosVersion=${outputIos#*buildNumber - } +currentAndroidVersion=${outputAndroid#*versionCode - } + +BSKY_IOS_BUILD_NUMBER=$((currentIosVersion+1)) +BSKY_ANDROID_VERSION_CODE=$((currentAndroidVersion+1)) + +bash -c "BSKY_IOS_BUILD_NUMBER=$BSKY_IOS_BUILD_NUMBER BSKY_ANDROID_VERSION_CODE=$BSKY_ANDROID_VERSION_CODE $*" +