forked from Expensify/App
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathpublishReactNativeAndroidArtifacts.yml
More file actions
147 lines (127 loc) · 6.04 KB
/
publishReactNativeAndroidArtifacts.yml
File metadata and controls
147 lines (127 loc) · 6.04 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
name: Publish React Native Android Artifacts
on:
push:
branches:
- main
paths:
- package.json
- patches/react-native+*.patch
- patches/@react-native+*.patch
- Mobile-Expensify
jobs:
publish:
runs-on: ${{ github.repository_owner == 'Expensify' && 'ubuntu-latest-xl' || 'ubuntu-latest' }}
strategy:
matrix:
is_hybrid: [true, false]
steps:
# v4
- name: Checkout
uses: actions/checkout@8ade135a41bc03ea155e62e844d188df1ea18608
with:
submodules: ${{ matrix.is_hybrid }}
ref: ${{ github.event.before }}
token: ${{ secrets.OS_BOTIFY_TOKEN }}
- name: Get previous App commit hash
id: getOldAppHash
run: echo "HASH=$(git rev-parse HEAD)" >> "$GITHUB_OUTPUT"
- name: Get previous Mobile-Expensify commit hash
if: ${{ matrix.is_hybrid == 'true' }}
id: getOldMobileExpensifyHash
run: echo "HASH=$(git rev-parse :Mobile-Expensify)" >> "$GITHUB_OUTPUT"
- name: Get previous react-native version
id: getOldVersion
run: echo "VERSION=$(jq -r '.dependencies["react-native"]' package.json)" >> "$GITHUB_OUTPUT"
- name: Checkout new ref
run: |
git fetch origin ${{ github.event.after }} --depth=1
git checkout ${{ github.event.after }}
git submodule update
- name: Get new App commit hash
id: getNewAppHash
run: echo "HASH=$(git rev-parse HEAD)" >> "$GITHUB_OUTPUT"
- name: Get new Mobile-Expensify commit hash
if: ${{ matrix.is_hybrid == 'true' }}
id: getNewMobileExpensifyHash
run: echo "HASH=$(git rev-parse :Mobile-Expensify)" >> "$GITHUB_OUTPUT"
- name: Get new react-native version
id: getNewVersion
run: echo "VERSION=$(jq -r '.dependencies["react-native"]' package.json)" >> "$GITHUB_OUTPUT"
- name: Check if version changed
id: didVersionChange
run: |
readonly DID_VERSION_CHANGE=${{ steps.getOldVersion.outputs.VERSION != steps.getNewVersion.outputs.VERSION && 'true' || 'false' }}
echo "DID_VERSION_CHANGE=$DID_VERSION_CHANGE" >> "$GITHUB_OUTPUT"
if [[ "$DID_VERSION_CHANGE" == 'true' ]]; then
echo "::notice::Detected react-native version bump (${{ steps.getOldVersion.outputs.VERSION }} -> ${{ steps.getNewVersion.outputs.VERSION }})"
fi
- name: Check if patches changed
id: didPatchesChange
run: |
if ! git diff --exit-code --name-only ${{ steps.getOldAppHash.outputs.HASH }}..${{ steps.getNewAppHash.outputs.HASH }} -- patches/react-native+*.patch patches/@react-native+*.patch; then
echo "::notice::Detected changes in patches"
echo "DID_PATCHES_CHANGE=true" >> "$GITHUB_OUTPUT"
exit 0
fi
if [[ '${{ matrix.is_hybrid }}' == 'true' ]]; then
if ! git -C Mobile-Expensify diff --exit-code --name-only ${{ steps.getOldMobileExpensifyHash.outputs.HASH }}..${{ steps.getNewMobileExpensifyHash.outputs.HASH }} -- patches/react-native+*.patch patches/@react-native+*.patch; then
echo "::notice::Detected changes in patches"
echo "DID_PATCHES_CHANGE=true" >> "$GITHUB_OUTPUT"
exit 0
fi
fi
echo "DID_PATCHES_CHANGE=false" >> "$GITHUB_OUTPUT"
- name: Check if we should build and publish the package
id: shouldPublish
run: |
if [[ '${{ steps.didVersionChange.outputs.DID_VERSION_CHANGE }}' == 'true' || '${{ steps.didPatchesChange.outputs.DID_PATCHES_CHANGE }}' == 'true' ]]; then
echo "SHOULD_PUBLISH=true" >> "$GITHUB_OUTPUT"
else
echo "::notice::No relevant changes, skipping publishing a new React Native build"
echo "SHOULD_PUBLISH=false" >> "$GITHUB_OUTPUT"
fi
- name: Setup Node
if: ${{ steps.shouldPublish.outputs.SHOULD_PUBLISH == 'true' }}
uses: ./.github/actions/composite/setupNode
with:
IS_HYBRID_BUILD: ${{ matrix.is_hybrid }}
# v4
- name: Setup Java
if: ${{ steps.shouldPublish.outputs.SHOULD_PUBLISH == 'true' }}
uses: actions/setup-java@3a4f6e1af504cf6a31855fa899c6aa5355ba6c12
with:
distribution: oracle
java-version: 17
# v4
- name: Setup Gradle
if: ${{ steps.shouldPublish.outputs.SHOULD_PUBLISH == 'true' }}
uses: gradle/actions/setup-gradle@06832c7b30a0129d7fb559bcc6e43d26f6374244
- name: Determine new patched RN version
if: ${{ steps.shouldPublish.outputs.SHOULD_PUBLISH == 'true' }}
id: getNewPatchedVersion
run: echo "NEW_PATCHED_VERSION=$(./.github/scripts/getNewPatchedRNVersion.sh)" >> "$GITHUB_OUTPUT"
env:
GITHUB_TOKEN: ${{ github.token }}
IS_HYBRID_BUILD: ${{ matrix.is_hybrid }}
- name: Build and publish RN artifacts
if: ${{ steps.shouldPublish.outputs.SHOULD_PUBLISH == 'true' }}
working-directory: ${{ matrix.is_hybrid == 'true' && 'Mobile-Expensify/Android' || 'android' }}
run: |
echo "Starting artifacts build for ${{ matrix.is_hybrid == 'true' && 'HybridApp' || 'NewDot Standalone' }}"
echo "Version: ${{ env.PATCHED_VERSION }}"
echo "Commit hash: ${{ env.COMMIT_HASH }}"
export ORG_GRADLE_PROJECT_reactNativeArchitectures="armeabi-v7a,arm64-v8a,x86,x86_64"
./gradlew buildReactNativeArtifacts -x lint -x test -x check
./gradlew publishReactNativeArtifacts
env:
GH_PUBLISH_ACTOR: ${{ github.actor }}
GH_PUBLISH_TOKEN: ${{ github.token }}
IS_HYBRID_BUILD: ${{ matrix.is_hybrid }}
PATCHED_VERSION: ${{ steps.getNewPatchedVersion.outputs.NEW_PATCHED_VERSION }}
COMMIT_HASH: ${{ github.event.after }}
- name: Announce failed workflow in Slack
if: ${{ failure() }}
uses: ./.github/actions/composite/announceFailedWorkflowInSlack
with:
SLACK_WEBHOOK: ${{ secrets.SLACK_WEBHOOK }}
CHANNEL: '#expensify-open-source'