diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index d59e4c488..b43a0bfc3 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -13,8 +13,8 @@ jobs: runs-on: ubuntu-latest steps: - uses: actions/checkout@v6 - with: - lfs: true + with: + fetch-depth: 100 - uses: actions/setup-node@v6 with: node-version: 'lts/*' @@ -31,8 +31,8 @@ jobs: runs-on: ubuntu-latest steps: - uses: actions/checkout@v6 - with: - lfs: true + with: + fetch-depth: 100 - uses: actions/setup-node@v6 with: node-version: 'lts/*' @@ -56,8 +56,8 @@ jobs: runs-on: ubuntu-latest steps: - uses: actions/checkout@v6 - with: - lfs: true + with: + fetch-depth: 100 - uses: actions/setup-node@v6 with: node-version: 'lts/*' @@ -80,19 +80,10 @@ jobs: build_kotlin: name: Build and Test Kotlin runs-on: ubuntu-latest - env: - OSSRH_USERNAME: ${{secrets.OSSRH_USERNAME}} - OSSRH_PASSWORD: ${{secrets.OSSRH_PASSWORD}} - OSSRH_USERTOKEN_USERNAME: ${{secrets.OSSRH_USERTOKEN_USERNAME}} - OSSRH_USERTOKEN_PASSWORD: ${{secrets.OSSRH_USERTOKEN_PASSWORD}} - SONATYPE_STAGING_PROFILE_ID: ${{secrets.SONATYPE_STAGING_PROFILE_ID}} - SONATYPE_SIGNING_KEY_ID: ${{secrets.SONATYPE_SIGNING_KEY_ID}} - SONATYPE_SIGNING_PASSWORD: ${{secrets.SONATYPE_SIGNING_PASSWORD}} - SONATYPE_SIGNING_KEY: ${{secrets.SONATYPE_SIGNING_KEY}} steps: - uses: actions/checkout@v6 - with: - lfs: true + with: + fetch-depth: 100 - uses: actions/setup-node@v6 with: node-version: 'lts/*' diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml index 441cf161d..9e2f8a23c 100644 --- a/.github/workflows/publish.yml +++ b/.github/workflows/publish.yml @@ -6,139 +6,21 @@ on: workflow_dispatch: jobs: - check_sha: - name: check_sha - runs-on: ubuntu-latest - outputs: - hit: ${{ steps.cache.outputs.cache-hit == 'true' }} - steps: - - run: touch dummy.txt - - - uses: actions/cache@v5 - id: cache - with: - path: dummy.txt - key: check-sha-${{ github.sha }} - - nighty_web: - name: Web - needs: check_sha - if: needs.check_sha.outputs.hit == 'false' - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v6 - with: - lfs: true - - uses: actions/setup-node@v6 - with: - node-version: 'lts/*' - cache: 'npm' - - - run: npm run update-version -- alpha ${{github.run_number}} - - run: npm ci - - run: npm run build-web - - run: npm run build-language-server - - run: npm run build-monaco - - run: npm pack - working-directory: ./packages/alphatab/ - - run: npm pack - working-directory: ./packages/vite/ - - run: npm pack - working-directory: ./packages/webpack/ - - run: npm pack - working-directory: ./packages/lsp/ - - run: npm pack - working-directory: ./packages/monaco/ - - - uses: actions/setup-node@v6 - with: - node-version: 'lts/*' - registry-url: https://registry.npmjs.org/ - - - run: npm publish --access public --tag alpha - working-directory: ./packages/alphatab/ - env: - NODE_AUTH_TOKEN: ${{secrets.NPMJS_AUTH_TOKEN}} - - - run: npm publish --access public --tag alpha - working-directory: ./packages/vite/ - env: - NODE_AUTH_TOKEN: ${{secrets.NPMJS_AUTH_TOKEN}} - - - run: npm publish --access public --tag alpha - working-directory: ./packages/webpack/ - env: - NODE_AUTH_TOKEN: ${{secrets.NPMJS_AUTH_TOKEN}} - - - run: npm publish --access public --tag alpha - working-directory: ./packages/lsp/ - env: - NODE_AUTH_TOKEN: ${{secrets.NPMJS_AUTH_TOKEN}} - - - run: npm publish --access public --tag alpha - working-directory: ./packages/monaco/ - env: - NODE_AUTH_TOKEN: ${{secrets.NPMJS_AUTH_TOKEN}} - - nightly_csharp: - name: C# - needs: check_sha - if: needs.check_sha.outputs.hit == 'false' - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v6 - with: - lfs: true - - uses: actions/setup-node@v6 - with: - node-version: 'lts/*' - cache: 'npm' - - - uses: actions/setup-dotnet@v5 - with: - dotnet-version: "8" - - - run: npm run update-version -- alpha ${{github.run_number}} - - run: npm ci - - run: npm run build-csharp - - - run: dotnet nuget push AlphaTab/bin/Release/*.nupkg -k ${{secrets.NUGET_API_KEY}} -s https://api.nuget.org/v3/index.json - working-directory: ./packages/csharp/src/ - - run: dotnet nuget push AlphaTab.Windows/bin/Release/*.nupkg -k ${{secrets.NUGET_API_KEY}} -s https://api.nuget.org/v3/index.json - working-directory: ./packages/csharp/src/ - - nightly_kotlin_android: - name: Kotlin (Android) - needs: check_sha - if: needs.check_sha.outputs.hit == 'false' - runs-on: ubuntu-latest - env: - ORG_GRADLE_PROJECT_mavenCentralUsername: ${{secrets.OSSRH_USERTOKEN_USERNAME}} - ORG_GRADLE_PROJECT_mavenCentralPassword: ${{secrets.OSSRH_USERTOKEN_PASSWORD}} - ORG_GRADLE_PROJECT_signingInMemoryKeyId: ${{secrets.SONATYPE_SIGNING_KEY_ID}} - ORG_GRADLE_PROJECT_signingInMemoryKeyPassword: ${{secrets.SONATYPE_SIGNING_PASSWORD}} - ORG_GRADLE_PROJECT_signingInMemoryKey: ${{secrets.SONATYPE_SIGNING_KEY}} - steps: - - uses: actions/checkout@v6 - with: - lfs: true - - uses: actions/setup-node@v6 - with: - node-version: 'lts/*' - cache: 'npm' - - - uses: actions/setup-java@v5 - with: - java-version: "19" - distribution: "temurin" - - - run: npm run update-version -- alpha ${{github.run_number}} - - run: npm ci - - run: npm run build-kotlin - - - run: ./gradlew publishToMavenCentral - working-directory: ./packages/kotlin/src/ - - - run: ./gradlew --stop - working-directory: ./packages/kotlin/src/ - + web: + uses: ./.github/workflows/~publish_web.yml + secrets: inherit + with: + version: alpha ${{github.run_number}} + npm_tag: alpha + + dotnet: + uses: ./.github/workflows/~publish_dotnet.yml + secrets: inherit + with: + version: alpha ${{github.run_number}} + + kotlin: + uses: ./.github/workflows/~publish_kotlin.yml + secrets: inherit + with: + version: alpha ${{github.run_number}} \ No newline at end of file diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index cad9beecc..44492ba0f 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -19,116 +19,27 @@ on: default: true jobs: - release_web: - name: Web - runs-on: ubuntu-latest + web: + uses: ./.github/workflows/~publish_web.yml + secrets: inherit if: (github.event_name == 'push') || (github.event_name == 'workflow_dispatch' && github.event.inputs.release_web == 'true') - steps: - - uses: actions/checkout@v6 - with: - lfs: true - - uses: actions/setup-node@v6 - with: - node-version: 'lts/*' - - - run: npm run update-version -- ${{github.run_number}} - - run: npm ci - - run: npm run build-web - - run: npm run build-language-server - - run: npm run build-monaco - - run: npm pack - working-directory: ./packages/alphatab/ - - run: npm pack - working-directory: ./packages/vite/ - - run: npm pack - working-directory: ./packages/webpack/ - - run: npm pack - working-directory: ./packages/lsp/ - - run: npm pack - working-directory: ./packages/monaco/ - - uses: actions/setup-node@v6 - with: - node-version: 'lts/*' - registry-url: https://registry.npmjs.org/ - - name: Publish to NPM (alphaTab release) - run: npm publish --access public - working-directory: ./packages/alphatab/ - env: - NODE_AUTH_TOKEN: ${{secrets.NPMJS_AUTH_TOKEN}} - - name: Publish to NPM (Vite Plugin release) - run: npm publish --access public - working-directory: ./packages/vite/ - env: - NODE_AUTH_TOKEN: ${{secrets.NPMJS_AUTH_TOKEN}} - - name: Publish to NPM (Webpack release) - run: npm publish --access public - working-directory: ./packages/webpack/ - env: - NODE_AUTH_TOKEN: ${{secrets.NPMJS_AUTH_TOKEN}} - - name: Publish to NPM (Language Server release) - run: npm publish --access public - working-directory: ./packages/lsp/ - env: - NODE_AUTH_TOKEN: ${{secrets.NPMJS_AUTH_TOKEN}} - - name: Publish to NPM (Monaco release) - run: npm publish --access public - working-directory: ./packages/monaco/ - env: - NODE_AUTH_TOKEN: ${{secrets.NPMJS_AUTH_TOKEN}} - - release_csharp: - name: C# - runs-on: ubuntu-latest + with: + version: ${{github.run_number}} + npm_tag: latest + force: true + + dotnet: + uses: ./.github/workflows/~publish_dotnet.yml + secrets: inherit if: (github.event_name == 'push') || (github.event_name == 'workflow_dispatch' && github.event.inputs.release_csharp == 'true') - steps: - - uses: actions/checkout@v6 - with: - lfs: true - - uses: actions/setup-node@v6 - with: - node-version: 'lts/*' - - uses: actions/setup-dotnet@v5 - with: - dotnet-version: '8' - env: - NUGET_AUTH_TOKEN: ${{secrets.NUGET_API_KEY}} - - run: npm run update-version -- ${{github.run_number}} - - run: npm ci - - run: npm run build-csharp - - run: dotnet nuget push AlphaTab/bin/Release/*.nupkg -k ${{secrets.NUGET_API_KEY}} -s https://api.nuget.org/v3/index.json --skip-duplicate - working-directory: ./packages/csharp/src/ - - run: dotnet nuget push AlphaTab.Windows/bin/Release/*.nupkg -k ${{secrets.NUGET_API_KEY}} -s https://api.nuget.org/v3/index.json --skip-duplicate - working-directory: ./packages/csharp/src/ + with: + version: ${{github.run_number}} + force: true - release_kotlin_android: - name: Kotlin (Android) - runs-on: windows-latest + kotlin: + uses: ./.github/workflows/~publish_kotlin.yml + secrets: inherit if: (github.event_name == 'push') || (github.event_name == 'workflow_dispatch' && github.event.inputs.release_kotlin_android == 'true') - env: - ORG_GRADLE_PROJECT_mavenCentralUsername: ${{secrets.OSSRH_USERTOKEN_USERNAME}} - ORG_GRADLE_PROJECT_mavenCentralPassword: ${{secrets.OSSRH_USERTOKEN_PASSWORD}} - ORG_GRADLE_PROJECT_signingInMemoryKeyId: ${{secrets.SONATYPE_SIGNING_KEY_ID}} - ORG_GRADLE_PROJECT_signingInMemoryKeyPassword: ${{secrets.SONATYPE_SIGNING_PASSWORD}} - ORG_GRADLE_PROJECT_signingInMemoryKey: ${{secrets.SONATYPE_SIGNING_KEY}} - steps: - - uses: actions/checkout@v6 - with: - lfs: true - - uses: actions/setup-node@v6 - with: - node-version: 'lts/*' - - - uses: actions/setup-java@v5 - with: - java-version: "19" - distribution: "temurin" - - - run: npm run update-version -- ${{github.run_number}} - - run: npm ci - - run: npm run build-kotlin - - run: ./gradlew publishToMavenCentral - working-directory: ./packages/kotlin/src/ - - - run: ./gradlew --stop - working-directory: ./packages/kotlin/src/ - + with: + version: ${{github.run_number}} + force: true \ No newline at end of file diff --git a/.github/workflows/~publish_dotnet.yml b/.github/workflows/~publish_dotnet.yml new file mode 100644 index 000000000..5655bc8f8 --- /dev/null +++ b/.github/workflows/~publish_dotnet.yml @@ -0,0 +1,50 @@ +on: + workflow_call: + inputs: + version: + type: string + required: true + force: + type: boolean + default: false + +jobs: + check: + runs-on: ubuntu-latest + outputs: + has_changes: ${{ steps.check.outputs.has_changes }} + steps: + - uses: actions/checkout@v6 + with: + fetch-depth: 100 + - uses: actions/setup-node@v6 + with: + node-version: 'lts/*' + cache: 'npm' + - run: npm run nightly-check -- --platform dotnet --force ${{ inputs.force }} + id: check + + build: + needs: check + if: needs.check.outputs.has_changes == 'true' + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v6 + with: + fetch-depth: 100 + - uses: actions/setup-node@v6 + with: + node-version: 'lts/*' + cache: 'npm' + - uses: actions/setup-dotnet@v5 + with: + dotnet-version: "8" + + - run: npm run update-version -- ${{inputs.version}} + - run: npm ci + - run: npm run build-csharp + + - run: npm run nightly-pack -- --platform dotnet --force ${{ inputs.force }} + - run: npm run nightly-publish -- --platform dotnet --force ${{ inputs.force }} + env: + NUGET_API_KEY: ${{ secrets.NUGET_API_KEY }} diff --git a/.github/workflows/~publish_kotlin.yml b/.github/workflows/~publish_kotlin.yml new file mode 100644 index 000000000..25bc40a78 --- /dev/null +++ b/.github/workflows/~publish_kotlin.yml @@ -0,0 +1,55 @@ +on: + workflow_call: + inputs: + version: + type: string + required: true + force: + type: boolean + default: false + +jobs: + check: + runs-on: ubuntu-latest + outputs: + has_changes: ${{ steps.check.outputs.has_changes }} + steps: + - uses: actions/checkout@v6 + with: + fetch-depth: 100 + - uses: actions/setup-node@v6 + with: + node-version: 'lts/*' + cache: 'npm' + - run: npm run nightly-check -- --platform kotlin --force ${{ inputs.force }} + id: check + + build: + needs: check + if: needs.check.outputs.has_changes == 'true' + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v6 + with: + fetch-depth: 100 + - uses: actions/setup-node@v6 + with: + node-version: 'lts/*' + cache: 'npm' + - uses: actions/setup-java@v5 + with: + java-version: "19" + distribution: "temurin" + + - run: npm run update-version -- ${{inputs.version}} + - run: npm ci + - run: npm run build-kotlin + + - run: npm run nightly-pack -- --platform kotlin --force ${{ inputs.force }} + - run: npm run nightly-publish -- --platform kotlin --force ${{ inputs.force }} + env: + ORG_GRADLE_PROJECT_mavenCentralUsername: ${{secrets.OSSRH_USERTOKEN_USERNAME}} + ORG_GRADLE_PROJECT_mavenCentralPassword: ${{secrets.OSSRH_USERTOKEN_PASSWORD}} + ORG_GRADLE_PROJECT_signingInMemoryKeyId: ${{secrets.SONATYPE_SIGNING_KEY_ID}} + ORG_GRADLE_PROJECT_signingInMemoryKeyPassword: ${{secrets.SONATYPE_SIGNING_PASSWORD}} + ORG_GRADLE_PROJECT_signingInMemoryKey: ${{secrets.SONATYPE_SIGNING_KEY}} diff --git a/.github/workflows/~publish_web.yml b/.github/workflows/~publish_web.yml new file mode 100644 index 000000000..4b79f8d0b --- /dev/null +++ b/.github/workflows/~publish_web.yml @@ -0,0 +1,54 @@ +on: + workflow_call: + inputs: + version: + type: string + required: true + force: + type: boolean + default: false + npm_tag: + type: string + required: true + + +jobs: + check: + runs-on: ubuntu-latest + outputs: + has_changes: ${{ steps.check.outputs.has_changes }} + steps: + - uses: actions/checkout@v6 + with: + fetch-depth: 100 + - uses: actions/setup-node@v6 + with: + node-version: 'lts/*' + cache: 'npm' + - run: npm run nightly-check -- --platform web --force ${{ inputs.force }} + id: check + + build: + needs: check + if: needs.check.outputs.has_changes == 'true' + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v6 + with: + fetch-depth: 100 + - uses: actions/setup-node@v6 + with: + node-version: 'lts/*' + cache: 'npm' + registry-url: https://registry.npmjs.org/ + + - run: npm run update-version -- ${{inputs.version}} + - run: npm ci + - run: npm run build-web + - run: npm run build-language-server + - run: npm run build-monaco + + - run: npm run nightly-pack -- --platform web --force ${{ inputs.force }} + - run: npm run nightly-publish -- --platform web --force ${{ inputs.force }} --tag ${{ inputs.npm_tag }} + env: + NODE_AUTH_TOKEN: ${{ secrets.NPMJS_AUTH_TOKEN }} diff --git a/package-lock.json b/package-lock.json index be765f55d..fd41fa5b5 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "@coderline/alphatab-monorepo", - "version": "1.8.1", + "version": "1.9.0", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "@coderline/alphatab-monorepo", - "version": "1.8.1", + "version": "1.9.0", "workspaces": [ "packages/*" ], @@ -51,7 +51,6 @@ "version": "7.28.3", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "@ampproject/remapping": "^2.2.0", "@babel/code-frame": "^7.27.1", @@ -473,7 +472,9 @@ } }, "node_modules/@biomejs/biome": { - "version": "2.3.11", + "version": "2.3.13", + "resolved": "https://registry.npmjs.org/@biomejs/biome/-/biome-2.3.13.tgz", + "integrity": "sha512-Fw7UsV0UAtWIBIm0M7g5CRerpu1eKyKAXIazzxhbXYUyMkwNrkX/KLkGI7b+uVDQ5cLUMfOC9vR60q9IDYDstA==", "dev": true, "license": "MIT OR Apache-2.0", "bin": { @@ -487,18 +488,88 @@ "url": "https://opencollective.com/biome" }, "optionalDependencies": { - "@biomejs/cli-darwin-arm64": "2.3.11", - "@biomejs/cli-darwin-x64": "2.3.11", - "@biomejs/cli-linux-arm64": "2.3.11", - "@biomejs/cli-linux-arm64-musl": "2.3.11", - "@biomejs/cli-linux-x64": "2.3.11", - "@biomejs/cli-linux-x64-musl": "2.3.11", - "@biomejs/cli-win32-arm64": "2.3.11", - "@biomejs/cli-win32-x64": "2.3.11" + "@biomejs/cli-darwin-arm64": "2.3.13", + "@biomejs/cli-darwin-x64": "2.3.13", + "@biomejs/cli-linux-arm64": "2.3.13", + "@biomejs/cli-linux-arm64-musl": "2.3.13", + "@biomejs/cli-linux-x64": "2.3.13", + "@biomejs/cli-linux-x64-musl": "2.3.13", + "@biomejs/cli-win32-arm64": "2.3.13", + "@biomejs/cli-win32-x64": "2.3.13" + } + }, + "node_modules/@biomejs/cli-darwin-arm64": { + "version": "2.3.13", + "resolved": "https://registry.npmjs.org/@biomejs/cli-darwin-arm64/-/cli-darwin-arm64-2.3.13.tgz", + "integrity": "sha512-0OCwP0/BoKzyJHnFdaTk/i7hIP9JHH9oJJq6hrSCPmJPo8JWcJhprK4gQlhFzrwdTBAW4Bjt/RmCf3ZZe59gwQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT OR Apache-2.0", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=14.21.3" + } + }, + "node_modules/@biomejs/cli-darwin-x64": { + "version": "2.3.13", + "resolved": "https://registry.npmjs.org/@biomejs/cli-darwin-x64/-/cli-darwin-x64-2.3.13.tgz", + "integrity": "sha512-AGr8OoemT/ejynbIu56qeil2+F2WLkIjn2d8jGK1JkchxnMUhYOfnqc9sVzcRxpG9Ycvw4weQ5sprRvtb7Yhcw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT OR Apache-2.0", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=14.21.3" + } + }, + "node_modules/@biomejs/cli-linux-arm64": { + "version": "2.3.13", + "resolved": "https://registry.npmjs.org/@biomejs/cli-linux-arm64/-/cli-linux-arm64-2.3.13.tgz", + "integrity": "sha512-xvOiFkrDNu607MPMBUQ6huHmBG1PZLOrqhtK6pXJW3GjfVqJg0Z/qpTdhXfcqWdSZHcT+Nct2fOgewZvytESkw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT OR Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=14.21.3" + } + }, + "node_modules/@biomejs/cli-linux-arm64-musl": { + "version": "2.3.13", + "resolved": "https://registry.npmjs.org/@biomejs/cli-linux-arm64-musl/-/cli-linux-arm64-musl-2.3.13.tgz", + "integrity": "sha512-TUdDCSY+Eo/EHjhJz7P2GnWwfqet+lFxBZzGHldrvULr59AgahamLs/N85SC4+bdF86EhqDuuw9rYLvLFWWlXA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT OR Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=14.21.3" } }, "node_modules/@biomejs/cli-linux-x64": { - "version": "2.3.11", + "version": "2.3.13", + "resolved": "https://registry.npmjs.org/@biomejs/cli-linux-x64/-/cli-linux-x64-2.3.13.tgz", + "integrity": "sha512-s+YsZlgiXNq8XkgHs6xdvKDFOj/bwTEevqEY6rC2I3cBHbxXYU1LOZstH3Ffw9hE5tE1sqT7U23C00MzkXztMw==", "cpu": [ "x64" ], @@ -513,7 +584,9 @@ } }, "node_modules/@biomejs/cli-linux-x64-musl": { - "version": "2.3.11", + "version": "2.3.13", + "resolved": "https://registry.npmjs.org/@biomejs/cli-linux-x64-musl/-/cli-linux-x64-musl-2.3.13.tgz", + "integrity": "sha512-0bdwFVSbbM//Sds6OjtnmQGp4eUjOTt6kHvR/1P0ieR9GcTUAlPNvPC3DiavTqq302W34Ae2T6u5VVNGuQtGlQ==", "cpu": [ "x64" ], @@ -527,6 +600,40 @@ "node": ">=14.21.3" } }, + "node_modules/@biomejs/cli-win32-arm64": { + "version": "2.3.13", + "resolved": "https://registry.npmjs.org/@biomejs/cli-win32-arm64/-/cli-win32-arm64-2.3.13.tgz", + "integrity": "sha512-QweDxY89fq0VvrxME+wS/BXKmqMrOTZlN9SqQ79kQSIc3FrEwvW/PvUegQF6XIVaekncDykB5dzPqjbwSKs9DA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT OR Apache-2.0", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=14.21.3" + } + }, + "node_modules/@biomejs/cli-win32-x64": { + "version": "2.3.13", + "resolved": "https://registry.npmjs.org/@biomejs/cli-win32-x64/-/cli-win32-x64-2.3.13.tgz", + "integrity": "sha512-trDw2ogdM2lyav9WFQsdsfdVy1dvZALymRpgmWsvSez0BJzBjulhOT/t+wyKeh3pZWvwP3VMs1SoOKwO3wecMQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT OR Apache-2.0", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=14.21.3" + } + }, "node_modules/@coderline/alphaskia": { "version": "3.4.135", "dev": true, @@ -972,7 +1079,9 @@ } }, "node_modules/@microsoft/api-extractor": { - "version": "7.55.2", + "version": "7.56.0", + "resolved": "https://registry.npmjs.org/@microsoft/api-extractor/-/api-extractor-7.56.0.tgz", + "integrity": "sha512-H0V69QG5jIb9Ayx35NVBv2lOgFSS3q+Eab2oyGEy0POL3ovYPST+rCNPbwYoczOZXNG8IKjWUmmAMxmDTsXlQA==", "dev": true, "license": "MIT", "dependencies": { @@ -981,8 +1090,8 @@ "@microsoft/tsdoc-config": "~0.18.0", "@rushstack/node-core-library": "5.19.1", "@rushstack/rig-package": "0.6.0", - "@rushstack/terminal": "0.19.5", - "@rushstack/ts-command-line": "5.1.5", + "@rushstack/terminal": "0.21.0", + "@rushstack/ts-command-line": "5.1.7", "diff": "~8.0.2", "lodash": "~4.17.15", "minimatch": "10.0.3", @@ -1064,7 +1173,6 @@ "node_modules/@popperjs/core": { "version": "2.11.8", "license": "MIT", - "peer": true, "funding": { "type": "opencollective", "url": "https://opencollective.com/popperjs" @@ -1222,6 +1330,8 @@ }, "node_modules/@rushstack/problem-matcher": { "version": "0.1.1", + "resolved": "https://registry.npmjs.org/@rushstack/problem-matcher/-/problem-matcher-0.1.1.tgz", + "integrity": "sha512-Fm5XtS7+G8HLcJHCWpES5VmeMyjAKaWeyZU5qPzZC+22mPlJzAsOxymHiWIfuirtPckX3aptWws+K2d0BzniJA==", "dev": true, "license": "MIT", "peerDependencies": { @@ -1243,7 +1353,9 @@ } }, "node_modules/@rushstack/terminal": { - "version": "0.19.5", + "version": "0.21.0", + "resolved": "https://registry.npmjs.org/@rushstack/terminal/-/terminal-0.21.0.tgz", + "integrity": "sha512-cLaI4HwCNYmknM5ns4G+drqdEB6q3dCPV423+d3TZeBusYSSm09+nR7CnhzJMjJqeRcdMAaLnrA4M/3xDz4R3w==", "dev": true, "license": "MIT", "dependencies": { @@ -1261,11 +1373,13 @@ } }, "node_modules/@rushstack/ts-command-line": { - "version": "5.1.5", + "version": "5.1.7", + "resolved": "https://registry.npmjs.org/@rushstack/ts-command-line/-/ts-command-line-5.1.7.tgz", + "integrity": "sha512-Ugwl6flarZcL2nqH5IXFYk3UR3mBVDsVFlCQW/Oaqidvdb/5Ota6b/Z3JXWIdqV3rOR2/JrYoAHanWF5rgenXA==", "dev": true, "license": "MIT", "dependencies": { - "@rushstack/terminal": "0.19.5", + "@rushstack/terminal": "0.21.0", "@types/argparse": "1.0.38", "argparse": "~1.0.9", "string-argv": "~0.3.1" @@ -1278,6 +1392,8 @@ }, "node_modules/@types/argparse": { "version": "1.0.38", + "resolved": "https://registry.npmjs.org/@types/argparse/-/argparse-1.0.38.tgz", + "integrity": "sha512-ebDJ9b0e702Yr7pWgB0jzm+CX4Srzz8RcXtLJDJB+BSccqMa36uyH/zUsSYao5+BD1ytv3k3rPYCq4mAE1hsXA==", "dev": true, "license": "MIT" }, @@ -1363,9 +1479,9 @@ "license": "MIT" }, "node_modules/@types/node": { - "version": "25.0.6", - "resolved": "https://registry.npmjs.org/@types/node/-/node-25.0.6.tgz", - "integrity": "sha512-NNu0sjyNxpoiW3YuVFfNz7mxSQ+S4X2G28uqg2s+CzoqoQjLPsWSbsFFyztIAqt2vb8kfEAsJNepMGPTxFDx3Q==", + "version": "25.2.0", + "resolved": "https://registry.npmjs.org/@types/node/-/node-25.2.0.tgz", + "integrity": "sha512-DZ8VwRFUNzuqJ5khrvwMXHmvPe+zGayJhr2CDNiKB1WBE1ST8Djl00D0IC4vvNmHMdj6DlbYRIaFE7WHjlDl5w==", "license": "MIT", "dependencies": { "undici-types": "~7.16.0" @@ -1705,7 +1821,6 @@ "node_modules/acorn": { "version": "8.15.0", "license": "MIT", - "peer": true, "bin": { "acorn": "bin/acorn" }, @@ -1734,7 +1849,6 @@ "node_modules/ajv": { "version": "8.12.0", "license": "MIT", - "peer": true, "dependencies": { "fast-deep-equal": "^3.1.1", "json-schema-traverse": "^1.0.0", @@ -2013,7 +2127,6 @@ } ], "license": "MIT", - "peer": true, "dependencies": { "baseline-browser-mapping": "^2.9.0", "caniuse-lite": "^1.0.30001759", @@ -3376,7 +3489,9 @@ } }, "node_modules/html-webpack-plugin": { - "version": "5.6.5", + "version": "5.6.6", + "resolved": "https://registry.npmjs.org/html-webpack-plugin/-/html-webpack-plugin-5.6.6.tgz", + "integrity": "sha512-bLjW01UTrvoWTJQL5LsMRo1SypHW80FTm12OJRSnr3v6YHNhfe+1r0MYUZJMACxnCHURVnBWRwAsWs2yPU9Ezw==", "dev": true, "license": "MIT", "dependencies": { @@ -4879,7 +4994,9 @@ } }, "node_modules/p-map": { - "version": "7.0.3", + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-7.0.4.tgz", + "integrity": "sha512-tkAQEw8ysMzmkhgw8k+1U/iPhWNhykKnSk4Rd5zLoPJCuJaGRPo6YposrZgaxHKzDHdDWWZvE/Sk7hsL2X/CpQ==", "dev": true, "license": "MIT", "engines": { @@ -5343,7 +5460,6 @@ "node_modules/rollup": { "version": "4.50.0", "license": "MIT", - "peer": true, "dependencies": { "@types/estree": "1.0.8" }, @@ -5812,6 +5928,8 @@ }, "node_modules/string-argv": { "version": "0.3.2", + "resolved": "https://registry.npmjs.org/string-argv/-/string-argv-0.3.2.tgz", + "integrity": "sha512-aqD2Q0144Z+/RqG52NeHEkZauTAUWJO8c6yTftGJKO3Tja5tUgIfmIl6kExvhtxSDP7fXB6DvzkfMpCd/F3G+Q==", "dev": true, "license": "MIT", "engines": { @@ -5967,7 +6085,9 @@ } }, "node_modules/terser": { - "version": "5.44.1", + "version": "5.46.0", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.46.0.tgz", + "integrity": "sha512-jTwoImyr/QbOWFFso3YoU3ik0jBBDJ6JTOQiy/J2YxVJdZCc+5u7skhNwiOR3FQIygFqVUPHl7qbbxtjW2K3Qg==", "license": "BSD-2-Clause", "dependencies": { "@jridgewell/source-map": "^0.3.3", @@ -6173,7 +6293,6 @@ "version": "5.9.3", "dev": true, "license": "Apache-2.0", - "peer": true, "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" @@ -6280,7 +6399,6 @@ "resolved": "https://registry.npmjs.org/vite/-/vite-7.3.1.tgz", "integrity": "sha512-w+N7Hifpc3gRjZ63vYBXA56dvvRlNWRczTdmCBBa+CotUzAPf5b7YMdMR/8CQoeYE5LX3W4wj6RYTgonm1b9DA==", "license": "MIT", - "peer": true, "dependencies": { "esbuild": "^0.27.0", "fdir": "^6.5.0", @@ -6351,18 +6469,24 @@ } }, "node_modules/vite-plugin-static-copy": { - "version": "3.1.4", + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/vite-plugin-static-copy/-/vite-plugin-static-copy-3.2.0.tgz", + "integrity": "sha512-g2k9z8B/1Bx7D4wnFjPLx9dyYGrqWMLTpwTtPHhcU+ElNZP2O4+4OsyaficiDClus0dzVhdGvoGFYMJxoXZ12Q==", "dev": true, "license": "MIT", "dependencies": { "chokidar": "^3.6.0", - "p-map": "^7.0.3", + "p-map": "^7.0.4", "picocolors": "^1.1.1", "tinyglobby": "^0.2.15" }, "engines": { "node": "^18.0.0 || >=20.0.0" }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/sapphi-red" + }, "peerDependencies": { "vite": "^5.0.0 || ^6.0.0 || ^7.0.0" } @@ -6413,24 +6537,18 @@ } }, "node_modules/vite-tsconfig-paths": { - "version": "6.0.4", - "resolved": "https://registry.npmjs.org/vite-tsconfig-paths/-/vite-tsconfig-paths-6.0.4.tgz", - "integrity": "sha512-iIsEJ+ek5KqRTK17pmxtgIxXtqr3qDdE6OxrP9mVeGhVDNXRJTKN/l9oMbujTQNzMLe6XZ8qmpztfbkPu2TiFQ==", + "version": "6.0.5", + "resolved": "https://registry.npmjs.org/vite-tsconfig-paths/-/vite-tsconfig-paths-6.0.5.tgz", + "integrity": "sha512-f/WvY6ekHykUF1rWJUAbCU7iS/5QYDIugwpqJA+ttwKbxSbzNlqlE8vZSrsnxNQciUW+z6lvhlXMaEyZn9MSig==", "dev": true, "license": "MIT", "dependencies": { "debug": "^4.1.1", "globrex": "^0.1.2", - "tsconfck": "^3.0.3", - "vite": "*" + "tsconfck": "^3.0.3" }, "peerDependencies": { "vite": "*" - }, - "peerDependenciesMeta": { - "vite": { - "optional": true - } } }, "node_modules/vscode-jsonrpc": { @@ -6495,9 +6613,9 @@ "license": "MIT" }, "node_modules/vscode-textmate": { - "version": "9.3.1", - "resolved": "https://registry.npmjs.org/vscode-textmate/-/vscode-textmate-9.3.1.tgz", - "integrity": "sha512-U19nFkCraZF9/bkQKQYsb9mRqM9NwpToQQFl40nGiioZTH9gRtdtCHwp48cubayVfreX3ivnoxgxQgNwrTVmQg==", + "version": "9.3.2", + "resolved": "https://registry.npmjs.org/vscode-textmate/-/vscode-textmate-9.3.2.tgz", + "integrity": "sha512-n2uGbUcrjhUEBH16uGA0TvUfhWwliFZ1e3+pTjrkim1Mt7ydB41lV08aUvsi70OlzDWp6X7Bx3w/x3fAXIsN0Q==", "license": "MIT" }, "node_modules/walker": { @@ -6522,7 +6640,6 @@ "node_modules/webpack": { "version": "5.104.1", "license": "MIT", - "peer": true, "dependencies": { "@types/eslint-scope": "^3.7.7", "@types/estree": "^1.0.8", @@ -6570,7 +6687,6 @@ "version": "6.0.1", "dev": true, "license": "MIT", - "peer": true, "dependencies": { "@discoveryjs/json-ext": "^0.6.1", "@webpack-cli/configtest": "^3.0.1", @@ -6914,16 +7030,16 @@ }, "packages/alphatab": { "name": "@coderline/alphatab", - "version": "1.8.1", + "version": "1.9.0", "license": "MPL-2.0", "devDependencies": { - "@biomejs/biome": "^2.3.11", + "@biomejs/biome": "^2.3.13", "@coderline/alphaskia": "^3.4.135", "@coderline/alphaskia-linux": "^3.4.135", "@coderline/alphaskia-windows": "^3.4.135", "@types/chai": "^5.2.3", "@types/mocha": "^10.0.10", - "@types/node": "^25.0.6", + "@types/node": "^25.2.0", "assert": "^2.1.0", "chai": "^6.2.2", "chalk": "^5.6.2", @@ -6934,7 +7050,7 @@ "tsx": "^4.21.0", "typescript": "^5.9.3", "vite": "^7.3.1", - "vite-plugin-static-copy": "^3.1.4" + "vite-plugin-static-copy": "^3.2.0" }, "engines": { "node": ">=6.0.0" @@ -6942,7 +7058,7 @@ }, "packages/alphatex": { "name": "@coderline/alphatab-alphatex", - "version": "1.8.1", + "version": "1.9.0", "devDependencies": { "rimraf": "^6.1.2", "tslib": "^2.8.1", @@ -6952,7 +7068,7 @@ }, "packages/csharp": { "name": "@coderline/alphatab-csharp", - "version": "1.8.1", + "version": "1.9.0", "devDependencies": { "@coderline/alphatab-transpiler": "*", "rimraf": "^6.1.2" @@ -6960,14 +7076,14 @@ }, "packages/kotlin": { "name": "@coderline/alphatab-kotlin", - "version": "1.8.1" + "version": "1.9.0" }, "packages/lsp": { "name": "@coderline/alphatab-language-server", - "version": "1.8.1", + "version": "1.9.0", "license": "MPL-2.0", "dependencies": { - "@coderline/alphatab": "^1.8.1", + "@coderline/alphatab": "^1.9.0", "vscode-languageserver": "^9.0.1", "vscode-languageserver-textdocument": "^1.0.12" }, @@ -6975,11 +7091,11 @@ "alphatab-language-server": "dist/server.mjs" }, "devDependencies": { - "@biomejs/biome": "^2.3.11", - "@microsoft/api-extractor": "^7.55.2", + "@biomejs/biome": "^2.3.13", + "@microsoft/api-extractor": "^7.56.0", "@types/chai": "^5.2.2", "@types/mocha": "^10.0.10", - "@types/node": "^25.0.6", + "@types/node": "^25.2.0", "assert": "^2.1.0", "chai": "^6.2.2", "mocha": "^11.7.4", @@ -6991,25 +7107,25 @@ }, "packages/monaco": { "name": "@coderline/alphatab-monaco", - "version": "1.8.1", + "version": "1.9.0", "license": "MPL-2.0", "dependencies": { - "@coderline/alphatab": "^1.8.1", - "@coderline/alphatab-language-server": "^1.8.1", + "@coderline/alphatab": "^1.9.0", + "@coderline/alphatab-language-server": "^1.9.0", "monaco-editor": "^0.55.1", "vscode-languageserver-types": "^3.17.5", "vscode-oniguruma": "^2.0.1", - "vscode-textmate": "^9.3.1" + "vscode-textmate": "^9.3.2" }, "bin": { "alphatab-monaco": "dist/alphaTab.monaco.mjs" }, "devDependencies": { - "@biomejs/biome": "^2.3.11", - "@microsoft/api-extractor": "^7.55.2", + "@biomejs/biome": "^2.3.13", + "@microsoft/api-extractor": "^7.56.0", "@types/chai": "^5.2.2", "@types/mocha": "^10.0.10", - "@types/node": "^25.0.6", + "@types/node": "^25.2.0", "assert": "^2.1.0", "chai": "^6.2.2", "mocha": "^11.7.4", @@ -7021,7 +7137,7 @@ }, "packages/playground": { "name": "@coderline/alphatab-playground", - "version": "1.8.1", + "version": "1.9.0", "dependencies": { "@coderline/alphatab": "*", "@fontsource/noto-sans": "^5.2.10", @@ -7040,14 +7156,14 @@ "tslib": "^2.8.1", "typescript": "^5.9.3", "vite": "^7.3.1", - "vite-tsconfig-paths": "^6.0.4" + "vite-tsconfig-paths": "^6.0.5" } }, "packages/tooling": { "name": "@coderline/alphatab-tooling", - "version": "1.8.1", + "version": "1.9.0", "devDependencies": { - "@microsoft/api-extractor": "^7.55.2", + "@microsoft/api-extractor": "^7.56.0", "@rollup/plugin-terser": "^0.4.4", "@rollup/plugin-typescript": "^12.3.0", "rollup-plugin-license": "^3.6.0", @@ -7056,28 +7172,28 @@ }, "packages/transpiler": { "name": "@coderline/alphatab-transpiler", - "version": "1.8.1" + "version": "1.9.0" }, "packages/vite": { "name": "@coderline/alphatab-vite", - "version": "1.8.1", + "version": "1.9.0", "license": "MPL-2.0", "dependencies": { "magic-string": "^0.30.21", "vite": "^7.3.1" }, "devDependencies": { - "@biomejs/biome": "^2.3.11", - "@microsoft/api-extractor": "^7.55.2", + "@biomejs/biome": "^2.3.13", + "@microsoft/api-extractor": "^7.56.0", "@types/chai": "^5.2.3", "@types/mocha": "^10.0.10", - "@types/node": "^25.0.6", + "@types/node": "^25.2.0", "assert": "^2.1.0", "chai": "^6.2.2", "mocha": "^11.7.5", "rimraf": "^6.1.2", "rollup-plugin-node-externals": "^8.1.2", - "terser": "^5.44.1", + "terser": "^5.46.0", "tslib": "^2.8.1", "tsx": "^4.21.0", "typescript": "^5.9.3" @@ -7088,14 +7204,14 @@ }, "packages/vscode": { "name": "alphatab-vscode", - "version": "1.8.1", + "version": "1.9.0", "license": "MPL-2.0", "devDependencies": { - "@biomejs/biome": "^2.3.11", + "@biomejs/biome": "^2.3.13", "@rollup/plugin-node-resolve": "^16.0.3", "@types/chai": "^5.2.2", "@types/mocha": "^10.0.10", - "@types/node": "^25.0.6", + "@types/node": "^25.2.0", "@types/vscode": "^1.108.1", "@vscode/test-cli": "^0.0.12", "@vscode/test-electron": "^2.5.2", @@ -7115,19 +7231,19 @@ }, "packages/webpack": { "name": "@coderline/alphatab-webpack", - "version": "1.8.1", + "version": "1.9.0", "license": "MPL-2.0", "dependencies": { "webpack": "^5.104.1" }, "devDependencies": { - "@biomejs/biome": "^2.3.11", + "@biomejs/biome": "^2.3.13", "@types/chai": "^5.2.3", "@types/mocha": "^10.0.10", - "@types/node": "^25.0.6", + "@types/node": "^25.2.0", "assert": "^2.1.0", "chai": "^6.2.2", - "html-webpack-plugin": "^5.6.5", + "html-webpack-plugin": "^5.6.6", "mocha": "^11.7.5", "rimraf": "^6.1.2", "tslib": "^2.8.1", diff --git a/package.json b/package.json index 061a73ed1..9026be2d0 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@coderline/alphatab-monorepo", - "version": "1.8.1", + "version": "1.9.0", "description": "Monorepo for alphaTab and its related packages", "private": true, "type": "module", @@ -40,7 +40,11 @@ "build-webpack": "npm run build --workspace=packages/webpack", "test-webpack": "npm run test --workspace=packages/webpack", - "build-monaco": "npm run build --workspace=packages/monaco" + "build-monaco": "npm run build --workspace=packages/monaco", + + "nightly-check": "node ./scripts/nightly.mts --mode check", + "nightly-pack": "node ./scripts/nightly.mts --mode pack", + "nightly-publish": "node ./scripts/nightly.mts --mode publish" }, "devDependencies": { "concurrently": "^9.2.1" diff --git a/packages/alphatab/package.json b/packages/alphatab/package.json index b0bb8888f..91d4306c8 100644 --- a/packages/alphatab/package.json +++ b/packages/alphatab/package.json @@ -1,6 +1,6 @@ { "name": "@coderline/alphatab", - "version": "1.8.1", + "version": "1.9.0", "description": "alphaTab is a music notation and guitar tablature rendering library", "keywords": [ "guitar", @@ -58,13 +58,13 @@ "test-accept-reference": "tsx scripts/accept-new-reference-files.ts" }, "devDependencies": { - "@biomejs/biome": "^2.3.11", + "@biomejs/biome": "^2.3.13", "@coderline/alphaskia": "^3.4.135", "@coderline/alphaskia-linux": "^3.4.135", "@coderline/alphaskia-windows": "^3.4.135", "@types/chai": "^5.2.3", "@types/mocha": "^10.0.10", - "@types/node": "^25.0.6", + "@types/node": "^25.2.0", "assert": "^2.1.0", "chai": "^6.2.2", "chalk": "^5.6.2", @@ -75,7 +75,7 @@ "tsx": "^4.21.0", "typescript": "^5.9.3", "vite": "^7.3.1", - "vite-plugin-static-copy": "^3.1.4" + "vite-plugin-static-copy": "^3.2.0" }, "files": [ "/dist/alphaTab*.js", diff --git a/packages/alphatex/package.json b/packages/alphatex/package.json index 737389fde..84ee30d88 100644 --- a/packages/alphatex/package.json +++ b/packages/alphatex/package.json @@ -1,6 +1,6 @@ { "name": "@coderline/alphatab-alphatex", - "version": "1.8.1", + "version": "1.9.0", "private": true, "scripts": { "lint": "biome lint", diff --git a/packages/csharp/package.json b/packages/csharp/package.json index 6e43893f7..da03fee38 100644 --- a/packages/csharp/package.json +++ b/packages/csharp/package.json @@ -1,6 +1,6 @@ { "name": "@coderline/alphatab-csharp", - "version": "1.8.1", + "version": "1.9.0", "description": "The C# target of alphaTab.", "private": true, "type": "module", diff --git a/packages/csharp/src/Directory.Build.props b/packages/csharp/src/Directory.Build.props index 66883954d..f8ef9003c 100644 --- a/packages/csharp/src/Directory.Build.props +++ b/packages/csharp/src/Directory.Build.props @@ -2,8 +2,8 @@ portable true - 1.8.1 - 1.8.1.0 + 1.9.0 + 1.9.0.0 $(AssemblyVersion) Danielku15 CoderLine diff --git a/packages/kotlin/package.json b/packages/kotlin/package.json index 5cdc5a1e8..073763e4e 100644 --- a/packages/kotlin/package.json +++ b/packages/kotlin/package.json @@ -1,6 +1,6 @@ { "name": "@coderline/alphatab-kotlin", - "version": "1.8.1", + "version": "1.9.0", "description": "The Kotlin target of alphaTab.", "private": true, "type": "module", diff --git a/packages/kotlin/src/android/build.gradle.kts b/packages/kotlin/src/android/build.gradle.kts index 171364f61..174095eda 100644 --- a/packages/kotlin/src/android/build.gradle.kts +++ b/packages/kotlin/src/android/build.gradle.kts @@ -39,7 +39,7 @@ var libAuthorId = "danielku15" var libAuthorName = "Daniel Kuschny" var libOrgUrl = "https://github.com/coderline" var libCompany = "CoderLine" -var libVersion = "1.8.1-SNAPSHOT" +var libVersion = "1.9.0-SNAPSHOT" var libProjectUrl = "https://github.com/CoderLine/alphaTab" var libGitUrlHttp = "https://github.com/CoderLine/alphaTab.git" var libGitUrlGit = "scm:git:git://github.com/CoderLine/alphaTab.git" diff --git a/packages/lsp/package.json b/packages/lsp/package.json index ca08ad823..5daebd520 100644 --- a/packages/lsp/package.json +++ b/packages/lsp/package.json @@ -1,6 +1,6 @@ { "name": "@coderline/alphatab-language-server", - "version": "1.8.1", + "version": "1.9.0", "description": "A language server for alphaTab providing coding assistance for alphaTex.", "keywords": [ "guitar", @@ -34,16 +34,16 @@ "test": "mocha" }, "dependencies": { - "@coderline/alphatab": "^1.8.1", + "@coderline/alphatab": "^1.9.0", "vscode-languageserver": "^9.0.1", "vscode-languageserver-textdocument": "^1.0.12" }, "devDependencies": { - "@biomejs/biome": "^2.3.11", - "@microsoft/api-extractor": "^7.55.2", + "@biomejs/biome": "^2.3.13", + "@microsoft/api-extractor": "^7.56.0", "@types/chai": "^5.2.2", "@types/mocha": "^10.0.10", - "@types/node": "^25.0.6", + "@types/node": "^25.2.0", "assert": "^2.1.0", "chai": "^6.2.2", "mocha": "^11.7.4", diff --git a/packages/monaco/package.json b/packages/monaco/package.json index c199cfb98..575d48534 100644 --- a/packages/monaco/package.json +++ b/packages/monaco/package.json @@ -1,6 +1,6 @@ { "name": "@coderline/alphatab-monaco", - "version": "1.8.1", + "version": "1.9.0", "description": "A Monaco editor integration for alphaTab providing coding assistance for alphaTex.", "keywords": [ "guitar", @@ -31,19 +31,19 @@ "test": "mocha" }, "dependencies": { - "@coderline/alphatab": "^1.8.1", - "@coderline/alphatab-language-server": "^1.8.1", + "@coderline/alphatab": "^1.9.0", + "@coderline/alphatab-language-server": "^1.9.0", "monaco-editor": "^0.55.1", "vscode-languageserver-types": "^3.17.5", "vscode-oniguruma": "^2.0.1", - "vscode-textmate": "^9.3.1" + "vscode-textmate": "^9.3.2" }, "devDependencies": { - "@biomejs/biome": "^2.3.11", - "@microsoft/api-extractor": "^7.55.2", + "@biomejs/biome": "^2.3.13", + "@microsoft/api-extractor": "^7.56.0", "@types/chai": "^5.2.2", "@types/mocha": "^10.0.10", - "@types/node": "^25.0.6", + "@types/node": "^25.2.0", "assert": "^2.1.0", "chai": "^6.2.2", "mocha": "^11.7.4", diff --git a/packages/playground/package.json b/packages/playground/package.json index fcdb5ba1b..f56a06ae6 100644 --- a/packages/playground/package.json +++ b/packages/playground/package.json @@ -1,6 +1,6 @@ { "name": "@coderline/alphatab-playground", - "version": "1.8.1", + "version": "1.9.0", "description": "A development playground for alphaTab to test features while developing", "private": true, "type": "module", @@ -27,6 +27,6 @@ "tslib": "^2.8.1", "typescript": "^5.9.3", "vite": "^7.3.1", - "vite-tsconfig-paths": "^6.0.4" + "vite-tsconfig-paths": "^6.0.5" } } diff --git a/packages/tooling/package.json b/packages/tooling/package.json index 86eff5678..0cd50d6bb 100644 --- a/packages/tooling/package.json +++ b/packages/tooling/package.json @@ -1,11 +1,11 @@ { "name": "@coderline/alphatab-tooling", - "version": "1.8.1", + "version": "1.9.0", "type": "module", "description": "Additional build tooling for alphaTab like common build configurations", "private": true, "devDependencies": { - "@microsoft/api-extractor": "^7.55.2", + "@microsoft/api-extractor": "^7.56.0", "@rollup/plugin-terser": "^0.4.4", "@rollup/plugin-typescript": "^12.3.0", "rollup-plugin-license": "^3.6.0", diff --git a/packages/transpiler/package.json b/packages/transpiler/package.json index f74f8f2fe..73e2af725 100644 --- a/packages/transpiler/package.json +++ b/packages/transpiler/package.json @@ -1,6 +1,6 @@ { "name": "@coderline/alphatab-transpiler", - "version": "1.8.1", + "version": "1.9.0", "type": "module", "description": "The transpiler toolkit to translate alphaTab to C# and Kotlin", "private": true, diff --git a/packages/vite/package.json b/packages/vite/package.json index 0b17ba405..127850a98 100644 --- a/packages/vite/package.json +++ b/packages/vite/package.json @@ -1,6 +1,6 @@ { "name": "@coderline/alphatab-vite", - "version": "1.8.1", + "version": "1.9.0", "description": "A plugin for Vite to bundle alphaTab into your webapps.", "keywords": [ "guitar", @@ -49,17 +49,17 @@ "node": ">=20.19.0" }, "devDependencies": { - "@biomejs/biome": "^2.3.11", - "@microsoft/api-extractor": "^7.55.2", + "@biomejs/biome": "^2.3.13", + "@microsoft/api-extractor": "^7.56.0", "@types/chai": "^5.2.3", "@types/mocha": "^10.0.10", - "@types/node": "^25.0.6", + "@types/node": "^25.2.0", "assert": "^2.1.0", "chai": "^6.2.2", "mocha": "^11.7.5", "rimraf": "^6.1.2", "rollup-plugin-node-externals": "^8.1.2", - "terser": "^5.44.1", + "terser": "^5.46.0", "tslib": "^2.8.1", "tsx": "^4.21.0", "typescript": "^5.9.3" diff --git a/packages/vscode/package.json b/packages/vscode/package.json index 858c05f69..6a199069f 100644 --- a/packages/vscode/package.json +++ b/packages/vscode/package.json @@ -1,6 +1,6 @@ { "name": "alphatab-vscode", - "version": "1.8.1", + "version": "1.9.0", "private": true, "description": "A Visual Studio Code extension for alphaTab providing coding assistance for alphaTex.", "keywords": [ @@ -34,11 +34,11 @@ "test": "vscode-test" }, "devDependencies": { - "@biomejs/biome": "^2.3.11", + "@biomejs/biome": "^2.3.13", "@rollup/plugin-node-resolve": "^16.0.3", "@types/chai": "^5.2.2", "@types/mocha": "^10.0.10", - "@types/node": "^25.0.6", + "@types/node": "^25.2.0", "@types/vscode": "^1.108.1", "@vscode/test-cli": "^0.0.12", "@vscode/test-electron": "^2.5.2", diff --git a/packages/webpack/package.json b/packages/webpack/package.json index 0ce37134b..0658075cb 100644 --- a/packages/webpack/package.json +++ b/packages/webpack/package.json @@ -1,6 +1,6 @@ { "name": "@coderline/alphatab-webpack", - "version": "1.8.1", + "version": "1.9.0", "description": "A plugin for WebPack to bundle alphaTab into your webapps.", "keywords": [ "guitar", @@ -48,13 +48,13 @@ "node": ">=20.19.0" }, "devDependencies": { - "@biomejs/biome": "^2.3.11", + "@biomejs/biome": "^2.3.13", "@types/chai": "^5.2.3", "@types/mocha": "^10.0.10", - "@types/node": "^25.0.6", + "@types/node": "^25.2.0", "assert": "^2.1.0", "chai": "^6.2.2", - "html-webpack-plugin": "^5.6.5", + "html-webpack-plugin": "^5.6.6", "mocha": "^11.7.5", "rimraf": "^6.1.2", "tslib": "^2.8.1", diff --git a/scripts/nightly.mts b/scripts/nightly.mts new file mode 100644 index 000000000..ab59d22f7 --- /dev/null +++ b/scripts/nightly.mts @@ -0,0 +1,191 @@ +import { type ExecSyncOptionsWithBufferEncoding, execSync } from 'node:child_process'; +import { appendFileSync, existsSync, readdirSync, readFileSync } from 'node:fs'; +import { resolve } from 'node:path'; +import { exit } from 'node:process'; +import { type ParseArgsOptionsConfig, parseArgs } from 'node:util'; + +const options: ParseArgsOptionsConfig = { + platform: { + type: 'string' + }, + mode: { + type: 'string' + }, + force: { + type: 'string' + }, + tag: { + type: 'string' + } +}; + +function getChangedPackages(force: boolean) { + const packages = new Set(); + if (!force) { + // get all commits since 26 hours + const featureCommits = execSync( + "git log --since='26 hours ago' --pretty=format:'%H;%an <%ae>' --perl-regexp --author='^((?!dependabot).*)$'", + { + encoding: 'utf-8' + } + ) + .split('\n') + .filter(l => l.trim().length > 0) + .map(l => { + const p = l.split(';'); + return { hash: p[0], author: p[1] }; + }); + + console.info('Detected following feature commits', featureCommits); + if (featureCommits.length === 0) { + console.info('No feature commits, no packages changed'); + return packages; + } + + // translate commits to changed packages + for (const commit of featureCommits) { + const files = execSync(`git show --name-only ${commit.hash} --pretty=""`, { + encoding: 'utf-8' + }).split('\n'); + + for (const file of files) { + const packageName = file.split('/')[1]; + if (packageName) { + packages.add(packageName); + } + } + } + } else { + for (const pkg of readdirSync(resolve(import.meta.dirname, '../packages/'), { withFileTypes: true })) { + if (pkg.isDirectory()) { + packages.add(pkg.name); + } + } + } + + for (const packageName of Array.from(packages)) { + const packageJson = resolve(import.meta.dirname, '../packages/', packageName, 'package.json'); + if (!existsSync(packageJson)) { + packages.delete(packageName); + continue; + } + + const isPrivate = JSON.parse(readFileSync(packageJson, 'utf-8')).private; + if (isPrivate) { + packages.delete(packageName); + } + } + + console.info('Detected following changed packages', packages); + return packages; +} + +const DRY_RUN = process.env.DRY_RUN; +function execDryRun(command: string, options: ExecSyncOptionsWithBufferEncoding) { + console.info(`executing command ${command} in ${options.cwd}`); + if (DRY_RUN) { + console.warn('nothing executed, dry run active'); + } else { + execSync(command, options); + } +} + +function publish(platform: string, packages: Set) { + switch (platform) { + case 'web': + for (const packageName of packages) { + execDryRun(`npm publish --access public --tag ${args.tag}`, { + stdio: 'inherit', + cwd: resolve(import.meta.dirname, '../packages', packageName) + }); + } + break; + case 'dotnet': + const dotnetPackages = ['AlphaTab', 'AlphaTab.Windows']; + for (const pkg of dotnetPackages) { + execDryRun( + `dotnet nuget push ${pkg}/bin/Release/*.nupkg -k ${process.env.NUGET_API_KEY} -s https://api.nuget.org/v3/index.json`, + { + stdio: 'inherit', + cwd: resolve(import.meta.dirname, '../packages/csharp/src') + } + ); + } + break; + case 'kotlin': + execDryRun(`./gradlew publishToMavenCentral`, { + stdio: 'inherit', + cwd: resolve(import.meta.dirname, '../packages/kotlin/src/') + }); + break; + } +} + +function pack(platform: string, packages: Set) { + switch (platform) { + case 'web': + for (const packageName of packages) { + console.info('npm pack', packageName); + execSync('npm pack', { + stdio: 'inherit', + cwd: resolve(import.meta.dirname, '../packages', packageName) + }); + } + break; + case 'dotnet': + console.info('dotnet pack skipped, nupkgs are created automatically'); + break; + case 'kotlin': + console.info('kotlin pack skipped, there is no pack step'); + break; + } +} + +function check(platform: string, packages: Set) { + let hasChanges = false; + switch (platform) { + case 'web': + hasChanges = packages.size > 0; + break; + case 'dotnet': + hasChanges = packages.has('alphatab') || packages.has('csharp'); + if (!hasChanges) { + console.info('dotnet build skipped, no relevant package changed'); + } + break; + case 'kotlin': + hasChanges = packages.has('alphatab') || packages.has('kotlin'); + if (!hasChanges) { + console.info('kotlin build skipped, no relevant package changed'); + } + break; + } + + const hasChangesOutput = `has_changes=${hasChanges ? 'true' : 'false'}`; + if (process.env.GITHUB_OUTPUT) { + appendFileSync(process.env.GITHUB_OUTPUT, hasChangesOutput); + } else { + console.info(hasChangesOutput); + } +} + +const args = parseArgs({ + options, + strict: true +}).values; +const packages = getChangedPackages(args.force === 'true'); + +switch (args.mode) { + case 'pack': + pack(args.platform as string, packages); + break; + case 'publish': + publish(args.platform as string, packages); + break; + case 'check': + check(args.platform as string, packages); + break; + default: + console.error('Invalid mode', args.mode); + exit(1); +}