Skip to content

Commit e22da58

Browse files
authored
Fix/release app actions security issue (#83)
* fix security issue on release app action * update release app actions * fix Unit Test Flaky
1 parent c7d6402 commit e22da58

2 files changed

Lines changed: 48 additions & 14 deletions

File tree

.github/workflows/release-app.yml

Lines changed: 47 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -23,11 +23,40 @@ jobs:
2323
- name: Check out Repository
2424
uses: actions/checkout@v4
2525

26+
- name: Validate inputs
27+
run: |
28+
validate_version() {
29+
if ! echo "$1" | grep -qE '^[0-9]+\.[0-9]+\.[0-9]+$'; then
30+
echo "::error::Invalid version format: '$1'. Expected: X.Y.Z (e.g. 2.3.0)"
31+
exit 1
32+
fi
33+
}
34+
validate_build() {
35+
if ! echo "$1" | grep -qE '^[0-9]+$'; then
36+
echo "::error::Invalid build number: '$1'. Expected: numeric (e.g. 24)"
37+
exit 1
38+
fi
39+
}
40+
41+
if [ "${{ github.event_name }}" = "workflow_dispatch" ]; then
42+
validate_version "$INPUT_VERSION"
43+
validate_build "$INPUT_BUILD"
44+
else
45+
tag="${GITHUB_REF#refs/*/}"
46+
version=$(echo "$tag" | cut -d'-' -f1)
47+
build=$(echo "$tag" | cut -d'-' -f2)
48+
validate_version "$version"
49+
validate_build "$build"
50+
fi
51+
env:
52+
INPUT_VERSION: ${{ inputs.version }}
53+
INPUT_BUILD: ${{ inputs.build }}
54+
2655
- name: Set env
2756
run: |
2857
if [ "${{ github.event_name }}" = "workflow_dispatch" ]; then
29-
version="${{ inputs.version }}"
30-
build="${{ inputs.build }}"
58+
version="$INPUT_VERSION"
59+
build="$INPUT_BUILD"
3160
tag="${version}-${build}"
3261
else
3362
version_and_build=$(echo "${GITHUB_REF#refs/*/}" | awk -F '[-]' '{print $1 " " $2}')
@@ -39,6 +68,9 @@ jobs:
3968
echo "RELEASE_VERSION=$version" >> $GITHUB_ENV
4069
echo "BUILD_NUMBER=$build" >> $GITHUB_ENV
4170
echo "RELEASE_TAG=$tag" >> $GITHUB_ENV
71+
env:
72+
INPUT_VERSION: ${{ inputs.version }}
73+
INPUT_BUILD: ${{ inputs.build }}
4274

4375
- name: Configure git credentials
4476
uses: fregante/setup-git-user@v2
@@ -68,8 +100,8 @@ jobs:
68100
69101
- name: Update App Version
70102
run: |
71-
sed -i "" "s/MARKETING_VERSION = .*/MARKETING_VERSION = ${{ env.RELEASE_VERSION }};/g" "./MockingStar/MockingStar.xcodeproj/project.pbxproj"
72-
sed -i "" "s/CURRENT_PROJECT_VERSION = .*/CURRENT_PROJECT_VERSION = ${{ env.BUILD_NUMBER }};/g" "./MockingStar/MockingStar.xcodeproj/project.pbxproj"
103+
sed -i "" "s/MARKETING_VERSION = .*/MARKETING_VERSION = $RELEASE_VERSION;/g" "./MockingStar/MockingStar.xcodeproj/project.pbxproj"
104+
sed -i "" "s/CURRENT_PROJECT_VERSION = .*/CURRENT_PROJECT_VERSION = $BUILD_NUMBER;/g" "./MockingStar/MockingStar.xcodeproj/project.pbxproj"
73105
74106
- name: Build Mocking Star
75107
run: |
@@ -89,7 +121,7 @@ jobs:
89121
run: |
90122
sed -i '' 's/TEAMID/${{ secrets.TEAM_ID }}/g' ExportOptions.plist
91123
sed -i '' 's/DEVID_CERT/${{ secrets.CODESIGNING_IDENTITY }}/g' ExportOptions.plist
92-
124+
93125
set -o pipefail && xcodebuild -exportArchive \
94126
-archivePath ./.build/archive.xcarchive \
95127
-exportPath ./.build/appBuildOutput \
@@ -107,18 +139,20 @@ jobs:
107139
Signature=$(./.build/derivedData/SourcePackages/artifacts/sparkle/Sparkle/bin/sign_update -f certs/Sparkle.key .build/appBuildOutput/MockingStar-App.zip)
108140
Signature=$(echo "$Signature" | sed -e 's/^[[:space:]]*//' -e 's/[[:space:]]*$//')
109141
110-
export RELEASE_VERSION="${{ env.RELEASE_VERSION }}"
111-
export BUILD_NUMBER="${{ env.BUILD_NUMBER }}"
112-
export RELEASE_VERSION_TAG="${{ env.RELEASE_TAG }}"
113-
export RELEASE_NOTES="${{ github.event.release.body || '' }}"
142+
export RELEASE_VERSION="$RELEASE_VERSION"
143+
export BUILD_NUMBER="$BUILD_NUMBER"
144+
export RELEASE_VERSION_TAG="$RELEASE_TAG"
145+
export RELEASE_NOTES="$RELEASE_BODY"
114146
export MinimumVersion="$MinimumVersion"
115147
export Signature="$Signature"
116-
148+
117149
swift run --package-path ./SparkleActions
118150
119-
git commit -m 'Release version ${{ env.RELEASE_TAG }}! 🎉' Appcast.xml
120-
git branch -f Release/${{ env.RELEASE_TAG }}
121-
git push -u origin Release/${{ env.RELEASE_TAG }} --force
151+
git commit -m "Release version $RELEASE_TAG! 🎉" Appcast.xml
152+
git branch -f "Release/$RELEASE_TAG"
153+
git push -u origin "Release/$RELEASE_TAG" --force
154+
env:
155+
RELEASE_BODY: ${{ github.event.release.body || '' }}
122156

123157
- name: Create a Release
124158
if: github.event_name == 'release'

Features/MockList/Tests/MockListTests/MockListViewModelTests.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,7 @@ final class MockListViewModelTests: XCTestCase {
5151

5252
Task {
5353
while !viewModel.isLoading {
54-
try? await Task.sleep(nanoseconds: 50_000_000)
54+
try? await Task.sleep(nanoseconds: 100_000_000)
5555
}
5656

5757
exp.fulfill()

0 commit comments

Comments
 (0)