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

Add command to update SwiftFormat reference to latest version #274

Merged
merged 1 commit into from
Jun 11, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions .github/actions/setup/action.yml
Original file line number Diff line number Diff line change
Expand Up @@ -10,3 +10,6 @@ runs:
run: sudo xcode-select --switch /Applications/Xcode_${{ inputs.xcode }}.app
if: ${{ inputs.xcode }}
shell: bash
- name: Install Ruby Gems
run: bundle install
shell: bash
13 changes: 11 additions & 2 deletions .github/workflows/main.yml
Original file line number Diff line number Diff line change
Expand Up @@ -17,8 +17,11 @@ jobs:
- '13.4.1' # Swift 5.6
steps:
- uses: actions/checkout@v2
- uses: ./.github/actions/setup
with:
xcode: ${{ matrix.xcode }}
- name: Test Package Plugin
run: swift package --allow-writing-to-package-directory format --lint
run: bundle exec rake lint:swift

test-package-plugin-macos-13:
name: Test Package Plugin
Expand All @@ -32,8 +35,11 @@ jobs:
- '15.0' # Swift 5.9
steps:
- uses: actions/checkout@v2
- uses: ./.github/actions/setup
with:
xcode: ${{ matrix.xcode }}
- name: Test Package Plugin
run: swift package --allow-writing-to-package-directory format --lint
run: bundle exec rake lint:swift

unit-tests:
name: Unit Tests
Expand All @@ -45,5 +51,8 @@ jobs:
- '15.0' # Swift 5.9
steps:
- uses: actions/checkout@v2
- uses: ./.github/actions/setup
with:
xcode: ${{ matrix.xcode }}
- name: Run Unit Tests
run: swift test
3 changes: 3 additions & 0 deletions Gemfile
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
source 'https://rubygems.org' do
gem "rake", "~> 13.0.0"
end
17 changes: 17 additions & 0 deletions Gemfile.lock
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
GEM
specs:

GEM
remote: https://rubygems.org/
specs:
rake (13.0.6)

PLATFORMS
arm64-darwin-23
ruby

DEPENDENCIES
rake (~> 13.0.0)!

BUNDLED WITH
2.5.4
54 changes: 54 additions & 0 deletions Rakefile
Original file line number Diff line number Diff line change
@@ -0,0 +1,54 @@
require 'json'
require 'net/http'
require 'json'
require 'tempfile'

namespace :lint do
desc 'Lints swift files'
task :swift do
sh 'swift package --allow-writing-to-package-directory format --lint'
end
end

namespace :format do
desc 'Formats swift files'
task :swift do
sh 'swift package --allow-writing-to-package-directory format'
end
end

namespace :update do
desc 'Updates SwiftFormat to the latest version'
task :swiftformat do
# Find the most recent release of SwiftFormat in the https://github.com/calda/SwiftFormat repo.
response = Net::HTTP.get(URI('https://api.github.com/repos/calda/SwiftFormat/releases/latest'))
latest_release_info = JSON.parse(response)

latest_version_number = latest_release_info['tag_name']

# Download the artifact bundle for the latest release and compute its checksum.
temp_dir = Dir.mktmpdir
artifact_bundle_url = "https://github.com/calda/SwiftFormat/releases/download/#{latest_version_number}/swiftformat.artifactbundle.zip"
artifact_bundle_zip_path = "#{temp_dir}/swiftformat.artifactbundle.zip"

sh "curl #{artifact_bundle_url} -L --output #{artifact_bundle_zip_path}"
checksum = `swift package compute-checksum #{artifact_bundle_zip_path}`

# Update the Package.swift file to reference this version
package_manifest_path = 'Package.swift'
package_manifest_content = File.read(package_manifest_path)

updated_swift_format_reference = <<-EOS
.binaryTarget(
name: "SwiftFormat",
url: "https://github.com/calda/SwiftFormat/releases/download/#{latest_version_number}/SwiftFormat.artifactbundle.zip",
checksum: "#{checksum.strip}"),
EOS

regex = /[ ]*.binaryTarget\([\S\s]*name: "SwiftFormat"[\S\s]*?\),\s/
updated_package_manifest = package_manifest_content.gsub(regex, updated_swift_format_reference)
File.open(package_manifest_path, "w") { |file| file.puts updated_package_manifest }

puts "Updated Package.swift to reference SwiftFormat #{latest_version_number}"
end
end
Loading