Repository navigation
Conversation
…hen assume the architecture
1.9.18 linked SkipDriveExternal but still could not run skip android commands: the release checkout's build folder kept SkipBuild objects compiled while the module was missing, and canImport results are not build inputs, so nothing recompiled them. The symbol-count guard passed because the module itself was linked. Clean the build before releasing, and fail when the binary contains the messages that only the #if !canImport(SkipDriveExternal) branches compile in. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Clean before release builds and guard on the compiled fallback paths
The output folder snapshot comes from FileManager's enumerator, which resolves /var to /private/var on macOS, while the produced output paths keep whatever form they were given in. When skip export runs the skip-transpile plugin with a /var/folders project path, none of the strings match, so every freshly written Kotlin file is treated as stale and deleted, and Gradle then compiles the modules with no sources. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
release_skip.sh had its test steps commented out and nothing checked CI, so 1.9.17 to 1.9.19 shipped with skip CI failing or cancelled. The script now requires a successful skipstone CI run on the skipstone commit, and a successful skip CI run on the skip commit that started after that skipstone commit (skip CI checks out skipstone main when it starts). DRY_RUN skips the check; SKIP_RELEASE_IGNORE_CI=1 overrides it, e.g. to ship a fix for a red CI. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…inked-paths Compare canonical paths when removing stale transpiler outputs
Sources/SkipDriveExternal links into the skip submodule, and release_skip.sh built from whatever the submodule was pinned at, so the CLI could compile SkipDrive sources several releases old. The release script now checks the submodule out at the ../skip commit being tagged, copies in the bumped Version.swift, fails if Sources/SkipDrive differs from what gets tagged, and pins the submodule to the new tag in the skipstone release commit. Also bump the submodule to skip main and add a CI job that fails when the submodule's Sources/SkipDrive falls behind skip main. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Refuse to release unless CI passed on what is being released
…le-sync Build the skip CLI against the SkipDrive that the release tags
…esting Run native Swift Testing on the Android main run loop
…-root Find owning manifests for native package mirrors
…ation Preserve logical paths when enumerating symlinked targets
The skipstone package that produces the skip command-line tool now lives in the skipstone/ folder of this repository instead of a separate repository that pinned this one as a submodule. The two packages share the SkipDrive sources through the skipstone/Sources/SkipDriveExternal symbolic link, which now points at ../../Sources/SkipDrive, so the submodule, the .gitmodules file, and the CI job that checked the submodule pin are gone. SKIPLOCAL builds the tool from the bundled skipstone/ folder when set to an empty value; a non-empty value still names another checkout. The PWD heuristic that Xcode relies on is kept. The branch for hosts other than macOS and Linux, which depended on the skipstone package by URL, is removed since it would now refer to this repository. CI is split into two workflows in this repository: ci.yml builds and tests the plugin package with the tool compiled from skipstone/, and skipstone-ci.yml builds and tests the skipstone package and exercises the tool on the Android emulator. release.yml now checks out this repository alone and can perform a release when dispatched manually; pushes and the nightly schedule remain dry runs. The release script releases to the repository of the origin remote (or the one running the workflow) so forks can rehearse releases, updates both version constants, verifies both CI workflows passed for the commit, and only updates the Homebrew cask when a homebrew-skip checkout is available.
Both packages are licensed under the Apache License 2.0 with the Runtime Library Exception, as are the other Skip repositories, so the duplicate skipstone/LICENSE.txt is removed and the root license file is renamed to LICENSE.txt to match them. The per-file copyright header comments are removed from the Swift and Java sources; the license is conveyed by the root license file alone. The attribution block for the code adapted from the Swift project in Sources/SkipDrive/ToolSupport.swift is kept.
…nse file skip init no longer writes a LICENSE.txt into the projects it creates, so the file trees that testSkipIcon compares against must not list one.
Contributor
|
This looks like a great improvement! Didn't see any regression when trying this out locally, so great stuff! |
marcprux
marked this pull request as ready for review
November 9, 2026 14:32
Member
Author
|
Great! I've marked this "Ready for Review", so if anyone else can take a look, I would appreciate it. It would be best to get this merge sooner rather than later so we can mark the skipstone repo read-only and not risk any "drift" in terms of PRs or other code changes. |
Pushing a semantic version tag for a commit on main now triggers the release workflow, which builds the macOS and Linux artifacts, creates a "Release X.Y.Z" commit that bumps the version constants and points the plugin's binary targets at them, moves the tag onto that commit, publishes the GitHub release with the artifacts, and updates the Homebrew cask when a token for it is configured. The release script takes the version from the tag instead of bumping the last one itself, refuses to release a commit that is not on main, a version whose release already exists, or a commit whose CI has not passed, and exits early when run for a commit that already references the release artifacts, which is what the moved tag triggers when it is pushed with a personal access token. Dry runs restore the files they modify. Manual dispatch releases a given version, or performs a dry run when no version is given; the nightly dry run remains, and the dry run on every push is dropped since the skipstone CI workflow already builds the plugin bundles.
fhasse95
approved these changes
Nov 9, 2026
fhasse95
left a comment
Member
There was a problem hiding this comment.
I also tested building my app locally using the Skipstone plugin from this branch and didn’t notice any regressions. Thanks for the changes, including the simplified release process using version tags. That should make things easier going forward!
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
This is a draft PR that merges the skipstone repository into the skip build plugin repo, as per recent discussions about streamlining the build process. It preserved skipstone history, but any outstanding PRs would need to be re-filed against this repository.
The benefit is that it makes the build process much simpler, and enables us to have CI perform the release (upon tagging main with a semantic version number), rather than having to run the
skipstone/scripts/release_skip.shon a local machine.