Skip to content

Commit 8bcbb30

Browse files
authored
Merge branch 'main' into harden/pin-thirdparty-actions
2 parents ca4d46e + 6fcb991 commit 8bcbb30

932 files changed

Lines changed: 14931 additions & 3884 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.

‎.github/workflows/desktop.release.reuse.yml‎

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -330,7 +330,9 @@ jobs:
330330

331331
- name: Install Snapcraft
332332
run: |
333-
sudo snap install snapcraft --classic
333+
# Pin to 8.x: electron-builder's legacy core22 snap target calls `snapcraft snap`,
334+
# which was removed in snapcraft 9.0 (renamed to `pack`).
335+
sudo snap install snapcraft --classic --channel=8.x/stable
334336
335337
- name: Setup LXD
336338
uses: canonical/setup-lxd@v0.1.1
@@ -414,5 +416,5 @@ jobs:
414416

415417
- name: Publish Snap
416418
run: |
417-
sudo snap install snapcraft --classic
419+
sudo snap install snapcraft --classic --channel=8.x/stable
418420
snapcraft upload dist/standard-notes-${{ env.APP_VERSION }}-linux-amd64.snap --release stable,candidate,beta,edge
Lines changed: 59 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,59 @@
1+
name: Mobile Release Closed Beta
2+
3+
on:
4+
workflow_dispatch:
5+
inputs:
6+
beta_label:
7+
description: Feature label for this beta build (e.g. offline-sync)
8+
required: true
9+
type: string
10+
11+
jobs:
12+
android:
13+
defaults:
14+
run:
15+
working-directory: packages/mobile
16+
runs-on: ubuntu-latest
17+
timeout-minutes: 45
18+
steps:
19+
- name: Checkout code
20+
uses: actions/checkout@v3
21+
- name: Setup Java version
22+
uses: actions/setup-java@v4
23+
with:
24+
distribution: 'zulu'
25+
java-version: '17'
26+
- name: Export version for closed beta
27+
run: |
28+
BASE_VERSION=$(grep '"version"' ../web/package.json | cut -d '"' -f 4 | cut -d "-" -f 1)
29+
BETA_LABEL=$(echo "${{ inputs.beta_label }}" | tr '[:upper:]' '[:lower:]' | tr ' ' '-' | sed 's/[^a-z0-9-]//g')
30+
if [ -z "$BETA_LABEL" ]; then
31+
echo "beta_label must contain at least one alphanumeric character"
32+
exit 1
33+
fi
34+
echo "PACKAGE_VERSION=${BASE_VERSION}-beta-${BETA_LABEL}" >> $GITHUB_ENV
35+
- name: Setup react-native kernel and increase watchers
36+
run: echo fs.inotify.max_user_watches=524288 | sudo tee -a /etc/sysctl.conf && sudo sysctl -p
37+
- name: Decode Production Android keystore
38+
run: |
39+
echo "${{ secrets.ANDROID_KEYSTORE }}" > keystore.keystore.asc
40+
gpg -d --passphrase "${{ secrets.KEYSTORE_PASSPHRASE }}" --batch keystore.keystore.asc > android/app/keystore.keystore
41+
- name: Install dependencies
42+
run: yarn install --immutable
43+
- run: yarn build:mobile
44+
- name: Ruby Setup for Fastlane
45+
uses: ruby/setup-ruby@v1
46+
with:
47+
working-directory: 'packages/mobile'
48+
- name: fastlane
49+
uses: maierj/fastlane-action@v1.4.0
50+
env:
51+
PACKAGE_VERSION: ${{ env.PACKAGE_VERSION }}
52+
BUILD_NUMBER: ${{ github.run_number }}
53+
ANDROID_KEYSTORE_ALIAS: ${{ secrets.ANDROID_KEYSTORE_ALIAS }}
54+
ANDROID_KEYSTORE_PRIVATE_KEY_PASSWORD: ${{ secrets.ANDROID_KEYSTORE_PRIVATE_KEY_PASSWORD }}
55+
ANDROID_KEYSTORE_PASSWORD: ${{ secrets.ANDROID_KEYSTORE_PASSWORD }}
56+
GOOGLE_PLAY_JSON_KEY_DATA: ${{ secrets.GOOGLE_PLAY_JSON_KEY_DATA }}
57+
with:
58+
lane: 'android closed_beta'
59+
subdirectory: 'packages/mobile'

‎.github/workflows/publish.yml‎

Lines changed: 97 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -3,16 +3,23 @@ name: Publish Packages
33
on:
44
push:
55
branches: [main]
6+
workflow_dispatch:
7+
inputs:
8+
package:
9+
description: 'Package to publish (e.g. @standardnotes/releases)'
10+
required: true
11+
type: string
612

713
# Use commit message "[snjs docker only]" to build/push only standardnotes/snjs (:sha + :latest) for E2E; skips full build, web image, and NPM.
14+
# Manual dispatch publishes tagged packages from an existing release commit without bumping versions.
815

916
permissions:
1017
id-token: write
1118

1219
jobs:
1320
build:
1421
name: Build & Test
15-
if: "${{ contains(github.event.head_commit.message, 'chore(release): publish') == false && contains(github.event.head_commit.message, '[snjs docker only]') == false }}"
22+
if: "${{ github.event_name == 'push' && contains(github.event.head_commit.message, 'chore(release): publish') == false && contains(github.event.head_commit.message, '[snjs docker only]') == false }}"
1623
runs-on: ubuntu-latest
1724
steps:
1825
- name: Checkout code
@@ -39,7 +46,7 @@ jobs:
3946

4047
build-docker:
4148
name: Build Docker Image
42-
if: "${{ contains(github.event.head_commit.message, 'chore(release): publish') == false }}"
49+
if: "${{ github.event_name == 'push' && contains(github.event.head_commit.message, 'chore(release): publish') == false }}"
4350
runs-on: ubuntu-latest
4451
steps:
4552
- name: Checkout code
@@ -110,7 +117,7 @@ jobs:
110117

111118
publish-web-docker:
112119
name: Build and publish Docker Image for Web App
113-
if: "${{ contains(github.event.head_commit.message, 'chore(release): publish') == false && contains(github.event.head_commit.message, '[snjs docker only]') == false }}"
120+
if: "${{ github.event_name == 'push' && contains(github.event.head_commit.message, 'chore(release): publish') == false && contains(github.event.head_commit.message, '[snjs docker only]') == false }}"
114121
runs-on: ubuntu-latest
115122
steps:
116123
- name: Checkout code
@@ -148,7 +155,7 @@ jobs:
148155
149156
publish:
150157
name: Publish to NPM
151-
if: "${{ contains(github.event.head_commit.message, 'chore(release): publish') == false && contains(github.event.head_commit.message, '[snjs docker only]') == false }}"
158+
if: "${{ github.event_name == 'push' && contains(github.event.head_commit.message, 'chore(release): publish') == false && contains(github.event.head_commit.message, '[snjs docker only]') == false }}"
152159
runs-on: ubuntu-latest
153160
steps:
154161
- name: Checkout code
@@ -186,10 +193,95 @@ jobs:
186193
- name: Publish
187194
run: yarn publish:prod
188195

196+
publish-from-git-tags:
197+
name: Publish to NPM from Git Tags
198+
if: github.event_name == 'workflow_dispatch'
199+
runs-on: ubuntu-latest
200+
steps:
201+
- name: Checkout code
202+
uses: actions/checkout@v3
203+
with:
204+
token: ${{ secrets.CI_PAT_TOKEN }}
205+
ref: main
206+
fetch-depth: 0
207+
208+
- name: Resolve release commit
209+
id: release-commit
210+
run: |
211+
COMMIT="$(git log main --grep='chore(release): publish' -n 1 --format=%H)"
212+
213+
if [ -z "$COMMIT" ]; then
214+
echo "No release commit found on main."
215+
exit 1
216+
fi
217+
218+
if ! git cat-file -e "${COMMIT}^{commit}" 2>/dev/null; then
219+
echo "Commit ${COMMIT} does not exist."
220+
exit 1
221+
fi
222+
223+
TAG_COUNT="$(git tag --points-at "$COMMIT" | wc -l | tr -d ' ')"
224+
if [ "$TAG_COUNT" -eq 0 ]; then
225+
echo "Commit ${COMMIT} has no release tags."
226+
exit 1
227+
fi
228+
229+
echo "commit=${COMMIT}" >> "$GITHUB_OUTPUT"
230+
echo "Using release commit ${COMMIT}"
231+
git tag --points-at "$COMMIT"
232+
233+
- name: Checkout release commit
234+
run: git checkout "${{ steps.release-commit.outputs.commit }}"
235+
236+
- name: Set up Node
237+
uses: actions/setup-node@v3
238+
with:
239+
registry-url: 'https://registry.npmjs.org'
240+
node-version-file: '.nvmrc'
241+
cache: 'yarn'
242+
243+
- name: Upgrade npm (trusted publishing requirement)
244+
run: npm install -g npm@^11.5.1
245+
246+
- name: Enable Corepack (Yarn)
247+
run: corepack enable
248+
249+
- name: Install dependencies
250+
run: yarn install --immutable
251+
252+
- name: Build
253+
run: yarn build:all
254+
255+
- name: Publish tagged package
256+
env:
257+
PACKAGE: ${{ inputs.package }}
258+
run: |
259+
set -euo pipefail
260+
261+
PACKAGE="$(echo "$PACKAGE" | xargs)"
262+
if [ -z "$PACKAGE" ]; then
263+
echo "Package name is required."
264+
exit 1
265+
fi
266+
267+
mapfile -t TAGS < <(git tag --points-at HEAD --list "${PACKAGE}@*")
268+
if [ "${#TAGS[@]}" -eq 0 ]; then
269+
echo "No release tag found for ${PACKAGE} at the release commit."
270+
exit 1
271+
fi
272+
273+
if [ "${#TAGS[@]}" -gt 1 ]; then
274+
echo "Multiple release tags found for ${PACKAGE}: ${TAGS[*]}"
275+
exit 1
276+
fi
277+
278+
echo "Publishing ${PACKAGE} (${TAGS[0]})..."
279+
yarn workspace "$PACKAGE" npm publish --access public
280+
189281
publish-docker:
190282
name: Publish to Docker Hub
191283
needs: build-docker
192-
if: "${{ contains(github.event.head_commit.message, 'chore(release): publish') == false }}"
284+
if: "${{ github.event_name == 'push' && contains(github.event.head_commit.message, 'chore(release): publish') == false }}"
193285
runs-on: ubuntu-latest
194286
steps:
195287
- name: Login to Docker Hub
Binary file not shown.
Binary file not shown.
258 KB
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.

0 commit comments

Comments
 (0)