Skip to content

Olares 1.12.6: Studio dev apps can no longer be installed — Source data not found, and no Studio version is compatible with 1.12.6 #3972

Description

@Socev

Olares 1.12.6: Studio dev apps can no longer be installed — Source data not found, and no Studio version is compatible with 1.12.6

Summary

After upgrading to Olares 1.12.6, no application developed in Studio can be installed or re-applied any more. Clicking Apply on an existing dev app uninstalls it and then fails to reinstall, leaving the app permanently down.

The root cause appears to be that the 1.12.6 chart-repository migration upgrade-1126-remove-studio-source removes the chart source named studio, while the installed studio-server still queries the repository with Source: studio. In addition, the Studio app itself declares Compatibility: Olares >=1.12.3-0,<1.12.6, so there is currently no Studio release that is compatible with 1.12.6 and the Market offers no update.

Recovering the app was possible only by hand-migrating the chart to manifest v3 and uploading it as a custom package — which in turn detached the app's persistent appdata directory (see Secondary issue).

Environment

Component Version
Olares 1.12.6
Studio (app / chart) installed 1.0.48, latest in Market 1.0.51
studio-server beclab/studio-server:v0.1.73
dynamic-chart-repository beclab/dynamic-chart-repository:v0.3.49
app-service beclab/app-service:0.5.67
Node single node, amd64

The affected app is a plain Deployment + Service created in Studio from a Docker image. It had been installed and re-applied many times without problems before the 1.12.6 upgrade.

Steps to reproduce

  1. Run Olares 1.12.6 with an app that was created in Studio before the upgrade.
  2. Open the app in Studio and click Apply (for example after changing the container image tag).
  3. Studio uninstalls the running app, then fails with:
check chart version failed: Source data not found
  1. The app is now uninstalled and cannot be reinstalled. Reverting the image tag, bumping the chart version, restarting Studio and restarting the node all produce the identical error.

Evidence from the logs

studio-server — the chart upload itself succeeds; the follow-up version query fails:

handlers_cmd.go:327  auto update repo, name claudebot
updaterepo.go:44     start to upgrade chart version app=claudebot
updaterepo.go:54     uploadChartVersion to 0.0.33
command.go:26        command output:
                     Pushing claudebot-dev-0.0.33.tgz to http://localhost:8888...
                     Done.
updaterepo.go:147    update repo app claudebot, newVersion: 0.0.33
chart_op.go:108      /api/v1/charts/Source data not found
                     /versions status code not = 200, err=%!v(MISSING)

(Note the broken format string on the last line — err is never passed, so the real error is lost.)

chartrepo — the query arrives with Source: studio:

service.go:25  User Context - UserID: <user>, Source: studio
service.go:41  User Action - UserID: <user>, Source: studio, Action: GET_VERSIONS, Resource: claudebot-dev

chartrepo, at startup — the studio source has been removed by the 1.12.6 migration:

upversion_1126.go:133  upgrade-1126-remove-studio-source: migration already completed, skipping
upversion_1126.go:133  upgrade-v3-catalog-layout: migration already completed, skipping

chartrepo — meanwhile the same app resolves fine under the upload source:

app_data.go:319  Searching for app: claudebot-dev in source: upload
app_data.go:356  Found app: claudebot-dev in source: upload

So Source data not found is literal: the source named studio no longer exists. studio-server v0.1.73 has not been updated to query upload.

The compatibility dead end

Because Studio's own install path is broken, the remaining route is the Market's custom-package upload. That path is blocked by a contradiction:

Uploading a v1 manifest is rejected unless the system dependency is narrowed:

manifest validation failed (apiVersion=v1):
options.dependencies[name=olares].version ">=1.12.1-0" must restrict the Olares system
version to ">=1.12.3-0,<1.12.6" for apiVersion=v1; the constraint currently allows 1.12.6,
which is outside the supported range

Installing the resulting package is then rejected because the running system is 1.12.6:

Missing dependencies: System Dependencies: - olares version=>=1.12.3-0,<1.12.6

No version range can satisfy both: the validator requires an upper bound of <1.12.6, and the installer requires the range to include the running 1.12.6. v1 applications are therefore uninstallable on 1.12.6 by construction.

The same bound applies to Studio itself. The Market shows:

Studio — Chart version 1.0.51 — Compatibility: Olares >=1.12.3-0, <1.12.6

There is no update offered, and the newest published Studio declares itself incompatible with 1.12.6.

Additional finding: Studio-generated names cannot pass the new validator

Studio names every dev app <name>-dev. Installing such an app through the Market's custom-package route fails on the new folder-name rule:

invalid folder name: "./charts/claudebot-dev" must match ^[a-z0-9]{1,30}$

A hyphen is not allowed, so no Studio-generated app name can ever satisfy this validator. This forces users to rename the app, which has the consequence described below.

Secondary issue: renaming an app detaches its appdata

Charts generated by Studio mount persistent data via:

volumes:
  - hostPath:
      path: "{{ .Values.userspace.appData }}/<appname>/"
      type: DirectoryOrCreate

.Values.userspace.appData is derived from the application name. Renaming the app (which the folder-name rule above makes mandatory) silently changes the resolved path — in this case from …/claudebot-dev/claudebot/ to …/claudebot/claudebot/.

The app then starts successfully against an empty directory. /health reports the data directory as existing, the container comes up, and nothing signals that the previous data is not attached. In this case the application's file-sync process started against an empty source directory; only its own delete-protection prevented the remote copy from being emptied.

Suggestion: when an app is installed with permission.appData: true and the resolved appdata directory is newly created while a directory for a previous name still exists, warn the user, or offer to carry the data over.

Workaround

For the record, this sequence restored the app on 1.12.6, without Studio:

  1. Take the chart from the Studio project (Chart.yaml, OlaresManifest.yaml, values.yaml, templates/).
  2. Rename the chart directory to a name matching ^[a-z0-9]{1,30}$.
  3. Migrate OlaresManifest.yaml to manifest 0.12.0 / apiVersion: v3: add apiVersion, add workloadReplicas, remove metadata.appid and metadata.target, set permission.appCommon/externalData explicitly, use the _v112 category names, and set the dependency to olares >=1.12.6-0.
  4. In templates/deployment.yaml, set strategy: {type: Recreate} — required because the chart mounts a hostPath: deployment <name> can not enable rolling update with hostpath
  5. Define workloads.<name>.replicaCount in values.yaml and reference it from spec.replicas: templates/deployment.yaml: spec.replicas is set to "1"; it must reference .Values.workloads.<name>.replicaCount
  6. Package as .tgz and install through the Market's custom-package upload.
  7. Move the old appdata directory to the new app name (see above).

Each of these five validation errors was clear and actionable — that part of the new validator works well. The problem is that Studio produces packages that cannot pass it, and offers no migration path.

Suggested fixes

  1. Ship a Studio release compatible with 1.12.6 that queries the upload source instead of the removed studio source, and publish it before or together with the platform upgrade.
  2. Have upgrade-1126-remove-studio-source either keep a compatibility alias for studio, or block/warn on upgrading while an incompatible studio-server is installed.
  3. Do not let Apply uninstall the running app before the reinstall has been validated. Currently a failed validation leaves a previously working app permanently down — that is the difference between an error message and an outage.
  4. Fix the format string at chart_op.go:108; the underlying error is currently discarded (err=%!v(MISSING)), which makes this class of failure much harder to diagnose than it needs to be.
  5. Allow the -dev suffix that Studio itself generates, or migrate existing dev app names automatically.
  6. Warn when a rename would detach an existing appdata directory.

Impact

On a single-user system this took a production application offline for several hours and required hand-editing chart internals to recover. Anyone running a self-built app from Studio will hit this the first time they click Apply after upgrading to 1.12.6, and the app will stay down until they do the same manual migration.

(The username in the log excerpts has been replaced with <user>.)

# Olares 1.12.6: Studio dev apps can no longer be installed — `Source data not found`, and no Studio version is compatible with 1.12.6

Summary

After upgrading to Olares 1.12.6, no application developed in Studio can be installed or re-applied any more. Clicking Apply on an existing dev app uninstalls it and then fails to reinstall, leaving the app permanently down.

The root cause appears to be that the 1.12.6 chart-repository migration upgrade-1126-remove-studio-source removes the chart source named studio, while the installed studio-server still queries the repository with Source: studio. In addition, the Studio app itself declares Compatibility: Olares >=1.12.3-0,<1.12.6, so there is currently no Studio release that is compatible with 1.12.6 and the Market offers no update.

Recovering the app was possible only by hand-migrating the chart to manifest v3 and uploading it as a custom package — which in turn detached the app's persistent appdata directory (see [Secondary issue](#secondary-issue-renaming-an-app-detaches-its-appdata)).

Environment

Component Version
Olares 1.12.6
Studio (app / chart) installed 1.0.48, latest in Market 1.0.51
studio-server beclab/studio-server:v0.1.73
dynamic-chart-repository beclab/dynamic-chart-repository:v0.3.49
app-service beclab/app-service:0.5.67
Node single node, amd64

The affected app is a plain Deployment + Service created in Studio from a Docker image. It had been installed and re-applied many times without problems before the 1.12.6 upgrade.

Steps to reproduce

  1. Run Olares 1.12.6 with an app that was created in Studio before the upgrade.
  2. Open the app in Studio and click Apply (for example after changing the container image tag).
  3. Studio uninstalls the running app, then fails with:
check chart version failed: Source data not found
  1. The app is now uninstalled and cannot be reinstalled. Reverting the image tag, bumping the chart version, restarting Studio and restarting the node all produce the identical error.

Evidence from the logs

studio-server — the chart upload itself succeeds; the follow-up version query fails:

handlers_cmd.go:327  auto update repo, name claudebot
updaterepo.go:44     start to upgrade chart version app=claudebot
updaterepo.go:54     uploadChartVersion to 0.0.33
command.go:26        command output:
                     Pushing claudebot-dev-0.0.33.tgz to http://localhost:8888...
                     Done.
updaterepo.go:147    update repo app claudebot, newVersion: 0.0.33
chart_op.go:108      /api/v1/charts/Source data not found
                     /versions status code not = 200, err=%!v(MISSING)

(Note the broken format string on the last line — err is never passed, so the real error is lost.)

chartrepo — the query arrives with Source: studio:

service.go:25  User Context - UserID: <user>, Source: studio
service.go:41  User Action - UserID: <user>, Source: studio, Action: GET_VERSIONS, Resource: claudebot-dev

chartrepo, at startup — the studio source has been removed by the 1.12.6 migration:

upversion_1126.go:133  upgrade-1126-remove-studio-source: migration already completed, skipping
upversion_1126.go:133  upgrade-v3-catalog-layout: migration already completed, skipping

chartrepo — meanwhile the same app resolves fine under the upload source:

app_data.go:319  Searching for app: claudebot-dev in source: upload
app_data.go:356  Found app: claudebot-dev in source: upload

So Source data not found is literal: the source named studio no longer exists. studio-server v0.1.73 has not been updated to query upload.

The compatibility dead end

Because Studio's own install path is broken, the remaining route is the Market's custom-package upload. That path is blocked by a contradiction:

Uploading a v1 manifest is rejected unless the system dependency is narrowed:

manifest validation failed (apiVersion=v1):
options.dependencies[name=olares].version ">=1.12.1-0" must restrict the Olares system
version to ">=1.12.3-0,<1.12.6" for apiVersion=v1; the constraint currently allows 1.12.6,
which is outside the supported range

Installing the resulting package is then rejected because the running system is 1.12.6:

Missing dependencies: System Dependencies: - olares version=>=1.12.3-0,<1.12.6

No version range can satisfy both: the validator requires an upper bound of <1.12.6, and the installer requires the range to include the running 1.12.6. v1 applications are therefore uninstallable on 1.12.6 by construction.

The same bound applies to Studio itself. The Market shows:

Studio — Chart version 1.0.51 — Compatibility: Olares >=1.12.3-0, <1.12.6

There is no update offered, and the newest published Studio declares itself incompatible with 1.12.6.

Additional finding: Studio-generated names cannot pass the new validator

Studio names every dev app <name>-dev. Installing such an app through the Market's custom-package route fails on the new folder-name rule:

invalid folder name: "./charts/claudebot-dev" must match ^[a-z0-9]{1,30}$

A hyphen is not allowed, so no Studio-generated app name can ever satisfy this validator. This forces users to rename the app, which has the consequence described below.

Secondary issue: renaming an app detaches its appdata

Charts generated by Studio mount persistent data via:

volumes:
  - hostPath:
      path: "{{ .Values.userspace.appData }}/<appname>/"
      type: DirectoryOrCreate

.Values.userspace.appData is derived from the application name. Renaming the app (which the folder-name rule above makes mandatory) silently changes the resolved path — in this case from …/claudebot-dev/claudebot/ to …/claudebot/claudebot/.

The app then starts successfully against an empty directory. /health reports the data directory as existing, the container comes up, and nothing signals that the previous data is not attached. In this case the application's file-sync process started against an empty source directory; only its own delete-protection prevented the remote copy from being emptied.

Suggestion: when an app is installed with permission.appData: true and the resolved appdata directory is newly created while a directory for a previous name still exists, warn the user, or offer to carry the data over.

Workaround

For the record, this sequence restored the app on 1.12.6, without Studio:

  1. Take the chart from the Studio project (Chart.yaml, OlaresManifest.yaml, values.yaml, templates/).
  2. Rename the chart directory to a name matching ^[a-z0-9]{1,30}$.
  3. Migrate OlaresManifest.yaml to manifest 0.12.0 / apiVersion: v3: add apiVersion, add workloadReplicas, remove metadata.appid and metadata.target, set permission.appCommon/externalData explicitly, use the _v112 category names, and set the dependency to olares >=1.12.6-0.
  4. In templates/deployment.yaml, set strategy: {type: Recreate} — required because the chart mounts a hostPath:
    deployment <name> can not enable rolling update with hostpath
  5. Define workloads.<name>.replicaCount in values.yaml and reference it from spec.replicas:
    templates/deployment.yaml: spec.replicas is set to "1"; it must reference .Values.workloads.<name>.replicaCount
  6. Package as .tgz and install through the Market's custom-package upload.
  7. Move the old appdata directory to the new app name (see above).

Each of these five validation errors was clear and actionable — that part of the new validator works well. The problem is that Studio produces packages that cannot pass it, and offers no migration path.

Suggested fixes

  1. Ship a Studio release compatible with 1.12.6 that queries the upload source instead of the removed studio source, and publish it before or together with the platform upgrade.
  2. Have upgrade-1126-remove-studio-source either keep a compatibility alias for studio, or block/warn on upgrading while an incompatible studio-server is installed.
  3. Do not let Apply uninstall the running app before the reinstall has been validated. Currently a failed validation leaves a previously working app permanently down — that is the difference between an error message and an outage.
  4. Fix the format string at chart_op.go:108; the underlying error is currently discarded (err=%!v(MISSING)), which makes this class of failure much harder to diagnose than it needs to be.
  5. Allow the -dev suffix that Studio itself generates, or migrate existing dev app names automatically.
  6. Warn when a rename would detach an existing appdata directory.

Impact

On a single-user system this took a production application offline for several hours and required hand-editing chart internals to recover. Anyone running a self-built app from Studio will hit this the first time they click Apply after upgrading to 1.12.6, and the app will stay down until they do the same manual migration.

(The username in the log excerpts has been replaced with <user>.)

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions