Skip to content

Make NativeWebSocket Universal #4

Make NativeWebSocket Universal

Make NativeWebSocket Universal #4

name: Unity UPM Release
on:
push:
branches:
- master
pull_request:
branches:
- master
jobs:
checkSemver:
name: Check for Semver Change
runs-on: ubuntu-latest
outputs:
semver-updated: ${{ steps.check.outputs.changed }}
steps:
- name: Checkout Code
uses: actions/checkout@v4
- uses: EndBug/version-check@v1
id: check
with:
file-name: integrations/Unity/package.json
diff-search: true
token: ${{ secrets.GITHUB_TOKEN }}
- name: Log when changed
if: steps.check.outputs.changed == 'true'
run: 'echo "Version change found in commit ${{ steps.check.outputs.commit }}! New version: ${{ steps.check.outputs.version }} (${{ steps.check.outputs.type }})"'
updateUPM:
name: Update UPM branch
runs-on: ubuntu-latest
needs: [checkSemver]
if: needs.checkSemver.outputs.semver-updated == 'true'
steps:
- uses: actions/checkout@v4
- name: Assemble UPM package
run: |
mkdir -p upm-package/WebSocket
# Core library files (single source of truth)
cp src/NativeWebSocket/IWebSocket.cs upm-package/WebSocket/
cp src/NativeWebSocket/WebSocketTypes.cs upm-package/WebSocket/
# Wrap core WebSocket.cs with Unity conditional compilation guard
{ echo '#if !UNITY_WEBGL || UNITY_EDITOR'; echo ''; cat src/NativeWebSocket/WebSocket.cs; echo ''; echo '#endif'; } > upm-package/WebSocket/WebSocket.cs
# Unity-specific files (WebGL platform support)
cp integrations/Unity/WebSocketWebGL.cs upm-package/WebSocket/
cp integrations/Unity/WebSocketFactoryWebGL.cs upm-package/WebSocket/
cp integrations/Unity/WebSocket.jslib upm-package/WebSocket/
cp integrations/Unity/WebSocket.jspre upm-package/WebSocket/
cp integrations/Unity/endel.nativewebsocket.asmdef upm-package/WebSocket/
# Package metadata and samples
cp integrations/Unity/package.json upm-package/
cp -r integrations/Unity/Samples~ upm-package/
- name: Push package directory to subtree
uses: s0/git-publish-subdir-action@develop
env:
REPO: self
BRANCH: upm-2.0
FOLDER: upm-package/
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
createPackage:
name: Create Unity Package and Release
runs-on: ubuntu-latest
needs: [checkSemver]
if: needs.checkSemver.outputs.semver-updated == 'true'
steps:
- name: Checkout Code
uses: actions/checkout@v4
- name: Assemble package directory
run: |
mkdir -p upm-package/Assets/WebSocket
# Core library files
cp src/NativeWebSocket/IWebSocket.cs upm-package/Assets/WebSocket/
cp src/NativeWebSocket/WebSocketTypes.cs upm-package/Assets/WebSocket/
# Wrap core WebSocket.cs with Unity conditional compilation guard
{ echo '#if !UNITY_WEBGL || UNITY_EDITOR'; echo ''; cat src/NativeWebSocket/WebSocket.cs; echo ''; echo '#endif'; } > upm-package/Assets/WebSocket/WebSocket.cs
# Unity-specific files
cp integrations/Unity/WebSocketWebGL.cs upm-package/Assets/WebSocket/
cp integrations/Unity/WebSocketFactoryWebGL.cs upm-package/Assets/WebSocket/
cp integrations/Unity/WebSocket.jslib upm-package/Assets/WebSocket/
cp integrations/Unity/WebSocket.jspre upm-package/Assets/WebSocket/
cp integrations/Unity/endel.nativewebsocket.asmdef upm-package/Assets/WebSocket/
# Package metadata
cp integrations/Unity/package.json upm-package/Assets/
- name: Generate .meta files
run: |
generate_meta() {
local file="$1"
local guid
guid=$(echo -n "$file" | md5sum | cut -c1-32)
local ext="${file##*.}"
local meta="${file}.meta"
case "$ext" in
cs)
cat > "$meta" <<ENDMETA
fileFormatVersion: 2
guid: ${guid}
MonoImporter:
serializedVersion: 2
defaultReferences: []
executionOrder: 0
icon: {instanceID: 0}
ENDMETA
;;
jslib|jspre)
cat > "$meta" <<ENDMETA
fileFormatVersion: 2
guid: ${guid}
PluginImporter:
serializedVersion: 2
iconMap: {}
executionOrder: {}
defineConstraints: []
isPreloaded: 0
isOverridable: 0
isExplicitlyReferenced: 0
validateReferences: 1
platformData:
- first:
Any:
second:
enabled: 1
settings: {}
userData:
assetBundleName:
assetBundleVariant:
ENDMETA
;;
*)
cat > "$meta" <<ENDMETA
fileFormatVersion: 2
guid: ${guid}
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:
ENDMETA
;;
esac
}
# Generate .meta for the WebSocket folder
folder_guid=$(echo -n "Assets/WebSocket" | md5sum | cut -c1-32)
cat > upm-package/Assets/WebSocket.meta <<ENDMETA
fileFormatVersion: 2
guid: ${folder_guid}
folderAsset: yes
DefaultImporter:
externalObjects: {}
userData:
assetBundleName:
assetBundleVariant:
ENDMETA
# Generate .meta for package.json
generate_meta "upm-package/Assets/package.json"
# Generate .meta for each file in WebSocket/
for f in upm-package/Assets/WebSocket/*; do
generate_meta "$f"
done
- name: Gather meta files
run: |
cd upm-package
find Assets -name '*.meta' > ../metaList
cat ../metaList
- name: Extract Version
id: version
uses: notiz-dev/github-action-json-property@release
with:
path: 'integrations/Unity/package.json'
prop_path: 'version'
- run: echo ${{steps.version.outputs.prop}}
- name: Generate Unity Package
id: build-package
uses: pCYSl5EDgo/create-unitypackage@master
with:
package-path: 'NativeWebSocket.unitypackage'
include-files: metaList
project-folder: upm-package
- name: Upload Package
uses: actions/upload-artifact@v4
with:
path: ./NativeWebSocket.unitypackage
name: NativeWebSocket
- name: Changelog
uses: scottbrenner/generate-changelog-action@master
id: Changelog
- name: Create Release
id: create_release
uses: actions/create-release@v1
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
tag_name: ${{ steps.version.outputs.prop }}
release_name: ${{ steps.version.outputs.prop }}
body: |
${{ steps.Changelog.outputs.changelog }}
draft: false
prerelease: true
- name: Upload Release Asset
id: upload-release-asset
uses: actions/upload-release-asset@v1
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
upload_url: ${{ steps.create_release.outputs.upload_url }}
asset_path: ./NativeWebSocket.unitypackage
asset_name: NativeWebSocket.unitypackage
asset_content_type: application/x-gzip