about summary refs log tree commit diff
diff options
context:
space:
mode:
authorEric Bailey <git@esb.lol>2023-11-28 21:49:37 -0600
committerGitHub <noreply@github.com>2023-11-28 21:49:37 -0600
commit6f7032d42b85298b95f9a55d2dd4809450c6fa64 (patch)
treeac3e744c03c7c3d5ae872b7b32908559b45511b0
parentb778017000eeed028edc5cd8fa89d64d4d90dc32 (diff)
downloadvoidsky-6f7032d42b85298b95f9a55d2dd4809450c6fa64.tar.zst
Full send Sentry (#2018)
* Update build profiles, sentry config

* Enable sentry

* Ok actually enable in dev

* Remove debug

* Add TF build

* Fix typo

* Remove debug

* Remove unecessary config

* Fix typo

* Set env in Expo

* Remove scripts

* Clarify

* Replace invalid character

* Align on release/dist

* Add build version

* Just use package version

* Align dist
-rw-r--r--app.config.js44
-rw-r--r--eas.json25
-rw-r--r--package.json1
-rw-r--r--src/lib/sentry.ts42
-rw-r--r--src/logger/index.ts9
5 files changed, 86 insertions, 35 deletions
diff --git a/app.config.js b/app.config.js
index d7a0aa219..bb79260e2 100644
--- a/app.config.js
+++ b/app.config.js
@@ -1,12 +1,41 @@
+const pkg = require('./package.json')
+
 module.exports = function () {
-  const hasSentryToken = !!process.env.SENTRY_AUTH_TOKEN
+  /**
+   * 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.
+   */
+  const IOS_BUILD_NUMBER = '4'
+
+  /**
+   * Android build number. Must be incremented for each release.
+   */
+  const ANDROID_VERSION_CODE = 46
+
+  /**
+   * Uses built-in Expo env vars
+   *
+   * @see https://docs.expo.dev/build-reference/variables/#built-in-environment-variables
+   */
+  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
+
   return {
     expo: {
+      version: VERSION,
       name: 'Bluesky',
       slug: 'bluesky',
       scheme: 'bluesky',
       owner: 'blueskysocial',
-      version: '1.57.0',
       runtimeVersion: {
         policy: 'appVersion',
       },
@@ -19,7 +48,7 @@ module.exports = function () {
         backgroundColor: '#ffffff',
       },
       ios: {
-        buildNumber: '4',
+        buildNumber: IOS_BUILD_NUMBER,
         supportsTablet: false,
         bundleIdentifier: 'xyz.blueskyweb.app',
         config: {
@@ -43,7 +72,7 @@ module.exports = function () {
         backgroundColor: '#ffffff',
       },
       android: {
-        versionCode: 46,
+        versionCode: ANDROID_VERSION_CODE,
         adaptiveIcon: {
           foregroundImage: './assets/adaptive-icon.png',
           backgroundColor: '#ffffff',
@@ -74,7 +103,7 @@ module.exports = function () {
       },
       plugins: [
         'expo-localization',
-        hasSentryToken && 'sentry-expo',
+        Boolean(process.env.SENTRY_AUTH_TOKEN) && 'sentry-expo',
         [
           'expo-build-properties',
           {
@@ -100,11 +129,16 @@ module.exports = function () {
       },
       hooks: {
         postPublish: [
+          /*
+           * @see https://docs.expo.dev/guides/using-sentry/#app-configuration
+           */
           {
             file: 'sentry-expo/upload-sourcemaps',
             config: {
               organization: 'blueskyweb',
               project: 'react-native',
+              release: VERSION,
+              dist: `${PLATFORM}.${VERSION}.${DIST_BUILD_NUMBER}`,
             },
           },
         ],
diff --git a/eas.json b/eas.json
index a66b6c075..25fee4ea5 100644
--- a/eas.json
+++ b/eas.json
@@ -11,28 +11,19 @@
       "extends": "base",
       "developmentClient": true,
       "distribution": "internal",
+      "channel": "development",
       "ios": {
         "simulator": true,
         "resourceClass": "large"
-      },
-      "channel": "development"
-    },
-    "development-device": {
-      "extends": "base",
-      "developmentClient": true,
-      "distribution": "internal",
-      "ios": {
-        "resourceClass": "large"
-      },
-      "channel": "development"
+      }
     },
     "preview": {
       "extends": "base",
       "distribution": "internal",
+      "channel": "preview",
       "ios": {
         "resourceClass": "large"
-      },
-      "channel": "preview"
+      }
     },
     "production": {
       "extends": "base",
@@ -40,14 +31,6 @@
         "resourceClass": "large"
       },
       "channel": "production"
-    },
-    "dev-android-apk": {
-      "extends": "base",
-      "developmentClient": true,
-      "android": {
-        "buildType": "apk",
-        "gradleCommand": ":app:assembleRelease"
-      }
     }
   },
   "submit": {
diff --git a/package.json b/package.json
index 814464a9b..6c75054b5 100644
--- a/package.json
+++ b/package.json
@@ -28,7 +28,6 @@
     "perf:test:measure": "NODE_ENV=test flashlight test --bundleId xyz.blueskyweb.app --testCommand 'yarn perf:test' --duration 150000 --resultsFilePath .perf/results.json",
     "perf:test:results": "NODE_ENV=test flashlight report .perf/results.json",
     "perf:measure": "NODE_ENV=test flashlight measure",
-    "build:apk": "eas build -p android --profile dev-android-apk",
     "intl:extract": "lingui extract",
     "intl:compile": "lingui compile"
   },
diff --git a/src/lib/sentry.ts b/src/lib/sentry.ts
index b080bcc5c..63a21a43c 100644
--- a/src/lib/sentry.ts
+++ b/src/lib/sentry.ts
@@ -1,8 +1,46 @@
+/**
+ * Importing these separately from `platform/detection` and `lib/app-info` to
+ * avoid future conflicts and/or circular deps
+ */
+
+import {Platform} from 'react-native'
+import app from 'react-native-version-number'
+import * as info from 'expo-updates'
 import {init} from 'sentry-expo'
 
+/**
+ * Matches the build profile `channel` props in `eas.json`
+ */
+const buildChannel = (info.channel || 'development') as
+  | 'development'
+  | 'preview'
+  | 'production'
+
+/**
+ * Examples:
+ * - `dev`
+ * - `1.57.0`
+ */
+const release = app.appVersion ?? 'dev'
+
+/**
+ * Examples:
+ * - `web.dev`
+ * - `ios.dev`
+ * - `android.dev`
+ * - `web.1.57.0`
+ * - `ios.1.57.0.3`
+ * - `android.1.57.0.46`
+ */
+const dist = `${Platform.OS}.${release}${
+  app.buildVersion ? `.${app.buildVersion}` : ''
+}`
+
 init({
   dsn: 'https://05bc3789bf994b81bd7ce20c86ccd3ae@o4505071687041024.ingest.sentry.io/4505071690514432',
-  enableInExpoDevelopment: false, // if true, Sentry will try to send events/errors in development mode.
   debug: false, // If `true`, Sentry will try to print out useful debugging information if something goes wrong with sending the event. Set it to `false` in production
-  environment: __DEV__ ? 'development' : 'production', // Set the environment
+  enableInExpoDevelopment: true,
+  environment: buildChannel,
+  dist,
+  release,
 })
diff --git a/src/logger/index.ts b/src/logger/index.ts
index 9f79a7812..59cb84ff4 100644
--- a/src/logger/index.ts
+++ b/src/logger/index.ts
@@ -288,16 +288,13 @@ export class Logger {
  */
 export const logger = new Logger()
 
-/**
- * Report to console in dev, Sentry in prod, nothing in test.
- */
 if (env.IS_DEV && !env.IS_TEST) {
   logger.addTransport(consoleTransport)
 
   /**
-   * Uncomment this to test Sentry in dev
+   * Comment this out to disable Sentry transport in dev
    */
-  // logger.addTransport(sentryTransport);
+  logger.addTransport(sentryTransport)
 } else if (env.IS_PROD) {
-  // logger.addTransport(sentryTransport)
+  logger.addTransport(sentryTransport)
 }