diff --git a/.github/workflows/cd.yml b/.github/workflows/cd.yml
new file mode 100644
index 0000000..d0f4da8
--- /dev/null
+++ b/.github/workflows/cd.yml
@@ -0,0 +1,21 @@
+name: CD
+on:
+ release:
+ types: published
+jobs:
+ docs:
+ runs-on: macos-latest
+ steps:
+ - uses: actions/checkout@v2
+ - uses: sersoft-gmbh/swifty-docs-action@v1
+ with:
+ module-version: ${{ github.event.inputs.version }}
+
+ pods:
+ runs-on: macos-latest
+ steps:
+ - uses: actions/checkout@v2
+ - run: pod trunk push --allow-warnings
+ env:
+ COCOAPODS_TRUNK_TOKEN: ${{ secrets.COCOAPODS_TRUNK_TOKEN }}
+ VERSION: ${{ github.event.inputs.version }}
diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml
index 735d68b..b6b6372 100644
--- a/.github/workflows/ci.yml
+++ b/.github/workflows/ci.yml
@@ -1,5 +1,5 @@
name: CI
-on: [pull_request]
+on: pull_request
jobs:
smoke:
runs-on: macos-latest
@@ -8,39 +8,22 @@ jobs:
- uses: actions/checkout@v2
- run: swift test --generate-linuxmain
- run: git diff --exit-code
- macOS:
- needs: smoke
- runs-on: macos-latest
- strategy:
- matrix:
- xcode:
- # - 10.3 # Swift 5.0 (doesn’t work on GHA macOS image :-/)
- - 11.3 # Swift 5.1
- - ^11.4 # Swift 5.2
- # - ^12.5 # Swift 5.4 (not yet available on GHA)
- steps:
- - uses: actions/checkout@v2
- - name: setup-xcode
- uses: maxim-lobanov/setup-xcode@v1
- with:
- xcode-version: ${{ matrix.xcode }}
- - run: swift --version
- - run: swift test --parallel
- otherOS:
- needs: smoke
+
+ apple:
runs-on: macos-latest
strategy:
matrix:
destination:
- - platform=iOS Simulator,OS=latest,name=iPhone 11
+ - platform=iOS Simulator,OS=latest,name=iPhone 12
- platform=tvOS Simulator,OS=latest,name=Apple TV
+ # - platform=watchOS Simulator,OS=latest,name=Apple Watch Series 5 - 40mm
+ # ^^ coming with Xcode 12.5 which is not yet available on GHA
- platform=macOS
steps:
- uses: actions/checkout@v2
- uses: maxim-lobanov/setup-xcode@v1
with:
- xcode-version: 12 # Swift 5.3
- - run: swift --version
+ xcode-version: 12.4
- run: swift package generate-xcodeproj --enable-code-coverage
- uses: sersoft-gmbh/xcodebuild-action@v1
with:
@@ -49,43 +32,31 @@ jobs:
destination: ${{ matrix.destination }}
action: test
- uses: codecov/codecov-action@v1
- watchOS:
- needs: smoke
- runs-on: macos-latest
- steps:
- - uses: actions/checkout@v2
- - run: swift package generate-xcodeproj
- - uses: sersoft-gmbh/xcodebuild-action@v1
- with:
- project: Path.swift.xcodeproj
- scheme: Path.swift-Package
- destination: platform=watchOS Simulator,OS=latest,name=Apple Watch Series 5 - 40mm
- action: build
- linux-4-2:
- needs: smoke
+
+ linux-swift-4:
+ name: linux (4.2)
runs-on: ubuntu-18.04
steps:
- - uses: actions/checkout@v2
- uses: fwal/setup-swift@v1
with:
swift-version: 4.2
- - run: swift test --parallel # doesn’t support code coverage
+ - uses: actions/checkout@v2
+ - run: swift test --parallel
+
linux:
- needs: smoke
runs-on: ubuntu-18.04
strategy:
matrix:
swift:
- - 5.0.3
- - 5.1
- - 5.2
- # - 5.3 # 1 test fails
- # - 5.4
+ - '5.0'
+ - '5.1'
+ - '5.2'
+ - '5.3'
steps:
- - uses: actions/checkout@v2
- uses: fwal/setup-swift@v1
with:
swift-version: ${{ matrix.swift }}
+ - uses: actions/checkout@v2
- run: swift test --parallel --enable-code-coverage
- name: Generate Coverage Report
run: |
@@ -98,4 +69,15 @@ jobs:
> info.lcov
- uses: codecov/codecov-action@v1
with:
- file: ./info.lcov
\ No newline at end of file
+ file: ./info.lcov
+
+ # code coverage fails with 5.4 for some reason
+ linux-swift-5-4:
+ name: linux (5.4)
+ runs-on: ubuntu-18.04
+ steps:
+ - uses: fwal/setup-swift@v1
+ with:
+ swift-version: 5.4
+ - uses: actions/checkout@v2
+ - run: swift test --parallel
diff --git a/Path.swift.podspec b/Path.swift.podspec
new file mode 100644
index 0000000..f496beb
--- /dev/null
+++ b/Path.swift.podspec
@@ -0,0 +1,16 @@
+Pod::Spec.new do |spec|
+ spec.name = "Path.swift"
+ spec.version = ENV['VERSION'] || "0.0.1"
+ spec.summary = "Delightful, robust, cross-platform and chainable file-pathing functions."
+ spec.homepage = "https://github.com/mxcl/Path.swift"
+ spec.license = "Unlicense"
+ spec.author = { "Max Howell" => "mxcl@me.com" }
+ spec.source = { :git => "https://github.com/mxcl/Path.swift.git", :tag => "#{spec.version}" }
+ spec.source_files = "Sources/*.swift"
+ spec.swift_versions = ['4.2', '5']
+ spec.module_name = 'Path'
+ spec.osx.deployment_target = '10.10'
+ spec.ios.deployment_target = '8.0'
+ spec.tvos.deployment_target = '9.0'
+ spec.watchos.deployment_target = '2.0'
+end
diff --git a/README.md b/README.md
index 641f337..33e05c9 100644
--- a/README.md
+++ b/README.md
@@ -45,16 +45,13 @@ try Bundle.resources.helper.copy(into: Path.root.usr.local.bin).chmod(0o500)
We emphasize safety and correctness, just like Swift, and also (again like
Swift), we provide a thoughtful and comprehensive (yet concise) API.
-# Support mxcl
+# Sponsor @mxcl
Hi, I’m Max Howell and I have written a lot of open source software—generally
-a good deal of my free time 👨🏻💻.
+a good deal of my free time 👨🏻💻. Sponsorship helps me justify creating new open
+source and maintaining it. Thank you.
-
-
-
-
-[Other donation/tipping options](http://mxcl.dev/#donate)
+[Sponsor @mxcl].
# Handbook
@@ -367,7 +364,7 @@ no filesystem entry there at all check if `type` is `nil`.
Changing directory is dangerous, you should *always* try to avoid it and thus
we don’t even provide the method. If you are executing a sub-process then
-use `Process.currentDirectoryURL` to change *its* working directory when it
+use `Process.currentDirectoryURL` to change *its* working directory when it
executes.
If you must change directory then use `FileManager.changeCurrentDirectory` as
@@ -438,7 +435,7 @@ Carthage:
[badge-platforms]: https://img.shields.io/badge/platforms-macOS%20%7C%20Linux%20%7C%20iOS%20%7C%20tvOS%20%7C%20watchOS-lightgrey.svg
-[badge-languages]: https://img.shields.io/badge/swift-4.2%20%7C%205.0%20%7C%205.1%20%7C%205.2%20%7C%205.3-orange.svg
+[badge-languages]: https://img.shields.io/badge/swift-4.2%20%7C%205.x-orange.svg
[docs]: https://mxcl.dev/Path.swift/Structs/Path.html
[badge-jazzy]: https://raw.githubusercontent.com/mxcl/Path.swift/gh-pages/badge.svg?sanitize=true
[badge-codecov]: https://codecov.io/gh/mxcl/Path.swift/branch/master/graph/badge.svg
@@ -447,3 +444,4 @@ Carthage:
[codecov]: https://codecov.io/gh/mxcl/Path.swift
[badge-version]: https://img.shields.io/cocoapods/v/Path.swift.svg?label=version
[cocoapods]: https://cocoapods.org/pods/Path.swift
+[Sponsor @mxcl]: https://github.com/sponsors/mxcl
\ No newline at end of file
diff --git a/Sources/Path+FileManager.swift b/Sources/Path+FileManager.swift
index 66edf22..3798187 100644
--- a/Sources/Path+FileManager.swift
+++ b/Sources/Path+FileManager.swift
@@ -29,7 +29,8 @@ public extension Pathish {
if overwrite, let tokind = to.type, tokind != .directory, type != .directory {
try FileManager.default.removeItem(at: to.url)
}
- #if os(Linux) && !swift(>=5.3) // check if fixed
+ #if os(Linux)
+ //NOTE doing manually due to inconsistency in Linux Foundation behavior
if !overwrite, to.type != nil {
throw CocoaError.error(.fileWriteFileExists)
}
@@ -69,7 +70,8 @@ public extension Pathish {
if overwrite, let kind = rv.type, kind != .directory {
try FileManager.default.removeItem(at: rv.url)
}
- #if os(Linux) && !swift(>=5.3) // check if fixed
+ #if os(Linux)
+ //NOTE doing manually due to inconsistency in Linux Foundation behavior
if !overwrite, rv.type != nil {
throw CocoaError.error(.fileWriteFileExists)
}
diff --git a/Sources/Path.swift b/Sources/Path.swift
index 8842066..519e509 100644
--- a/Sources/Path.swift
+++ b/Sources/Path.swift
@@ -168,6 +168,7 @@ public extension Pathish {
*/
var parent: Path {
let index = string.lastIndex(of: "/")!
+ guard index != string.indices.startIndex else { return Path(string: "/") }
let substr = string[string.indices.startIndex..