Skip to content

Commit 9178751

Browse files
authored
Merge pull request #27 from eurosky-social/eurosky/fork
deploy
2 parents 6eb2069 + eacf93d commit 9178751

160 files changed

Lines changed: 6864 additions & 2344 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

.claude/.pre-pr-sweep-state

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
alt-blur@3076a2b5a593b0d7b37198b5aebfe3a222afd52d

.github/dependabot.yml

Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
version: 2
2+
# Dependabot auto-update config.
3+
#
4+
# Cooldown (7 days) is the point of this config: it delays version-update
5+
# PRs until a newly-published version has aged. Supply-chain attacks like
6+
# the tanstack Shai-Hulud compromise (2026-05-11) live minutes-to-hours
7+
# before the registry yanks them; a 7-day cooldown keeps poisoned
8+
# versions out of our lockfiles.
9+
#
10+
# Security updates bypass cooldown and continue to flow immediately. See:
11+
# https://docs.github.com/en/code-security/dependabot/working-with-dependabot/dependabot-options-reference#cooldown
12+
#
13+
# Auto-merge is deliberately NOT enabled. Every dependabot PR gets human
14+
# review.
15+
16+
updates:
17+
- package-ecosystem: npm
18+
directory: /
19+
schedule:
20+
interval: weekly
21+
day: monday
22+
cooldown:
23+
default-days: 7
24+
open-pull-requests-limit: 5
25+
groups:
26+
production:
27+
dependency-type: production
28+
update-types: [minor, patch]
29+
development:
30+
dependency-type: development
31+
update-types: [minor, patch]
32+
33+
- package-ecosystem: github-actions
34+
directory: /
35+
schedule:
36+
interval: weekly
37+
day: monday
38+
cooldown:
39+
default-days: 7
40+
open-pull-requests-limit: 3
41+
groups:
42+
actions:
43+
patterns: ["*"]
44+
update-types: [minor, patch]

.github/workflows/build-submit-android.yml

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,7 @@ jobs:
4747
run: pnpm install --frozen-lockfile
4848

4949
- name: 🔨 Setup Expo CLI
50-
uses: expo/expo-github-action@main
50+
uses: expo/expo-github-action@v9
5151
with:
5252
eas-version: '19.0.5'
5353
packager: 'pnpm --allow-build=dtrace-provider'
@@ -128,7 +128,7 @@ jobs:
128128

129129
- name: 🔔 Notify Slack of Production Build
130130
if: ${{ inputs.profile == 'production' }}
131-
uses: slackapi/slack-github-action@v2.1.1
131+
uses: slackapi/slack-github-action@v3.0.3
132132
with:
133133
webhook: ${{ secrets.SLACK_CLIENT_ALERT_WEBHOOK }}
134134
webhook-type: incoming-webhook
@@ -138,7 +138,7 @@ jobs:
138138
139139
- name: 🔔 Notify Slack of Testflight Build
140140
if: ${{ inputs.profile != 'production' }}
141-
uses: slackapi/slack-github-action@v2.1.1
141+
uses: slackapi/slack-github-action@v3.0.3
142142
with:
143143
webhook: ${{ secrets.SLACK_CLIENT_ALERT_WEBHOOK }}
144144
webhook-type: incoming-webhook
@@ -174,7 +174,7 @@ jobs:
174174

175175
- name: 🔔 Notify Slack of Production APK Build
176176
if: ${{ inputs.profile == 'production' }}
177-
uses: slackapi/slack-github-action@v2.1.1
177+
uses: slackapi/slack-github-action@v3.0.3
178178
with:
179179
webhook: ${{ secrets.SLACK_CLIENT_ALERT_WEBHOOK }}
180180
webhook-type: incoming-webhook

.github/workflows/build-submit-ios.yml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,7 @@ jobs:
4747
run: pnpm install --frozen-lockfile
4848

4949
- name: 🔨 Setup Expo CLI
50-
uses: expo/expo-github-action@main
50+
uses: expo/expo-github-action@v9
5151
with:
5252
eas-version: '19.0.5'
5353
packager: 'pnpm --allow-build=dtrace-provider'
@@ -155,7 +155,7 @@ jobs:
155155

156156
- name: 🔔 Notify Slack of Production Build
157157
if: ${{ inputs.profile == 'production' }}
158-
uses: slackapi/slack-github-action@v2.1.1
158+
uses: slackapi/slack-github-action@v3.0.3
159159
with:
160160
webhook: ${{ secrets.SLACK_CLIENT_ALERT_WEBHOOK }}
161161
webhook-type: incoming-webhook

.github/workflows/bundle-deploy-eas-update.yml

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -71,23 +71,23 @@ jobs:
7171
profile: ${{ inputs.channel || 'testflight' }}
7272
previous-commit-tag: ${{ inputs.runtimeVersion }}
7373

74-
- name: Lint check
75-
run: pnpm lint
76-
77-
- name: Prettier check
78-
run: pnpm prettier --check .
79-
8074
- name: 🔤 Compile translations
8175
run: pnpm intl:build 2>&1 | tee i18n.log
8276

8377
- name: Check for i18n compilation errors
8478
run: if grep -q "invalid syntax" "i18n.log"; then echo "\n\nFound compilation errors!\n\n" && exit 1; else echo "\n\nNo compilation errors!\n\n"; fi
8579

80+
- name: Lint check
81+
run: pnpm lint
82+
83+
- name: Prettier check
84+
run: pnpm prettier --check .
85+
8686
- name: Type check
8787
run: pnpm typecheck
8888

8989
- name: 🔨 Setup EAS
90-
uses: expo/expo-github-action@main
90+
uses: expo/expo-github-action@v9
9191
if: ${{ !steps.fingerprint.outputs.includes-changes }}
9292
with:
9393
eas-version: '19.0.5'
@@ -180,7 +180,7 @@ jobs:
180180
cache: pnpm
181181

182182
- name: 🔨 Setup EAS
183-
uses: expo/expo-github-action@main
183+
uses: expo/expo-github-action@v9
184184
with:
185185
eas-version: '19.0.5'
186186
packager: 'pnpm --allow-build=dtrace-provider'
@@ -327,7 +327,7 @@ jobs:
327327
cache: pnpm
328328

329329
- name: 🔨 Setup EAS
330-
uses: expo/expo-github-action@main
330+
uses: expo/expo-github-action@v9
331331
with:
332332
eas-version: '19.0.5'
333333
packager: 'pnpm --allow-build=dtrace-provider'
@@ -386,7 +386,7 @@ jobs:
386386
path: build.apk
387387

388388
- name: 🔔 Notify Slack
389-
uses: slackapi/slack-github-action@v2.1.1
389+
uses: slackapi/slack-github-action@v3.0.3
390390
with:
391391
webhook: ${{ secrets.SLACK_CLIENT_ALERT_WEBHOOK }}
392392
webhook-type: incoming-webhook

.github/workflows/lint.yml

Lines changed: 54 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -6,33 +6,42 @@ on:
66
branches:
77
- main
88
concurrency:
9-
group: "${{ github.workflow }}-${{ github.head_ref || github.ref }}"
9+
group: '${{ github.workflow }}-${{ github.head_ref || github.ref }}'
1010
cancel-in-progress: true
1111

12+
# These jobs only check out the repo and run checks, so read access to the
13+
# repo contents is all the GITHUB_TOKEN needs.
14+
permissions:
15+
contents: read
16+
1217
jobs:
1318
linting:
1419
name: Run linters
1520
runs-on: ubuntu-latest
21+
strategy:
22+
fail-fast: false
23+
matrix:
24+
job: [lint, prettier, typecheck]
1625
steps:
1726
- name: Check out Git repository
1827
uses: actions/checkout@v5
19-
- name: Verify Node version pins match .nvmrc
28+
- name: Verify Node version pins match package.json
2029
run: |
2130
set -euo pipefail
22-
expected=$(tr -d '[:space:]' < .nvmrc)
31+
expected=$(node -p "require('./package.json').engines.node.replace(/[^0-9.]/g, '')")
2332
rc=0
2433
check() {
2534
if [ "$2" != "$expected" ]; then
26-
echo "::error file=$1::Node version mismatch: $1 pins '$2' but .nvmrc is '$expected'"
35+
echo "::error file=$1::Node version mismatch: $1 pins '$2' but package.json is '$expected'"
2736
rc=1
2837
fi
2938
}
30-
# FROM node:X.Y.Z service runtime images
39+
# FROM node:X.Y.Z - service runtime images
3140
for f in Dockerfile.bskylink Dockerfile.bskyogcard; do
3241
v=$(grep -oE 'FROM node:[0-9]+\.[0-9]+\.[0-9]+' "$f" | grep -oE '[0-9]+\.[0-9]+\.[0-9]+' | sort -u)
3342
check "$f" "$v"
3443
done
35-
# ENV NODE_VERSION=X.Y.Z Go images that nvm-install Node for the JS build stage
44+
# ENV NODE_VERSION=X.Y.Z - Go images that nvm-install Node for the JS build stage
3645
for f in Dockerfile.embedr; do
3746
v=$(grep -oE 'NODE_VERSION=[0-9]+\.[0-9]+\.[0-9]+' "$f" | grep -oE '[0-9]+\.[0-9]+\.[0-9]+' | sort -u)
3847
check "$f" "$v"
@@ -53,17 +62,33 @@ jobs:
5362
command: pnpm install --frozen-lockfile
5463
attempt_limit: 3
5564
attempt_delay: 2000
56-
- name: Lint check
57-
run: pnpm lint
58-
- name: Prettier check
59-
run: pnpm prettier --check .
6065
- name: Check & compile i18n
6166
run: pnpm intl:build
62-
- name: Type check
63-
run: pnpm typecheck
67+
- name: Lint checks
68+
run: pnpm ${{ matrix.job }}
69+
# Aggregates the matrix results into a single stable check name so branch
70+
# protection can require "Run linters" regardless of how many matrix jobs run.
71+
# The result is asserted in `run` (not `if`) so a malformed expression can
72+
# never silently skip the check and report a false pass.
73+
linting-summary:
74+
name: Run linters
75+
if: always()
76+
needs: [linting]
77+
runs-on: ubuntu-latest
78+
steps:
79+
- name: Require linting to have succeeded
80+
env:
81+
RESULT: ${{ needs.linting.result }}
82+
run: |
83+
echo "linting result: $RESULT"
84+
test "$RESULT" = "success"
6485
testing:
6586
name: Run tests
6687
runs-on: ubuntu-latest
88+
strategy:
89+
fail-fast: false
90+
matrix:
91+
shard: [1, 2, 3, 4]
6792
steps:
6893
- name: Check out Git repository
6994
uses: actions/checkout@v5
@@ -83,4 +108,20 @@ jobs:
83108
run: pnpm intl:build
84109
- name: Run tests
85110
run: |
86-
NODE_ENV=test pnpm test --forceExit
111+
NODE_ENV=test pnpm test --forceExit --shard=${{ matrix.shard }}/${{ strategy.job-total }}
112+
# Aggregates the sharded test results into a single stable check name so branch
113+
# protection can require "Run tests" regardless of how many shards run.
114+
# The result is asserted in `run` (not `if`) so a malformed expression can
115+
# never silently skip the check and report a false pass.
116+
testing-summary:
117+
name: Run tests
118+
if: always()
119+
needs: [testing]
120+
runs-on: ubuntu-latest
121+
steps:
122+
- name: Require testing to have succeeded
123+
env:
124+
RESULT: ${{ needs.testing.result }}
125+
run: |
126+
echo "testing result: $RESULT"
127+
test "$RESULT" = "success"

.github/workflows/pull-request-comment.yml

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -94,7 +94,7 @@ jobs:
9494
core.setOutput('head-ref', pr.data.head.ref);
9595
9696
- name: 💬 Drop a comment
97-
uses: marocchino/sticky-pull-request-comment@v2
97+
uses: marocchino/sticky-pull-request-comment@v3
9898
with:
9999
header: pull-request-eas-build-${{ steps.pr-info.outputs.head-sha }}
100100
number: ${{ github.event.issue.number }}
@@ -128,20 +128,20 @@ jobs:
128128
- name: Install dependencies
129129
run: pnpm install --frozen-lockfile
130130

131-
- name: Lint check
132-
run: pnpm lint
133-
134131
- name: 🔤 Compile translations
135132
run: pnpm intl:build 2>&1 | tee i18n.log
136133

137134
- name: Check for i18n compilation errors
138135
run: if grep -q "invalid syntax" "i18n.log"; then echo "\n\nFound compilation errors!\n\n" && exit 1; else echo "\n\nNo compilation errors!\n\n"; fi
139136

137+
- name: Lint check
138+
run: pnpm lint
139+
140140
- name: Type check
141141
run: pnpm typecheck
142142

143143
- name: 🔨 Setup EAS
144-
uses: expo/expo-github-action@main
144+
uses: expo/expo-github-action@v9
145145
with:
146146
eas-version: '19.0.5'
147147
packager: 'pnpm --allow-build=dtrace-provider'
@@ -181,7 +181,7 @@ jobs:
181181
RUNTIME_VERSION:
182182

183183
- name: 💬 Drop a comment
184-
uses: marocchino/sticky-pull-request-comment@v2
184+
uses: marocchino/sticky-pull-request-comment@v3
185185
env:
186186
ISSUE_NUMBER: ${{ github.event.issue.number }}
187187
with:
@@ -198,7 +198,7 @@ jobs:
198198
*Generated by [PR labeler](https://github.com/expo/expo/actions/workflows/pr-labeler.yml) 🤖*
199199
200200
- name: 💬 Drop a comment
201-
uses: marocchino/sticky-pull-request-comment@v2
201+
uses: marocchino/sticky-pull-request-comment@v3
202202
if: failure()
203203
with:
204204
header: pull-request-eas-build-${{ steps.pr-info.outputs.head-sha }}

.github/workflows/pull-request-commit.yml

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -96,7 +96,7 @@ jobs:
9696
excluded_assets: "(.+).chunk.js|(.+).js.map|(.+).json|(.+).png|(.+).svg|(.+).webp|(.+).jpg|(.+).ico"
9797

9898
- name: 💬 Drop a comment
99-
uses: marocchino/sticky-pull-request-comment@v2
99+
uses: marocchino/sticky-pull-request-comment@v3
100100
with:
101101
header: bundle-diff
102102
message: |
@@ -133,7 +133,7 @@ jobs:
133133
profile: pull-request
134134

135135
- name: 💬 Drop a comment
136-
uses: marocchino/sticky-pull-request-comment@v2
136+
uses: marocchino/sticky-pull-request-comment@v3
137137
if: ${{ steps.fingerprint.outputs.includes-changes }}
138138
with:
139139
header: fingerprint-diff
@@ -151,7 +151,7 @@ jobs:
151151
*Generated by [PR labeler](https://github.com/expo/expo/actions/workflows/pr-labeler.yml) 🤖*
152152
153153
- name: 💬 Delete comment
154-
uses: marocchino/sticky-pull-request-comment@v2
154+
uses: marocchino/sticky-pull-request-comment@v3
155155
if: ${{ !steps.fingerprint.outputs.includes-changes }}
156156
with:
157157
header: fingerprint-diff

.github/workflows/sync-internal.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ jobs:
1515
fetch-depth: 0
1616
- name: Generate GitHub App Token
1717
id: app-token
18-
uses: actions/create-github-app-token@v1
18+
uses: actions/create-github-app-token@v3
1919
with:
2020
app-id: ${{ vars.SYNC_INTERNAL_APP_ID }}
2121
private-key: ${{ secrets.SYNC_INTERNAL_PK }}

CLAUDE.md

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -206,7 +206,7 @@ function MyComponent() {
206206

207207
return (
208208
<View style={[a.flex_row, a.gap_md, a.p_lg, t.atoms.bg]}>
209-
<Text style={[a.text_md, a.font_bold, t.atoms.text]}>Hello</Text>
209+
<Text style={[a.text_md, a.font_bold, t.atoms.text_contrast_high]}>Hello</Text>
210210
</View>
211211
)
212212
}
@@ -414,12 +414,16 @@ import {Text, H1, H2, P} from '#/components/Typography'
414414

415415
<H1 style={[a.text_xl, a.font_bold]}>Heading</H1>
416416
<P>Paragraph text with default styling.</P>
417-
<Text style={[a.text_sm, t.atoms.text_contrast_medium]}>Custom text</Text>
417+
<Text style={[a.text_md, t.atoms.text_contrast_medium]}>Custom text</Text>
418418

419-
// For text with emoji, add the emoji prop
419+
// For text with emoji, add the emoji prop. User-generated text (e.g. display names)
420+
// will almost certainly contain emoji, so only omit it when the text is static and
421+
// does not contain an emoji
420422
<Text emoji>Hello! 👋</Text>
421423
```
422424

425+
The `Text` component's default style is `[a.text_sm, a.leading_snug, t.atoms.text]`.
426+
423427
### TextField
424428

425429
```tsx

0 commit comments

Comments
 (0)