Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Feature: Generate command line for linux and Mac and even for windows, and publish it on release TAG #427

Open
jesus-mg-ios opened this issue Oct 13, 2022 · 12 comments · May be fixed by #616

Comments

@jesus-mg-ios
Copy link

jesus-mg-ios commented Oct 13, 2022

Hi community:

Thanks for read me.
I don't know if it's possible to compile and generate the cli-tool and attach it to the version tag like, for example, https://github.com/nicklockwood/SwiftFormat has,

I think lots of people do not use the official swift format because is a pain to use it in CIs and teammates computers.
You have to build it and then save it on a cache ... Or rebuild all times in new computers. The use of SPM is not straight forward in all cases.

Thanks in advance

CC: @allevato

@jesus-mg-ios jesus-mg-ios changed the title Feature: Generate command line for linux and Mac, and publish it on release note Feature: Generate command line for linux and Mac, and publish it on release TAG Oct 13, 2022
@jesus-mg-ios jesus-mg-ios changed the title Feature: Generate command line for linux and Mac, and publish it on release TAG Feature: Generate command line for linux and Mac and even for windows, and publish it on release TAG Oct 13, 2022
@jesus-mg-ios
Copy link
Author

#430 #378 #377 Could be resolved if repository owner provides a cli binary in release Tags

@jesus-mg-ios
Copy link
Author

@dabrahams any thoughts about that?

@dabrahams
Copy link
Contributor

I don't, but I bet @lucteo has useful input.

@lucteo
Copy link

lucteo commented Mar 10, 2023

Hi

I'm not an expert on swift build system, so I'm not sure if I can provide the best help here. But, regardless if this helps, I'm happy to share my experience.

The first problem we wanted to solve was how to build swift-format, especially since we needed a feature on main that was not yet released. We didn't want to directly use main, as we were afraid of changes in swift-format that would break our workflow. But even without that problem, building swift-format was not always successful (especially on CI). To solve this, we forked swift-format and committed `Package.resolved. See https://github.com/val-lang/swift-format. We always have a controlled version of swift-format, and that always builds.

We depend on swift-format in our Package.swift. Yes, builds are slower (especially for clean builds), but that's ok for us. Please note that for the CI job, we use a debug build of swift-format, as the compilation in release is much slower..

The second major hurdle we had to jump is executing swift-format for our code. We tried using the two build plugins provided in swift-format repo, but they were too slow to run. With a debug build, running them on all the targets could take almost a minute on my machine. Not a great experience :)

We wrote a shell script that would execute swift-format by directories, not by target. In this, we had a shortcut to search for the swift-format executable in known locations. If that fails, we just run swift-format through swift run -c <build_mode> swift-format <args>. This works well in all our needed cases, including CI. See script at: https://github.com/val-lang/val/blob/main/Tools/run-swift-format.sh.

We never tested this for windows builds (we had many problems with our CI Windows build, until we disabled it -- way too unstable). The CI job runs on Ubuntu, and some of us run the tool on Mac.

Hope that helps

Best regards,
LucTeo

@Gustl22
Copy link

Gustl22 commented Aug 19, 2023

@jesus-mg-ios
Copy link
Author

Any updates on it?

@ahoppen
Copy link
Member

ahoppen commented Apr 23, 2024

Tracked in Apple’s issue tracker as rdar://126948314

@jesus-mg-ios
Copy link
Author

Any updates on it? Would be super nice to get it in a short time. I think swift-format could grow in audience if this distribution were added.

@ahoppen
Copy link
Member

ahoppen commented Jun 12, 2024

swift-format is included in the swift.org toolchains you can download from http://swift.org/install/macos/ and is also included in the Xcode 16 Beta toolchain. I assume that you have some toolchain installed on your CI system, which means that you should have swift-format as well now. Does that satisfy your needs?

@jesus-mg-ios
Copy link
Author

jesus-mg-ios commented Jun 12, 2024

@ahoppen thanks for your comment. Things that maybe I didn't catch, because as far I can see, docs don't point to your observation -> https://github.com/apple/swift-format?tab=readme-ov-file#getting-swift-format

  1. Can I run swiftformat if the CI has swift installed? If yes, how can I run it?
  2. If not, is there any way to download swiftformat (notice only swiftformat) per version without building it each time on the machine, and without building it on my side, that is to say, is there any binary distro available?
  3. Only the "beta Xcode 16 Beta toolchain" includes it, isn't it? In this case, installing only Xcode 16 does not make available swift-format directly from the terminal, or am I wrong?
  4. Instructions on this new way to install and use swift-format should be on the readme file.

@peterkos
Copy link

@jesus-mg-ios I was able to run it by selecting the beta CLI toolchain in Xcode > Preferences > Locations > Command Line Tools, then running swift format

@ahoppen
Copy link
Member

ahoppen commented Jun 17, 2024

  1. Can I run swiftformat if the CI has swift installed? If yes, how can I run it?
  2. If not, is there any way to download swiftformat (notice only swiftformat) per version without building it each time on the machine, and without building it on my side, that is to say, is there any binary distro available?
  3. Only the "beta Xcode 16 Beta toolchain" includes it, isn't it? In this case, installing only Xcode 16 does not make available swift-format directly from the terminal, or am I wrong?

If you have Xcode 16 selected using xcode-select, you should be able to run it using swift format (no space). The swift-format binary should be available in /Applications/Xcode-beta.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/swift-format for Xcode 16. Alternatively you can run DEVELOPER_DIR=/Applications/Xcode-beta.app swift format, which should effectively set your current Xcode for the current command to the Xcode 16 beta.

On Linux and macOS, swift-format is part of the open source toolchain releases.

  1. Instructions on this new way to install and use swift-format should be on the readme file.

That is true. If you would like to open a PR to fix the README, that would be a very welcome contribution to the project.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging a pull request may close this issue.

6 participants