Make NativeWebSocket Universal #4
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| 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 |