Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
49 changes: 46 additions & 3 deletions .github/scripts/validate-unity-distribution.py
Original file line number Diff line number Diff line change
Expand Up @@ -9,8 +9,15 @@
ROOT = Path(__file__).resolve().parents[2]
DEMO = ROOT / "examples/demo"
BOOTSTRAP = ROOT / "examples/demo/Assets/OneSignal"
SAMPLE = ROOT / "com.onesignal.unity.core/Samples~"
SAMPLE = ROOT / "com.onesignal.unitysdk.core/Samples~"
INVENTORY = BOOTSTRAP / "Editor/Resources/OneSignalFileInventory.asset"
PACKAGE_NAMES = (
"com.onesignal.unitysdk.core",
"com.onesignal.unitysdk.android",
"com.onesignal.unitysdk.ios",
)
CORE_PACKAGE = PACKAGE_NAMES[0]
MINIMUM_UNITY_VERSION = "2022.3"

EXCLUDED_PREFIXES = (
"Assets/OneSignal/Attribution",
Expand Down Expand Up @@ -64,6 +71,41 @@ def validate_inventory() -> None:
)


def validate_packages() -> None:
packages = {
name: json.loads((ROOT / name / "package.json").read_text())
for name in PACKAGE_NAMES
}
core_version = packages[CORE_PACKAGE]["version"]

for name, package in packages.items():
if package.get("name") != name:
fail(f"{name}/package.json name does not match its folder")
if package.get("version") != core_version:
fail(f"{name} version does not match {CORE_PACKAGE}")
if package.get("unity") != MINIMUM_UNITY_VERSION:
fail(f"{name} does not support Unity {MINIMUM_UNITY_VERSION}")
if package.get("license") != "SEE LICENSE IN LICENSE.md":
fail(f"{name} does not reference its package license")
if not package.get("documentationUrl", "").startswith("https://"):
fail(f"{name} does not have an HTTPS documentation URL")
if not package.get("repository", {}).get("url", "").startswith("https://"):
fail(f"{name} does not have an HTTPS repository URL")
if name != CORE_PACKAGE:
if package.get("dependencies", {}).get(CORE_PACKAGE) != core_version:
fail(f"{name} does not depend on {CORE_PACKAGE}@{core_version}")
if package.get("samples"):
fail(f"{name} must not contain samples")

manifest = json.loads((DEMO / "Packages/manifest.json").read_text())
if manifest.get("scopedRegistries"):
fail("demo requires a scoped registry")
for name in PACKAGE_NAMES:
expected_path = f"file:../../../{name}"
if manifest["dependencies"].get(name) != expected_path:
fail(f"demo does not reference {name} at {expected_path}")


def validate_sample() -> None:
for filename, expected_guid in REQUIRED_SAMPLE_GUIDS.items():
path = SAMPLE / filename
Expand Down Expand Up @@ -91,11 +133,11 @@ def validate_sample() -> None:
if not required_references.issubset(asmdef["references"]):
fail("sample assembly is missing required references")

package = json.loads((ROOT / "com.onesignal.unity.core/package.json").read_text())
package = json.loads((ROOT / CORE_PACKAGE / "package.json").read_text())
if not any(sample.get("path") == "Samples~" for sample in package.get("samples", [])):
fail("core package does not register Samples~")
if not any(
version.get("name") == "com.onesignal.unity.core"
version.get("name") == "com.onesignal.unitysdk.core"
and version.get("expression") == package["version"]
and version.get("define") == "ONE_SIGNAL_INSTALLED"
for version in asmdef.get("versionDefines", [])
Expand All @@ -111,6 +153,7 @@ def main() -> None:
if not (BOOTSTRAP / "Documentation").is_dir():
fail("exportable bootstrap documentation is missing")
validate_inventory()
validate_packages()
validate_sample()
print("Unity distribution layout is valid.")

Expand Down
8 changes: 4 additions & 4 deletions .github/workflows/cd.yml
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,7 @@ jobs:
- name: Determine npm tag
id: npm-tag
run: |
VERSION=$(node -p "require('./com.onesignal.unity.core/package.json').version")
VERSION=$(node -p "require('./com.onesignal.unitysdk.core/package.json').version")
echo "Detected version: $VERSION"
echo "version=$VERSION" >> $GITHUB_OUTPUT
TAG=""
Expand Down Expand Up @@ -72,9 +72,9 @@ jobs:
fi
cd ..
}
publish_pkg com.onesignal.unity.core
publish_pkg com.onesignal.unity.android
publish_pkg com.onesignal.unity.ios
publish_pkg com.onesignal.unitysdk.core
publish_pkg com.onesignal.unitysdk.android
publish_pkg com.onesignal.unitysdk.ios

create_github_release:
needs: publish
Expand Down
22 changes: 11 additions & 11 deletions .github/workflows/create-release-pr.yml
Original file line number Diff line number Diff line change
Expand Up @@ -89,8 +89,8 @@ jobs:

# Get versions from target branch (not the release branch)
CURRENT_VERSION=$(git show origin/${{ inputs.target_branch }}:examples/demo/Assets/OneSignal/VERSION | tr -d '\n\r' | xargs)
ANDROID_VERSION=$(git show origin/${{ inputs.target_branch }}:com.onesignal.unity.android/Editor/OneSignalAndroidDependencies.cs | grep -oE 'Version = "[0-9]+\.[0-9]+\.[0-9]+"' | grep -oE '[0-9]+\.[0-9]+\.[0-9]+' | head -1)
IOS_VERSION=$(git show origin/${{ inputs.target_branch }}:com.onesignal.unity.ios/Editor/OneSignaliOSDependencies.cs | grep -oE 'Version = "[0-9]+\.[0-9]+\.[0-9]+"' | grep -oE '[0-9]+\.[0-9]+\.[0-9]+' | head -1)
ANDROID_VERSION=$(git show origin/${{ inputs.target_branch }}:com.onesignal.unitysdk.android/Editor/OneSignalAndroidDependencies.cs | grep -oE 'Version = "[0-9]+\.[0-9]+\.[0-9]+"' | grep -oE '[0-9]+\.[0-9]+\.[0-9]+' | head -1)
IOS_VERSION=$(git show origin/${{ inputs.target_branch }}:com.onesignal.unitysdk.ios/Editor/OneSignaliOSDependencies.cs | grep -oE 'Version = "[0-9]+\.[0-9]+\.[0-9]+"' | grep -oE '[0-9]+\.[0-9]+\.[0-9]+' | head -1)
echo "unity_from=${CURRENT_VERSION}" >> $GITHUB_OUTPUT
echo "android_from=${ANDROID_VERSION}" >> $GITHUB_OUTPUT
echo "ios_from=${IOS_VERSION}" >> $GITHUB_OUTPUT
Expand All @@ -109,7 +109,7 @@ jobs:
sleep 30
done
if [ "$FOUND" != "true" ]; then echo "✗ Android SDK version ${VERSION} not found after 5 attempts"; exit 1; fi
sed -i -E "s/const string Version = \"[0-9][0-9.]*\"/const string Version = \"$VERSION\"/" com.onesignal.unity.android/Editor/OneSignalAndroidDependencies.cs
sed -i -E "s/const string Version = \"[0-9][0-9.]*\"/const string Version = \"$VERSION\"/" com.onesignal.unitysdk.android/Editor/OneSignalAndroidDependencies.cs
sed -i -E "s/<androidPackage spec=\"com\.onesignal:OneSignal:[0-9][0-9.]*\"/<androidPackage spec=\"com.onesignal:OneSignal:$VERSION\"/" examples/demo/Assets/OneSignal/Editor/OneSignalAndroidDependencies.xml
sed -i -E "s/'com\.onesignal:OneSignal:[0-9][0-9.]*'/'com.onesignal:OneSignal:$VERSION'/" examples/demo/Assets/Plugins/Android/mainTemplate.gradle
sed -i -E "s/<package>com\.onesignal:OneSignal:[0-9][0-9.]*<\/package>/<package>com.onesignal:OneSignal:$VERSION<\/package>/" examples/demo/ProjectSettings/AndroidResolverDependencies.xml
Expand All @@ -133,7 +133,7 @@ jobs:
sleep 30
done
if [ "$FOUND" != "true" ]; then echo "✗ iOS SDK version ${VERSION} not found after 5 attempts"; exit 1; fi
sed -i -E "s/const string Version = \"[0-9][0-9.]*\"/const string Version = \"$VERSION\"/" com.onesignal.unity.ios/Editor/OneSignaliOSDependencies.cs
sed -i -E "s/const string Version = \"[0-9][0-9.]*\"/const string Version = \"$VERSION\"/" com.onesignal.unitysdk.ios/Editor/OneSignaliOSDependencies.cs
sed -i -E "s/version=\"[0-9][0-9.]*\"/version=\"$VERSION\"/" examples/demo/Assets/OneSignal/Editor/OneSignaliOSDependencies.xml

# Only commit if there are changes
Expand All @@ -145,18 +145,18 @@ jobs:
run: |
PADDED_VERSION=$(echo "${{ inputs.unity_version }}" | awk -F. '{printf "%02d%02d%02d", $1, $2, $3}')
printf "%s" "${{ inputs.unity_version }}" > examples/demo/Assets/OneSignal/VERSION
for file in com.onesignal.unity.core/package.json com.onesignal.unity.android/package.json com.onesignal.unity.ios/package.json; do
for file in com.onesignal.unitysdk.core/package.json com.onesignal.unitysdk.android/package.json com.onesignal.unitysdk.ios/package.json; do
sed -i "s/\"version\": \".*\"/\"version\": \"${{ inputs.unity_version }}\"/" "$file"
sed -i "s/\"com.onesignal.unity.core\": \".*\"/\"com.onesignal.unity.core\": \"${{ inputs.unity_version }}\"/" "$file"
sed -i "s/\"com.onesignal.unitysdk.core\": \".*\"/\"com.onesignal.unitysdk.core\": \"${{ inputs.unity_version }}\"/" "$file"
done
sed -i "s/public const string Version = \".*\"/public const string Version = \"${{ inputs.unity_version }}\"/" com.onesignal.unity.core/Runtime/OneSignal.cs
sed -i "s/public const string VersionHeader = \".*\"/public const string VersionHeader = \"${PADDED_VERSION}\"/" com.onesignal.unity.core/Runtime/OneSignalPlatform.cs
for asm in examples/demo/Assets/OneSignal/Editor/OneSignal.UnityPackage.Editor.asmdef examples/demo/Assets/OneSignal/Attribution/OneSignal.UnityPackage.Attribution.asmdef com.onesignal.unity.core/Samples~/OneSignal.UnityPackage.Example.asmdef; do
sed -i "s/public const string Version = \".*\"/public const string Version = \"${{ inputs.unity_version }}\"/" com.onesignal.unitysdk.core/Runtime/OneSignal.cs
sed -i "s/public const string VersionHeader = \".*\"/public const string VersionHeader = \"${PADDED_VERSION}\"/" com.onesignal.unitysdk.core/Runtime/OneSignalPlatform.cs
for asm in examples/demo/Assets/OneSignal/Editor/OneSignal.UnityPackage.Editor.asmdef examples/demo/Assets/OneSignal/Attribution/OneSignal.UnityPackage.Attribution.asmdef com.onesignal.unitysdk.core/Samples~/OneSignal.UnityPackage.Example.asmdef; do
sed -i "s/\"expression\": \".*\"/\"expression\": \"${{ inputs.unity_version }}\"/" "$asm"
done
sed -i "s/\"com.onesignal.unity.core\": \"[0-9.]\+\"/\"com.onesignal.unity.core\": \"${{ inputs.unity_version }}\"/g" examples/demo/Packages/packages-lock.json
sed -i "s/\"com.onesignal.unitysdk.core\": \"[0-9.]\+\"/\"com.onesignal.unitysdk.core\": \"${{ inputs.unity_version }}\"/g" examples/demo/Packages/packages-lock.json
sed -i "s/bundleVersion: .*/bundleVersion: ${{ inputs.unity_version }}/" examples/demo/ProjectSettings/ProjectSettings.asset
sed -i "s/setSdkVersion:@\"[0-9]*\"/setSdkVersion:@\"${PADDED_VERSION}\"/" com.onesignal.unity.ios/Runtime/Plugins/iOS/UIApplication+OneSignalUnity.mm
sed -i "s/setSdkVersion:@\"[0-9]*\"/setSdkVersion:@\"${PADDED_VERSION}\"/" com.onesignal.unitysdk.ios/Runtime/Plugins/iOS/UIApplication+OneSignalUnity.mm

# Only commit if there are changes
git add -A
Expand Down
4 changes: 2 additions & 2 deletions .github/workflows/e2e.yml
Original file line number Diff line number Diff line change
Expand Up @@ -58,7 +58,7 @@ jobs:
- name: Resolve OneSignal Android SDK version
id: android-sdk-version
run: |
VERSION=$(grep -oE 'Version = "[0-9]+\.[0-9]+\.[0-9]+"' com.onesignal.unity.android/Editor/OneSignalAndroidDependencies.cs | head -n1 | grep -oE '[0-9]+\.[0-9]+\.[0-9]+')
VERSION=$(grep -oE 'Version = "[0-9]+\.[0-9]+\.[0-9]+"' com.onesignal.unitysdk.android/Editor/OneSignalAndroidDependencies.cs | head -n1 | grep -oE '[0-9]+\.[0-9]+\.[0-9]+')
if [ -z "$VERSION" ]; then
echo "::error::Could not parse OneSignal Android SDK version from OneSignalAndroidDependencies.cs"
exit 1
Expand Down Expand Up @@ -149,7 +149,7 @@ jobs:
uses: actions/cache@v5
with:
path: examples/demo/Build/iOS-DerivedData
key: deriveddata-${{ runner.os }}-${{ hashFiles('examples/demo/Packages/manifest.json', 'examples/demo/Assets/csc.rsp', 'examples/demo/ProjectSettings/ProjectVersion.txt', 'examples/demo/ProjectSettings/ProjectSettings.asset', 'com.onesignal.unity.ios/Editor/**', 'com.onesignal.unity.core/Editor/**', 'examples/demo/iOS/ExportOptions.plist') }}
key: deriveddata-${{ runner.os }}-${{ hashFiles('examples/demo/Packages/manifest.json', 'examples/demo/Assets/csc.rsp', 'examples/demo/ProjectSettings/ProjectVersion.txt', 'examples/demo/ProjectSettings/ProjectSettings.asset', 'com.onesignal.unitysdk.ios/Editor/**', 'com.onesignal.unitysdk.core/Editor/**', 'examples/demo/iOS/ExportOptions.plist') }}
restore-keys: deriveddata-${{ runner.os }}-

- name: Export Xcode project from Unity
Expand Down
30 changes: 30 additions & 0 deletions ASSET_STORE_PACKAGES.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
# Unity Asset Store packages

The multi-package Unity Asset Store product starts at SDK version `6.0.0`.
This major-version cutover changes the package identifiers:

- `com.onesignal.unitysdk.core`
- `com.onesignal.unitysdk.android`
- `com.onesignal.unitysdk.ios`

Android and iOS depend on the exact same version of Core. The Full Usage
sample is distributed only with Core. All packages require Unity 2022.3 or
newer.

## Release verification

Before uploading a release:

1. Run `python3 .github/scripts/validate-unity-distribution.py`.
2. Pack and sign each package with the OneSignal Unity organization through
Asset Store Publishing Tools.
3. Confirm each signed tarball contains `.attestation.p7m`.
4. Run Unity package validation for every tarball.
5. Upload each tarball to the matching technical name in the existing
multi-package draft.
6. Install the draft product in clean Unity 2022.3 and current Unity 6
projects. Verify dependency resolution, valid signatures, the Core Full
Usage sample, and the absence of duplicate assemblies or missing scripts.

Migration and deprecation of the legacy `com.onesignal.unity.*` npm packages
are handled separately from this package cutover.
2 changes: 1 addition & 1 deletion MIGRATION_GUIDE_v2_to_v3.md
Original file line number Diff line number Diff line change
Expand Up @@ -160,7 +160,7 @@ OneSignal.Default.Initialize("your_app_id");

We also now include a prefab for codeless initialization!

Located in the `com.onesignal.unity.core` package we've include a simple prefab which initializes OneSignal. You can easily find it using the Asset search bar to find `OneSignalController.prefab` and making sure to select All** or **In Packages** for your search option. Drag the prefab into your very first scene, fill in the **App Id, and you are immediately ready to go!
Located in the `com.onesignal.unitysdk.core` package we've include a simple prefab which initializes OneSignal. You can easily find it using the Asset search bar to find `OneSignalController.prefab` and making sure to select All** or **In Packages** for your search option. Drag the prefab into your very first scene, fill in the **App Id, and you are immediately ready to go!

#### Debugging
Set the log and alert levels
Expand Down
Loading