Skip to content

Default the preview multiplayer server to the bevy engine #9018

Default the preview multiplayer server to the bevy engine

Default the preview multiplayer server to the bevy engine #9018

Workflow file for this run

on:
push:
branches:
- main
- experimental
- auth-server
pull_request:
release:
types:
- created
env:
BRANCH_TAG: ${{ github.ref_name == 'experimental' && 'experimental' || github.ref_name == 'auth-server' && 'auth-server' || '' }}
name: CI
jobs:
lint:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@master
- uses: actions/setup-node@v3
with:
node-version: 24.16.0
cache: 'npm'
- name: install
run: make install
- name: lint
run: make lint
- name: lint-packages
run: make lint-packages
docs:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@master
- uses: actions/setup-node@v3
with:
node-version: 24.16.0
cache: 'npm'
- name: docs
run: make docs
test:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@master
- uses: actions/setup-node@v3
with:
node-version: 24.16.0
cache: 'npm'
- name: install
run: make install
- name: build
run: make build
- name: test
run: make test
env:
NODE_OPTIONS: '--max-old-space-size=4096'
UPDATE_SNAPSHOTS: true
- name: test-cli
run: make test-cli
- uses: codecov/codecov-action@v3
if: always()
with:
fail_ci_if_error: false # optional (default = false)
verbose: true # optional (default = false)
- name: prepare releasable packages
run: make prepare
build:
runs-on: ubuntu-latest
permissions:
contents: read
id-token: write
outputs:
decentraland_sdk_s3_bucket_key: ${{ steps.publish_decentraland_sdk.outputs.s3-bucket-key }}
decentraland_sdk_commands_s3_bucket_key: ${{ steps.publish_decentraland_sdk_commands.outputs.s3-bucket-key }}
decentraland_js_runtime_s3_bucket_key: ${{ steps.publish_dcl_js_runtime.outputs.s3-bucket-key }}
decentraland_ecs_bucket_key: ${{ steps.publish_ecs.outputs.s3-bucket-key }}
steps:
- uses: actions/checkout@master
- uses: actions/setup-node@v3
with:
node-version: 24.16.0
cache: 'npm'
- name: install
run: make install
- name: update version of packages/@dcl/sdk/package.json, this version will be used for all packages
uses: decentraland/oddish-action@master
with:
cwd: ./packages/@dcl/sdk
deterministic-snapshot: true
only-update-versions: true
- name: build
run: make build
- name: prepare releasable packages
run: make prepare
- name: 'Upload Artifact'
uses: actions/upload-artifact@v4
with:
name: built-artifacts
path: 'packages/**/*.tgz'
retention-days: 5
- name: publish @dcl/js-runtime package
id: publish_dcl_js_runtime
uses: decentraland/oddish-action@master
with:
registry-url: 'https://registry.npmjs.org'
access: public
cwd: ./packages/@dcl/js-runtime
## use action runId instead of current date to generate snapshot numbers
deterministic-snapshot: true
## sign the deployment
provenance: true
## publish every package to s3
s3-bucket: ${{ secrets.SDK_TEAM_S3_BUCKET }}
s3-bucket-region: ${{ secrets.SDK_TEAM_AWS_REGION }}
s3-bucket-key-prefix: '@dcl/js-sdk-toolchain/branch/${{ github.head_ref || github.ref }}/@dcl/js-runtime'
custom-tag: ${{ env.BRANCH_TAG }}
branch-to-custom-tag: ${{ env.BRANCH_TAG }}
env:
BRANCH_NAME: ${{ github.ref_name }}
NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}
AWS_ACCESS_KEY_ID: ${{ secrets.SDK_TEAM_AWS_ID }}
AWS_SECRET_ACCESS_KEY: ${{ secrets.SDK_TEAM_AWS_SECRET }}
- name: publish @dcl/ecs package
uses: decentraland/oddish-action@master
id: publish_ecs
with:
registry-url: 'https://registry.npmjs.org'
access: public
cwd: ./packages/@dcl/ecs
## use action runId instead of current date to generate snapshot numbers
deterministic-snapshot: true
## sign the deployment
provenance: true
## publish every package to s3
s3-bucket: ${{ secrets.SDK_TEAM_S3_BUCKET }}
s3-bucket-region: ${{ secrets.SDK_TEAM_AWS_REGION }}
s3-bucket-key-prefix: '@dcl/js-sdk-toolchain/branch/${{ github.head_ref || github.ref }}/@dcl/ecs'
custom-tag: ${{ env.BRANCH_TAG }}
branch-to-custom-tag: ${{ env.BRANCH_TAG }}
env:
BRANCH_NAME: ${{ github.ref_name }}
NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}
AWS_ACCESS_KEY_ID: ${{ secrets.SDK_TEAM_AWS_ID }}
AWS_SECRET_ACCESS_KEY: ${{ secrets.SDK_TEAM_AWS_SECRET }}
- name: (PR) change @dcl/react-ecs dependencies versions to point to s3 url
working-directory: ./packages/@dcl/react-ecs
if: ${{ github.event.pull_request.number }}
run: |
node -e "\
let pkg=require('./package.json');\
pkg.dependencies['@dcl/ecs']='$ECS_S3_URL';\
require('fs').writeFileSync('package.json', JSON.stringify(pkg, null, 2));\
"
env:
ECS_S3_URL: ${{ secrets.SDK_TEAM_S3_BASE_URL }}/${{ steps.publish_ecs.outputs.s3-bucket-key }}
- name: publish @dcl/react-ecs package
id: publish_dcl_react_ecs
uses: decentraland/oddish-action@master
with:
registry-url: 'https://registry.npmjs.org'
access: public
cwd: ./packages/@dcl/react-ecs
## use action runId instead of current date to generate snapshot numbers
deterministic-snapshot: true
## sign the deployment
provenance: true
## publish every package to s3
s3-bucket: ${{ secrets.SDK_TEAM_S3_BUCKET }}
s3-bucket-region: ${{ secrets.SDK_TEAM_AWS_REGION }}
s3-bucket-key-prefix: '@dcl/js-sdk-toolchain/branch/${{ github.head_ref || github.ref }}/@dcl/react-ecs'
custom-tag: ${{ env.BRANCH_TAG }}
branch-to-custom-tag: ${{ env.BRANCH_TAG }}
env:
BRANCH_NAME: ${{ github.ref_name }}
NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}
AWS_ACCESS_KEY_ID: ${{ secrets.SDK_TEAM_AWS_ID }}
AWS_SECRET_ACCESS_KEY: ${{ secrets.SDK_TEAM_AWS_SECRET }}
- name: (PR) change @dcl/sdk-commands dependencies versions to point to s3 url
working-directory: ./packages/@dcl/sdk-commands
if: ${{ github.event.pull_request.number }}
run: |
node -e "\
let pkg=require('./package.json');\
pkg.dependencies['@dcl/ecs']='$ECS_S3_URL';\
require('fs').writeFileSync('package.json', JSON.stringify(pkg, null, 2));\
"
env:
ECS_S3_URL: ${{ secrets.SDK_TEAM_S3_BASE_URL }}/${{ steps.publish_ecs.outputs.s3-bucket-key }}
- name: publish @dcl/sdk-commands package
uses: decentraland/oddish-action@master
id: publish_decentraland_sdk_commands
with:
registry-url: 'https://registry.npmjs.org'
access: public
cwd: ./packages/@dcl/sdk-commands
## use action runId instead of current date to generate snapshot numbers
deterministic-snapshot: true
## sign the deployment
provenance: true
## publish every package to s3
s3-bucket: ${{ secrets.SDK_TEAM_S3_BUCKET }}
s3-bucket-region: ${{ secrets.SDK_TEAM_AWS_REGION }}
s3-bucket-key-prefix: '@dcl/js-sdk-toolchain/branch/${{ github.head_ref || github.ref }}'
custom-tag: ${{ env.BRANCH_TAG }}
branch-to-custom-tag: ${{ env.BRANCH_TAG }}
env:
BRANCH_NAME: ${{ github.ref_name }}
NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}
AWS_ACCESS_KEY_ID: ${{ secrets.SDK_TEAM_AWS_ID }}
AWS_SECRET_ACCESS_KEY: ${{ secrets.SDK_TEAM_AWS_SECRET }}
- name: (PR) change @dcl/sdk version to s3 url
working-directory: ./packages/@dcl/sdk
if: ${{ github.event.pull_request.number }}
run: |
node -e "\
let pkg=require('./package.json');\
pkg.dependencies['@dcl/js-runtime']='$JS_RUNTIME_S3_URL';\
pkg.dependencies['@dcl/ecs']='$ECS_S3_URL';\
pkg.dependencies['@dcl/react-ecs']='$REACT_ECS_S3_URL';\
pkg.dependencies['@dcl/sdk-commands']='$SDK_COMMANDS_S3_URL';\
require('fs').writeFileSync('package.json', JSON.stringify(pkg, null, 2));\
"
env:
REACT_ECS_S3_URL: ${{ secrets.SDK_TEAM_S3_BASE_URL }}/${{ steps.publish_dcl_react_ecs.outputs.s3-bucket-key }}
ECS_S3_URL: ${{ secrets.SDK_TEAM_S3_BASE_URL }}/${{ steps.publish_ecs.outputs.s3-bucket-key }}
ROLLUP_S3_URL: ${{ secrets.SDK_TEAM_S3_BASE_URL }}/${{ steps.publish_dcl_rollup.outputs.s3-bucket-key }}
JS_RUNTIME_S3_URL: ${{ secrets.SDK_TEAM_S3_BASE_URL }}/${{ steps.publish_dcl_js_runtime.outputs.s3-bucket-key }}
SDK_COMMANDS_S3_URL: ${{ secrets.SDK_TEAM_S3_BASE_URL }}/${{ steps.publish_decentraland_sdk_commands.outputs.s3-bucket-key }}
- name: verify dependency packages are published before @dcl/sdk
if: ${{ !github.event.pull_request.number }}
run: |
VERSION=$(node -p "require('./packages/@dcl/sdk/package.json').version")
echo "Verifying dependency packages are published at version $VERSION"
PACKAGES=("@dcl/js-runtime" "@dcl/ecs" "@dcl/react-ecs" "@dcl/sdk-commands")
MAX_RETRIES=6
RETRY_DELAY=10
for PKG in "${PACKAGES[@]}"; do
echo "Checking $PKG@$VERSION..."
FOUND=0
for ATTEMPT in $(seq 1 $MAX_RETRIES); do
if npm view "$PKG@$VERSION" version > /dev/null 2>&1; then
echo " ✓ $PKG@$VERSION is available on npm"
FOUND=1
break
else
if [ $ATTEMPT -lt $MAX_RETRIES ]; then
echo " Attempt $ATTEMPT/$MAX_RETRIES: $PKG@$VERSION not found, retrying in ${RETRY_DELAY}s..."
sleep $RETRY_DELAY
fi
fi
done
if [ $FOUND -eq 0 ]; then
echo " ✗ $PKG@$VERSION is NOT available on npm after $MAX_RETRIES attempts"
echo ""
echo "ERROR: $PKG@$VERSION is not published"
echo "Please ensure all dependency packages are published before releasing @dcl/sdk"
exit 1
fi
done
echo ""
echo "All dependency packages verified successfully!"
- name: publish @dcl/sdk package
uses: decentraland/oddish-action@master
id: publish_decentraland_sdk
with:
registry-url: 'https://registry.npmjs.org'
access: public
cwd: ./packages/@dcl/sdk
## use action runId instead of current date to generate snapshot numbers
deterministic-snapshot: true
## sign the deployment
provenance: true
## publish every package to s3
s3-bucket: ${{ secrets.SDK_TEAM_S3_BUCKET }}
s3-bucket-region: ${{ secrets.SDK_TEAM_AWS_REGION }}
s3-bucket-key-prefix: '@dcl/js-sdk-toolchain/branch/${{ github.head_ref || github.ref }}'
custom-tag: ${{ env.BRANCH_TAG }}
branch-to-custom-tag: ${{ env.BRANCH_TAG }}
env:
BRANCH_NAME: ${{ github.ref_name }}
NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}
AWS_ACCESS_KEY_ID: ${{ secrets.SDK_TEAM_AWS_ID }}
AWS_SECRET_ACCESS_KEY: ${{ secrets.SDK_TEAM_AWS_SECRET }}
- name: playground upload to s3
run: npx @dcl/cdn-uploader@next --bucket ${{ secrets.SDK_TEAM_S3_BUCKET }} --local-folder $(pwd)/packages/@dcl/playground-assets/dist --bucket-folder '@dcl/js-sdk-toolchain/branch/${{ github.head_ref || github.ref }}/playground-assets'
env:
AWS_ACCESS_KEY_ID: ${{ secrets.SDK_TEAM_AWS_ID }}
AWS_SECRET_ACCESS_KEY: ${{ secrets.SDK_TEAM_AWS_SECRET }}
- name: publish @dcl/playground-assets package
uses: decentraland/oddish-action@master
id: publish_playground_assets
with:
registry-url: 'https://registry.npmjs.org'
access: public
cwd: ./packages/@dcl/playground-assets
## use action runId instead of current date to generate snapshot numbers
deterministic-snapshot: true
## sign the deployment
provenance: true
## publish every package to s3
s3-bucket: ${{ secrets.SDK_TEAM_S3_BUCKET }}
s3-bucket-region: ${{ secrets.SDK_TEAM_AWS_REGION }}
s3-bucket-key-prefix: '@dcl/js-sdk-toolchain/branch/${{ github.head_ref || github.ref }}'
custom-tag: ${{ env.BRANCH_TAG }}
branch-to-custom-tag: ${{ env.BRANCH_TAG }}
env:
BRANCH_NAME: ${{ github.ref_name }}
NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}
AWS_ACCESS_KEY_ID: ${{ secrets.SDK_TEAM_AWS_ID }}
AWS_SECRET_ACCESS_KEY: ${{ secrets.SDK_TEAM_AWS_SECRET }}
notify_deployment:
needs: [build]
if: ${{ github.event.pull_request.number }}
runs-on: ubuntu-latest
name: Deployment Notification
steps:
- uses: actions/github-script@v6
id: get-cloudflare-url
env:
BRANCH: ${{ github.head_ref || github.ref }}
with:
script: return `${process.env.BRANCH.replaceAll('/', '-').substr(0, 28)}.${context.repo.repo}.pages.dev`
result-encoding: string
- name: Find Comment
uses: peter-evans/find-comment@v1
id: fc
with:
issue-number: ${{ github.event.pull_request.number }}
comment-author: 'github-actions[bot]'
body-includes: Test this pull request
- name: Create or update comment
uses: peter-evans/create-or-update-comment@v1
with:
comment-id: ${{ steps.fc.outputs.comment-id }}
issue-number: ${{ github.event.pull_request.number }}
body: |
# Test this pull request
- The `@dcl/sdk` package can be tested in scenes by running
```bash
npm install "${{ secrets.SDK_TEAM_S3_BASE_URL }}/${{ needs.build.outputs.decentraland_sdk_s3_bucket_key }}"
```
- The `@dcl/js-runtime` package can be tested in scenes by running
```bash
npm install "${{ secrets.SDK_TEAM_S3_BASE_URL }}/${{ needs.build.outputs.decentraland_js_runtime_s3_bucket_key }}"
```
- To test with `npx init`
```bash
export SDK_COMMANDS="${{ secrets.SDK_TEAM_S3_BASE_URL }}/${{ needs.build.outputs.decentraland_sdk_commands_s3_bucket_key }}"
npx $SDK_COMMANDS init
```
- The `/changerealm` command to test [test in-world](https://play.decentraland.zone/?realm=${{ secrets.SDK_TEAM_S3_BASE_URL }}/ipfs/${{ github.head_ref || github.ref }}-e2e)
```
/changerealm ${{ secrets.SDK_TEAM_S3_BASE_URL }}/ipfs/${{ github.head_ref || github.ref }}-e2e
```
- You can preview this build entering:
https://playground.decentraland.org/?sdk-branch=${{ github.head_ref || github.ref }}
edit-mode: replace
- name: Test SDK Install S3 URL
run: mkdir -p test_sdk_s3 && cd test_sdk_s3 && npm init --yes && npm install "${{ secrets.SDK_TEAM_S3_BASE_URL }}/${{ needs.build.outputs.decentraland_sdk_s3_bucket_key }}"
cli_e2e:
name: CLI E2E
needs: [build]
runs-on: ubuntu-latest
steps:
- uses: actions/setup-node@v3
with:
node-version: 24.16.0
- run: mkdir -p scene
- name: npx @dcl/sdk-commands init --skip-install
run: npx ${{ secrets.SDK_TEAM_S3_BASE_URL }}/${{ needs.build.outputs.decentraland_sdk_commands_s3_bucket_key }} init --skip-install
working-directory: scene
- name: install rest of the dependencies
run: npm install
working-directory: scene
- name: install CI version of @dcl/sdk
run: npm install ${{ secrets.SDK_TEAM_S3_BASE_URL }}/${{ needs.build.outputs.decentraland_sdk_s3_bucket_key }}
working-directory: scene
- name: npm run build
run: npm run build
working-directory: scene
- name: Set Realm Name
run: |
modified_realm=$(echo "${{ github.head_ref || github.ref }}" | tr '/.' '-' | tr -d '@')
echo "REALM_NAME=${modified_realm}" >> $GITHUB_ENV
- name: export-static
run: >
npx ${{ secrets.SDK_TEAM_S3_BASE_URL }}/${{ needs.build.outputs.decentraland_sdk_commands_s3_bucket_key }} \
export-static \
--realmName ${{ env.REALM_NAME }}-e2e \
--commsAdapter ws-room:ws-room-service.decentraland.org/rooms/sdk-${{ github.sha }} \
--baseUrl ${{ secrets.SDK_TEAM_S3_BASE_URL }}/ipfs \
--dir scene \
--destination $(pwd)/out-static
- name: upload to s3
run: >
npx @dcl/cdn-uploader@next \
--bucket ${{ secrets.SDK_TEAM_S3_BUCKET }} \
--local-folder $(pwd)/out-static \
--bucket-folder 'ipfs'
env:
AWS_ACCESS_KEY_ID: ${{ secrets.SDK_TEAM_AWS_ID }}
AWS_SECRET_ACCESS_KEY: ${{ secrets.SDK_TEAM_AWS_SECRET }}
check-local-deps:
name: Check for development dependencies
needs: [build]
runs-on: ubuntu-latest
if: >
(github.event_name == 'pull_request' && github.event.pull_request.base.ref == 'main') ||
github.ref == 'refs/heads/main'
steps:
- uses: actions/checkout@v3
- uses: actions/setup-node@v3
with:
node-version: 24.16.0
- name: Download prepared packages
uses: actions/download-artifact@v4
with:
name: built-artifacts
path: downloaded-packages
- name: Set up artifacts for checking
run: |
echo "Setting up built artifacts for checking..."
mkdir -p extracted-packages
# Extract all packages to separate directories
find downloaded-packages -type f -name "*.tgz" | while read pkg; do
if [ -f "$pkg" ]; then
# Get package name from the filename
pkg_name=$(basename "$pkg" .tgz)
# Create directory for this package
mkdir -p "extracted-packages/$pkg_name"
echo "Extracting $pkg to extracted-packages/$pkg_name"
tar -xzf "$pkg" -C "extracted-packages/$pkg_name"
fi
done
# List all extracted packages
echo "Extracted packages:"
find extracted-packages -name "package.json" | sort
- name: Check for local package dependencies
id: dependency-check
continue-on-error: true
run: |
set +e
node .github/scripts/check-no-local-packages.cjs ./extracted-packages > check-output.txt 2>&1
check_exit_code=$?
set -e
echo "Full output from dependency check:"
cat check-output.txt
if [ $check_exit_code -ne 0 ]; then
grep -i "dependency " check-output.txt > dependency-errors.txt || echo "No specific dependency errors found" > dependency-errors.txt
if [ ! -s dependency-errors.txt ]; then
echo "⚠️ No specific dependency errors found" > dependency-errors.txt
fi
exit 1
fi
- name: Generate comment content
if: steps.dependency-check.outcome == 'failure'
run: |
echo "## ⚠️ Local Dependencies Detected" >> dependency-check-comment.md
echo "This PR contains package dependencies that use local paths (\`file:\`) or non-allowed URLs (\`http:\`, \`https:\`, \`git:\`)." >> dependency-check-comment.md
echo "These must be published and referenced properly before merging." >> dependency-check-comment.md
echo "### Not allowed dependencies:" >> dependency-check-comment.md
echo '```' >> dependency-check-comment.md
cat dependency-errors.txt >> dependency-check-comment.md
echo '```' >> dependency-check-comment.md
echo "Review the workflow logs for more details." >> dependency-check-comment.md
echo "> **Note:** This comment is automatically updated when the PR is updated." >> dependency-check-comment.md
- name: Find Local Dependencies Comment if check fails
if: ${{ github.event_name == 'pull_request' && steps.dependency-check.outcome == 'failure' }}
uses: peter-evans/find-comment@v3
id: fc-local-deps
with:
issue-number: ${{ github.event.pull_request.number }}
comment-author: 'github-actions[bot]'
body-includes: Local Dependencies Detected
- name: Create or update Local Dependencies Comment if check fails
if: ${{ github.event_name == 'pull_request' && steps.dependency-check.outcome == 'failure' }}
uses: peter-evans/create-or-update-comment@v4
with:
comment-id: ${{ steps.fc-local-deps.outputs.comment-id }}
issue-number: ${{ github.event.pull_request.number }}
body-path: dependency-check-comment.md
edit-mode: replace
- name: Fail check if local dependencies found
if: steps.dependency-check.outcome == 'failure'
run: |
echo "❌ Local package dependencies detected! These must be fixed before merging."
exit 1