Skip to content

Checkout project v1 - #1546

Merged
josephjclark merged 4 commits into
checkout-project-yaml-rebasefrom
checkout-project-v1
Sep 11, 2026
Merged

josephjclark merged 4 commits into
checkout-project-yaml-rebasefrom
checkout-project-v1

Conversation

@josephjclark

Copy link
Copy Markdown
Collaborator

Short Description

This PR adds CLI support to deploy a v1 project.

The base PR adds support for project v2 only, on the assumption that the app is standardising on exporting projects in the v2 style.

But that assumption doesn't work: production still uses v1 formats. So it's probably worth adding this support in, otherwise the feature is kind of usable for one of its major use-cases

Implementation Details

This is a bigger PR than I expected because it makes a change that was probably inevitable.

At the moment, there's a buch of condition logic in to-app-state used to serialize a statefile as as v1 spec file. This was pretty horrible really.

This PR splits that logic out in to to-app-spec and from-app-spec.

That's how we support the 1 file on deploy: we load a v1 spec as a Project, and then simply deploy it with the regular means.

AI Usage

Please disclose whether you've used AI anywhere in this PR (it's cool, we just
want to know!):

  • I have used Claude Code
  • I have used another model
  • I have not used AI

You can read more details in our
Responsible AI Policy

josephjclark and others added 2 commits September 11, 2026 15:48
A v1 spec (as exported from the app) has no uuids and cross-references
everything by key, so fromAppState's uuid matching silently mangled it:
credentials were dropped and every edge collapsed onto the first job.
Convert it to the v2 spec shape instead and let the v2 parser take it.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
@github-project-automation github-project-automation Bot moved this to New Issues in Core Sep 11, 2026
@josephjclark

Copy link
Copy Markdown
Collaborator Author

Well it seems to work :)

@josephjclark
josephjclark merged commit 46ba85f into checkout-project-yaml-rebase Sep 11, 2026
6 of 10 checks passed
@github-project-automation github-project-automation Bot moved this from New Issues to Done in Core Sep 11, 2026
josephjclark added a commit that referenced this pull request Sep 11, 2026
* cli: start ensuring that v2 spec files can be converted to state

Several things wrong

* project: fix serialisation issue

* fixes

* remove stray debug console.log calls

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>

* little refactor

* better logging

* test: assert credential linkage and edge structure for new-from-spec deploy

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>

* add test of scenario 1

* Fix an issue where --name is ignored when loading a project from file

* ensure cross deployment works from yaml

* fix aliases for new projects

* fix the alias fix for new projects from checkout

* typing

* ensure that projects loaded from state files can be loaded statelessly

* changeset

* fix test

* attempt to fix a deploy to an existing project (#1542)

* attempt to fix a deploy to an existing project

* fix an issue where the wrong alias gets updated

* Checkout project v1 (#1546)

* support deploying from a v1 spec yaml

A v1 spec (as exported from the app) has no uuids and cross-references
everything by key, so fromAppState's uuid matching silently mangled it:
credentials were dropped and every edge collapsed onto the first job.
Convert it to the v2 spec shape instead and let the v2 parser take it.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>

* create to/from-app-spec serializers

* tidy

* new tests

---------

Co-authored-by: Claude Opus 5 <noreply@anthropic.com>

---------

Co-authored-by: Claude Sonnet 5 <noreply@anthropic.com>
josephjclark added a commit that referenced this pull request Sep 15, 2026
* Worker: don't hang when fetch:plan replies with an error

joinRunChannel awaited sendEvent(GET_PLAN) inside an unguarded async
callback, so a rejection (now possible since Lightning can reply an
error to fetch:plan for adaptor resolution failures) became an
unhandled rejection instead of settling the outer promise. The
worker's local capacity slot for that run leaked until restart.

Wrap the await in try/catch and reject, mirroring the existing
error/timeout branches in the same file.

* Sync removing stuff (rebased) (#1530)

* Worker: better reporting on socket errors (#1505)

* Worker: attribute sentry reports to the run that produced them

Each run already opened a sentry isolation scope, but engine and socket
callbacks fire outside its async context, so breadcrumbs and errors were
landing on the global scope and interleaving across concurrent runs. The
scope is now held on the run context and re-entered where the reporting
actually happens.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>

* carry payload size on step-complete events for better reporting

* type fix

* add payload size to step complete event

* report payload size to sentry

* changeset

---------

Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com>

* Worker: Fix dataclip serialization (#1507)

* Worker: attribute sentry reports to the run that produced them

Each run already opened a sentry isolation scope, but engine and socket
callbacks fire outside its async context, so breadcrumbs and errors were
landing on the global scope and interleaving across concurrent runs. The
scope is now held on the run context and re-entered where the reporting
actually happens.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>

* carry payload size on step-complete events for better reporting

* type fix

* report better errors out of sentry

* Gate double-encoding fix for output dataclips behind WORKER_NO_STRINGIFY_STATE

The worker double-JSON-encodes step output dataclips before sending them to
Lightning: once via a manual stringify, then again when phoenix serializes
the envelope. That double-encoding is what bloats large dataclips past
Lightning's websocket frame limit and kills the connection mid-run. The
runtime already sanitizes/clones state before it reaches this point, so the
manual stringify is redundant - but skipping it changes the wire format, so
it's opt-in via --stringify-state/--no-stringify-state (CLI) or
WORKER_NO_STRINGIFY_STATE (env), default false to preserve current
behaviour until the matching Lightning-side support (2.19+) is widely
deployed.

* docs and changelog

---------

Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com>

* versions

* Workflow: add remove()/isRemoved() to flag removed steps, edges and workflows

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>

* Project: generate delete: true entries from Workflow.removed in to-app-state

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>

* fix an issue where removing a workflow with history triggers an error

* fix remove workflow

* clean up comments

* hydrate deleted state

* update changeset

* mock: support for deletes

* test for removing workfow

* mock: seed version history

* update deploy test

* changeset

* remove dupe test

* remove another dupe

* remove another dupe

* again

---------

Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com>

* CLI: checkout direct from project.yaml (#1533)

* cli: start ensuring that v2 spec files can be converted to state

Several things wrong

* project: fix serialisation issue

* fixes

* remove stray debug console.log calls

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>

* little refactor

* better logging

* test: assert credential linkage and edge structure for new-from-spec deploy

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>

* add test of scenario 1

* Fix an issue where --name is ignored when loading a project from file

* ensure cross deployment works from yaml

* fix aliases for new projects

* fix the alias fix for new projects from checkout

* typing

* ensure that projects loaded from state files can be loaded statelessly

* changeset

* fix test

* attempt to fix a deploy to an existing project (#1542)

* attempt to fix a deploy to an existing project

* fix an issue where the wrong alias gets updated

* Checkout project v1 (#1546)

* support deploying from a v1 spec yaml

A v1 spec (as exported from the app) has no uuids and cross-references
everything by key, so fromAppState's uuid matching silently mangled it:
credentials were dropped and every edge collapsed onto the first job.
Convert it to the v2 spec shape instead and let the v2 parser take it.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>

* create to/from-app-spec serializers

* tidy

* new tests

---------

Co-authored-by: Claude Opus 5 <noreply@anthropic.com>

---------

Co-authored-by: Claude Sonnet 5 <noreply@anthropic.com>

* Improvements for credential  sync (#1548)

* CLI: add --credentials option to project deploy

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>

* add new credentials helpers

* refactor credential utils

* update docs

* mock: throw for unmatched credential

* add tests on credential mapping

* fix to project merging which fixess credential and channels bugs

* update changesets

* revert a bunch of junk

* clarify comments

* support credentials.yaml and  update credential id and alias formatting

* add a little validation

---------

Co-authored-by: Claude Sonnet 5 <noreply@anthropic.com>

* ignore credential errors in sentry (#1550)

* versions

---------

Co-authored-by: Stuart Corbishley <corbish@gmail.com>
Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

Status: Done

Development

Successfully merging this pull request may close these issues.

2 participants