diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 5efff76..b9386b4 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -12,22 +12,13 @@ jobs: runs-on: ubuntu-latest strategy: matrix: - swift-version: ["6.1", "6.2"] + swift-version: ["6.1"] container: image: swift:${{ matrix.swift-version }} steps: - name: Checkout code uses: actions/checkout@v4 - - name: Cache Swift packages - uses: actions/cache@v4 - with: - path: .build - key: ${{ runner.os }}-spm-${{ matrix.swift-version }}-${{ hashFiles('**/Package.resolved') }} - restore-keys: | - ${{ runner.os }}-spm-${{ matrix.swift-version }}- - ${{ runner.os }}-spm- - - name: Build package run: swift build --verbose @@ -39,7 +30,7 @@ jobs: runs-on: macos-latest strategy: matrix: - swift-version: ["6.1", "6.2"] + swift-version: ["6.1"] steps: - name: Checkout code uses: actions/checkout@v4 @@ -49,15 +40,6 @@ jobs: with: swift-version: ${{ matrix.swift-version }} - - name: Cache Swift packages - uses: actions/cache@v4 - with: - path: .build - key: ${{ runner.os }}-spm-${{ matrix.swift-version }}-${{ hashFiles('**/Package.resolved') }} - restore-keys: | - ${{ runner.os }}-spm-${{ matrix.swift-version }}- - ${{ runner.os }}-spm- - - name: Build package run: swift build --verbose diff --git a/.github/workflows/release-tailwindcss-cli.yml b/.github/workflows/release-tailwindcss-cli.yml deleted file mode 100644 index 130cee9..0000000 --- a/.github/workflows/release-tailwindcss-cli.yml +++ /dev/null @@ -1,104 +0,0 @@ -name: Release TailwindCSS CLI Artifacts - -on: - workflow_dispatch: - inputs: - tailwind_version: - description: "TailwindCSS release version (e.g., v4.1.14)" - required: true - type: string - -jobs: - build-and-release: - name: Build and Release Artifacts - runs-on: macos-latest - permissions: - contents: write - - steps: - - name: Checkout code - uses: actions/checkout@v4 - - - name: Setup Swift - uses: swift-actions/setup-swift@v2 - with: - swift-version: "6.1" - - - name: Cache Swift packages - uses: actions/cache@v4 - with: - path: .build - key: ${{ runner.os }}-spm-release-${{ hashFiles('**/Package.resolved') }} - restore-keys: | - ${{ runner.os }}-spm-release- - ${{ runner.os }}-spm- - - - name: Validate version format - run: | - if [[ ! "${{ inputs.tailwind_version }}" =~ ^v[0-9]+\.[0-9]+\.[0-9]+$ ]]; then - echo "Error: Version must be in format vX.Y.Z (e.g., v4.1.14)" - exit 1 - fi - echo "Version format is valid: ${{ inputs.tailwind_version }}" - - - name: Build artifact bundler - run: | - echo "Building TailwindCSSCLIArtifactBundler..." - swift build -c release --product TailwindCSSCLIArtifactBundler - - - name: Create artifact bundles - run: | - echo "Creating artifact bundles for TailwindCSS ${{ inputs.tailwind_version }}..." - mkdir -p ./artifacts - .build/release/TailwindCSSCLIArtifactBundler \ - --version "${{ inputs.tailwind_version }}" \ - --work-dir "${{ runner.temp }}/tailwindcss-bundles" \ - --output-dir ./artifacts - - - name: List generated artifacts - run: | - echo "Generated artifacts:" - ls -lh artifacts/ - - - name: Compute checksum - id: checksum - run: | - CHECKSUM=$(shasum -a 256 artifacts/tailwindcss.artifactbundleindex | awk '{print $1}') - echo "checksum=$CHECKSUM" >> $GITHUB_OUTPUT - echo "Artifact bundle index checksum: $CHECKSUM" - - - name: Create release - uses: softprops/action-gh-release@6da8fa9354ddfdc4aeace5fc48d7f679b5214090 # v2.4.1 - with: - tag_name: TailwindCSSCLI-${{ inputs.tailwind_version }} - name: TailwindCSS CLI ${{ inputs.tailwind_version }} - body: | - ## TailwindCSS CLI Artifact Bundles - - This release contains Swift Package Manager artifact bundles for TailwindCSS CLI version `${{ inputs.tailwind_version }}`. - - ### Included Artifacts - - Linux x64 (`x86_64-unknown-linux-gnu`) - - macOS x64 (`x86_64-apple-darwin`) - - macOS ARM64 (`aarch64-apple-darwin`) - - ### Usage - Add the artifact bundle to your `Package.swift`: - ```swift - .binaryTarget( - name: "TailwindCSSCLI", - url: "https://github.com/${{ github.repository }}/releases/download/TailwindCSSCLI@${{ inputs.tailwind_version }}/tailwindcss.artifactbundleindex", - checksum: "${{ steps.checksum.outputs.checksum }}" - ) - ``` - - ### Checksum - ``` - ${{ steps.checksum.outputs.checksum }} - ``` - draft: false - prerelease: false - make_latest: false - files: | - artifacts/*.zip - artifacts/tailwindcss.artifactbundleindex diff --git a/Package.swift b/Package.swift index ea0e1a8..81ffc58 100644 --- a/Package.swift +++ b/Package.swift @@ -25,8 +25,8 @@ let package = Package( .binaryTarget( name: "TailwindCSSCLI", url: - "https://github.com/laosb/SwiftTailwind/releases/download/1.1.0-test.4+tw.4.1.14/tailwindcss.artifactbundleindex", - checksum: "ec4df49e361db5fc3159c431e5661af2e1b22d8575c64ce0482a8e84cfd93d04" + "https://github.com/laosb/SwiftTailwind/releases/download/1.1.0-test.3+tw.4.1.14/tailwindcss.artifactbundleindex", + checksum: "3287be503b5d954d1946a110cf2a1d14d37f9941983afe55f1743ddb5b487392" ), .target( name: "SwiftTailwindExample", diff --git a/Sources/TailwindCSSCLIArtifactBundler/ArtifactBundleBuilder+File Operations.swift b/Sources/TailwindCSSCLIArtifactBundler/ArtifactBundleBuilder+File Operations.swift deleted file mode 100644 index 19f43fd..0000000 --- a/Sources/TailwindCSSCLIArtifactBundler/ArtifactBundleBuilder+File Operations.swift +++ /dev/null @@ -1,41 +0,0 @@ -import Foundation - -extension ArtifactBundleBuilder { - func downloadFile(from urlString: String, to destination: String) throws { - guard let url = URL(string: urlString) else { - throw ArtifactBundleError.invalidURL(urlString) - } - - let data = try Data(contentsOf: url) - try data.write(to: URL(fileURLWithPath: destination)) - } - - func makeExecutable(path: String) throws { - let attributes = [FileAttributeKey.posixPermissions: 0o755] - try fileManager.setAttributes(attributes, ofItemAtPath: path) - } - - func createZipFile(bundleDir: String, zipPath: String) throws { - // Remove existing ZIP file if it exists - if fileManager.fileExists(atPath: zipPath) { - try fileManager.removeItem(atPath: zipPath) - } - - let bundleDirURL = URL(fileURLWithPath: bundleDir) - let workDirURL = bundleDirURL.deletingLastPathComponent() - let bundleName = bundleDirURL.lastPathComponent - - let process = Process() - process.executableURL = URL(fileURLWithPath: "/usr/bin/zip") - process.arguments = ["-r", zipPath, bundleName] - process.currentDirectoryURL = workDirURL - - try process.run() - process.waitUntilExit() - - guard process.terminationStatus == 0 else { - throw ArtifactBundleError.zipCreationFailed - } - } - -} diff --git a/Sources/TailwindCSSCLIArtifactBundler/ArtifactBundleBuilder+computeChecksum.swift b/Sources/TailwindCSSCLIArtifactBundler/ArtifactBundleBuilder+computeChecksum.swift deleted file mode 100644 index 7a5f906..0000000 --- a/Sources/TailwindCSSCLIArtifactBundler/ArtifactBundleBuilder+computeChecksum.swift +++ /dev/null @@ -1,46 +0,0 @@ -import Crypto -import Foundation - -extension ArtifactBundleBuilder { - /// Computes the SHA256 checksum of a file. - /// - /// If `usingSHA256Directly` is true, it uses Swift Crypto's SHA256 implementation. - /// This is to workaround https://github.com/swiftlang/swift-package-manager/issues/9219. - func computeChecksum( - filePath: String, - usingSHA256Directly: Bool = false - ) throws -> String { - if usingSHA256Directly { - // Use swift-crypto's SHA256 implementation - let fileURL = URL(fileURLWithPath: filePath) - let data = try Data(contentsOf: fileURL) - let hash = SHA256.hash(data: data) - return hash.compactMap { String(format: "%02x", $0) }.joined() - } else { - // Use swift package compute-checksum command - let process = Process() - process.executableURL = URL(fileURLWithPath: "/usr/bin/swift") - process.arguments = ["package", "compute-checksum", filePath] - - let pipe = Pipe() - process.standardOutput = pipe - - try process.run() - process.waitUntilExit() - - guard process.terminationStatus == 0 else { - throw ArtifactBundleError.checksumComputationFailed - } - - let data = pipe.fileHandleForReading.readDataToEndOfFile() - let output = String(data: data, encoding: .utf8)?.trimmingCharacters( - in: .whitespacesAndNewlines) - - guard let checksum = output, !checksum.isEmpty else { - throw ArtifactBundleError.checksumComputationFailed - } - - return checksum - } - } -} diff --git a/Sources/TailwindCSSCLIArtifactBundler/ArtifactBundleBuilder+expandingTriple.swift b/Sources/TailwindCSSCLIArtifactBundler/ArtifactBundleBuilder+expandingTriple.swift deleted file mode 100644 index 77146b1..0000000 --- a/Sources/TailwindCSSCLIArtifactBundler/ArtifactBundleBuilder+expandingTriple.swift +++ /dev/null @@ -1,29 +0,0 @@ -extension ArtifactBundleBuilder { - /// Expands a list of triples into a stricter list of triples. - /// - /// To workaround https://github.com/swiftlang/swift-package-manager/issues/7362. - func expandingTriple(_ triple: String) -> [String] { - switch triple { - case "aarch64-apple-darwin": - [ - "aarch64-apple-darwin", - "arm64-apple-macosx12.0", - "arm64-apple-macosx13.0", - "arm64-apple-macosx14.0", - "arm64-apple-macosx15.0", - "arm64-apple-macosx26.0", - ] - case "x86_64-apple-darwin": - [ - "x86_64-apple-darwin", - "x86_64-apple-macosx12.0", - "x86_64-apple-macosx13.0", - "x86_64-apple-macosx14.0", - "x86_64-apple-macosx15.0", - "x86_64-apple-macosx26.0", - ] - // TODO: Does linux need more detailed triple variants? - default: [triple] - } - } -} diff --git a/Sources/TailwindCSSCLIArtifactBundler/ArtifactBundleBuilder.swift b/Sources/TailwindCSSCLIArtifactBundler/ArtifactBundleBuilder.swift index eef4027..043eae6 100644 --- a/Sources/TailwindCSSCLIArtifactBundler/ArtifactBundleBuilder.swift +++ b/Sources/TailwindCSSCLIArtifactBundler/ArtifactBundleBuilder.swift @@ -110,7 +110,7 @@ class ArtifactBundleBuilder { version: version, type: "executable", variants: [ - ArtifactVariant(path: binaryPath, supportedTriples: expandingTriple(triple)) + ArtifactVariant(path: binaryPath, supportedTriples: [triple]) ] ) diff --git a/Sources/TailwindCSSCLIArtifactBundler/ArtifactBundleError.swift b/Sources/TailwindCSSCLIArtifactBundler/ArtifactBundleError.swift deleted file mode 100644 index 4bb59e2..0000000 --- a/Sources/TailwindCSSCLIArtifactBundler/ArtifactBundleError.swift +++ /dev/null @@ -1,18 +0,0 @@ -import Foundation - -enum ArtifactBundleError: Error, LocalizedError { - case invalidURL(String) - case zipCreationFailed - case checksumComputationFailed - - var errorDescription: String? { - switch self { - case .invalidURL(let url): - return "Invalid URL: \(url)" - case .zipCreationFailed: - return "Failed to create ZIP file" - case .checksumComputationFailed: - return "Failed to compute checksum" - } - } -}