Skip to content
Draft
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
1 change: 1 addition & 0 deletions .bazelversion
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
9.1.0
19 changes: 18 additions & 1 deletion .github/workflows/pull_request.yml
Original file line number Diff line number Diff line change
Expand Up @@ -59,6 +59,23 @@ jobs:
- name: Build
run: cmake --build .cmake-build

bazel-linux:
name: Bazel (Linux)
needs: [soundness, validate_format_config]
runs-on: ubuntu-latest
container:
image: swift:6.0-jammy
steps:
- name: Checkout repo
uses: actions/checkout@v6
- name: Install Bazelisk
run: |
apt-get -qq update && apt-get -qq -y install curl
curl -fsSL -o /usr/local/bin/bazel https://github.com/bazelbuild/bazelisk/releases/latest/download/bazelisk-linux-amd64
chmod +x /usr/local/bin/bazel
- name: Test
run: bazel test //...

soundness:
name: Soundness
uses: swiftlang/github-workflows/.github/workflows/soundness.yml@0.0.11
Expand All @@ -68,7 +85,7 @@ jobs:
required:
name: Required
runs-on: ubuntu-latest
needs: [tests, soundness, validate_format_config, cmake-build]
needs: [tests, soundness, validate_format_config, cmake-build, bazel-linux]
steps:
- name: Success
run: echo "All required jobs succeeded."
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
.DS_Store
/bazel-*
/.build
/Packages
/*.xcodeproj
Expand Down
2 changes: 2 additions & 0 deletions .licenseignore
Original file line number Diff line number Diff line change
Expand Up @@ -27,3 +27,5 @@ Package.resolved
**/Package.resolved
.unacceptablelanguageignore
**/Snapshots/*
.bazelversion
*.bazel
25 changes: 25 additions & 0 deletions BUILD.bazel
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
load("@rules_swift//swift:swift.bzl", "swift_library")

package(default_visibility = ["//:__subpackages__"])

swift_library(
name = "ArgumentParserToolInfo",
srcs = glob(["Sources/ArgumentParserToolInfo/**/*.swift"]),
module_name = "ArgumentParserToolInfo",
)

swift_library(
name = "ArgumentParser",
srcs = glob(["Sources/ArgumentParser/**/*.swift"]),
module_name = "ArgumentParser",
visibility = ["//visibility:public"],
deps = [":ArgumentParserToolInfo"],
)

swift_library(
name = "ArgumentParserTestHelpers",
testonly = True,
srcs = glob(["Sources/ArgumentParserTestHelpers/**/*.swift"]),
module_name = "ArgumentParserTestHelpers",
deps = [":ArgumentParser"],
)
25 changes: 25 additions & 0 deletions Examples/BUILD.bazel
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
load("@rules_swift//swift:swift.bzl", "swift_binary")

package(default_visibility = ["//:__subpackages__"])

swift_binary(
name = "count-lines",
srcs = glob(["count-lines/**/*.swift"]),
target_compatible_with = ["@platforms//os:macos"],
deps = ["//:ArgumentParser"],
)

[
swift_binary(
name = tool,
srcs = glob(["{}/**/*.swift".format(tool)]),
deps = ["//:ArgumentParser"],
)
for tool in [
"color",
"default-as-flag",
"math",
"repeat",
"roll",
]
]
10 changes: 10 additions & 0 deletions MODULE.bazel
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
module(
name = "swift_argument_parser",
version = "0",
compatibility_level = 1,
)

bazel_dep(name = "apple_support", version = "2.5.4")
bazel_dep(name = "bazel_skylib", version = "1.9.0")
bazel_dep(name = "platforms", version = "1.0.0")
bazel_dep(name = "rules_swift", version = "3.6.1", max_compatibility_level = 3)
142 changes: 142 additions & 0 deletions Tests/BUILD.bazel
Original file line number Diff line number Diff line change
@@ -0,0 +1,142 @@
load("@bazel_skylib//rules:copy_file.bzl", "copy_file")
load("@rules_swift//swift:swift.bzl", "swift_test")

[
copy_file(
name = name + ".copy",
src = target,
out = name,
allow_symlink = True,
)
for name, target in [
("generate-docc-reference", "//Tools:generate-docc-reference"),
("generate-manual", "//Tools:generate-manual"),
("color", "//Examples:color"),
("count-lines", "//Examples:count-lines"),
("default-as-flag", "//Examples:default-as-flag"),
("math", "//Examples:math"),
("repeat", "//Examples:repeat"),
("roll", "//Examples:roll"),
]
]

genrule(
name = "generate_module_accessor",
outs = ["module_accessor.swift"],
cmd = """cat > $@ <<'EOF'
import Foundation

public extension Bundle {
static let module: Bundle = {
let testSrcDir = ProcessInfo.processInfo.environment["TEST_SRCDIR"]!
let url = URL(fileURLWithPath: testSrcDir)
.appendingPathComponent("_main/Tests/ArgumentParserExampleTests")
return Bundle(url: url)!
}()
}
EOF
""",
)

swift_test(
name = "EndToEndTests",
srcs = glob(["ArgumentParserEndToEndTests/**/*.swift"]),
deps = [
"//:ArgumentParser",
"//:ArgumentParserTestHelpers",
],
)

swift_test(
name = "ExampleTests",
srcs = glob(["ArgumentParserExampleTests/**/*.swift"]) + [":generate_module_accessor"],
data = glob([
"ArgumentParserExampleTests/**/*.zsh",
"ArgumentParserExampleTests/**/*.bash",
"ArgumentParserExampleTests/**/*.fish",
"ArgumentParserExampleTests/**/*.txt",
]) + [
":math",
":repeat",
":roll",
] + select({
"@platforms//os:macos": [":count-lines"],
"//conditions:default": [],
}),
deps = [
"//:ArgumentParser",
"//:ArgumentParserTestHelpers",
],
)

swift_test(
name = "GenerateDoccReferenceTests",
srcs = glob(["ArgumentParserGenerateDoccReferenceTests/**/*.swift"]),
data = glob(["ArgumentParserGenerateDoccReferenceTests/**/*.md"]) + [
":color",
":generate-docc-reference",
":math",
":repeat",
":roll",
] + select({
"@platforms//os:macos": [":count-lines"],
"//conditions:default": [],
}),
deps = [
"//:ArgumentParser",
"//:ArgumentParserTestHelpers",
],
)

swift_test(
name = "GenerateManualTests",
srcs = glob(["ArgumentParserGenerateManualTests/**/*.swift"]),
data = glob(["ArgumentParserGenerateManualTests/**/*.mdoc"]) + [
":color",
":default-as-flag",
":generate-manual",
":math",
":repeat",
":roll",
] + select({
"@platforms//os:macos": [":count-lines"],
"//conditions:default": [],
}),
deps = [
"//:ArgumentParser",
"//:ArgumentParserTestHelpers",
],
)

swift_test(
name = "PackageManagerTests",
srcs = glob(["ArgumentParserPackageManagerTests/**/*.swift"]),
deps = [
"//:ArgumentParser",
"//:ArgumentParserTestHelpers",
],
)

swift_test(
name = "ToolInfoTests",
srcs = glob(["ArgumentParserToolInfoTests/**/*.swift"]),
data = glob(["ArgumentParserToolInfoTests/**/*.json"]),
deps = [
"//:ArgumentParserToolInfo",
],
)

swift_test(
name = "UnitTests",
srcs = glob(["ArgumentParserUnitTests/**/*.swift"]),
data = glob([
"ArgumentParserUnitTests/**/*.json",
"ArgumentParserUnitTests/**/*.bash",
"ArgumentParserUnitTests/**/*.fish",
"ArgumentParserUnitTests/**/*.zsh",
]),
deps = [
"//:ArgumentParser",
"//:ArgumentParserTestHelpers",
],
)
28 changes: 28 additions & 0 deletions Tools/BUILD.bazel
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
load("@rules_swift//swift:swift.bzl", "swift_binary")

package(default_visibility = ["//:__subpackages__"])

swift_binary(
name = "changelog-authors",
srcs = glob(["changelog-authors/**/*.swift"]),
target_compatible_with = ["@platforms//os:macos"],
deps = ["//:ArgumentParser"],
)

swift_binary(
name = "generate-docc-reference",
srcs = glob(["generate-docc-reference/**/*.swift"]),
deps = [
"//:ArgumentParser",
"//:ArgumentParserToolInfo",
],
)

swift_binary(
name = "generate-manual",
srcs = glob(["generate-manual/**/*.swift"]),
deps = [
"//:ArgumentParser",
"//:ArgumentParserToolInfo",
],
)
Loading