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
69 changes: 11 additions & 58 deletions .github/workflows/pull_request.yml
Original file line number Diff line number Diff line change
Expand Up @@ -16,62 +16,24 @@ jobs:
needs: [soundness]
strategy:
fail-fast: false
matrix:
executableTargetBuildSystem: ["native"]
buildSystem: ["native", "swiftbuild"]
linuxSwiftVersion: ['["nightly-main", "nightly-6.2"]', '["nightly-main"]']
exclude:
- buildSystem: "swiftbuild"
linuxSwiftVersion: '["nightly-main", "nightly-6.2"]'
- buildSystem: "native"
linuxSwiftVersion: '["nightly-main"]'
name: Build (${{ matrix.buildSystem }}) (exectable target built using ${{ matrix.executableTargetBuildSystem }})
name: Build
uses: swiftlang/github-workflows/.github/workflows/swift_package_test.yml@0.0.11
with:
enable_cross_pr_testing: true
linux_os_versions: '["amazonlinux2", "bookworm", "noble", "jammy", "rhel-ubi9"]'
linux_swift_versions: ${{ matrix.linuxSwiftVersion }}
linux_swift_versions: '["nightly-main", "nightly-6.2"]'
linux_pre_build_command: ./.github/scripts/prebuild.sh
linux_build_command: 'swift run --build-system ${{ matrix.executableTargetBuildSystem }} swift-build --build-tests --build-system ${{ matrix.buildSystem}}'
# linux_build_command: 'swift run --build-system ${{ matrix.executableTargetBuildSystem }} swift-build --build-tests --build-system ${{ matrix.buildSystem}} && swift run --build-system ${{ matrix.executableTargetBuildSystem }} swift-test --parallel --build-system ${{ matrix.buildSystem}}'
linux_build_command: 'swift run swift-build --build-tests'
windows_build_timeout: 180
windows_swift_versions: '["nightly-main"]'
windows_swift_versions: '["nightly-main", "nightly-6.2"]'
windows_pre_build_command: 'Invoke-Program .\.github\scripts\prebuild.ps1'
windows_build_command: 'Invoke-Program swift run -Xlinker /ignore:4217 --configuration release --build-system ${{ matrix.executableTargetBuildSystem }} swift-build --build-tests -Xlinker /ignore:4217 --build-system ${{ matrix.buildSystem}}'
# windows_build_command: 'Invoke-Program swift run -Xlinker /ignore:4217 --build-system ${{ matrix.executableTargetBuildSystem }} swift-build --build-tests -Xlinker /ignore:4217 --build-system ${{ matrix.buildSystem}}; Invoke-Program swift run --build-system ${{ matrix.executableTargetBuildSystem }} -Xlinker /ignore:4217 swift-test -Xlinker /ignore:4217 --parallel --build-system ${{ matrix.buildSystem}}'
windows_build_command: 'Invoke-Program swift run -Xlinker /ignore:4217 --configuration release swift-build --build-tests --scratch-path .tests'
enable_windows_checks: true
enable_ios_checks: false
enable_macos_checks: true
macos_exclude_xcode_versions: "[{\"xcode_version\": \"16.4\"}]"
macos_build_command: 'swift run --build-system ${{ matrix.executableTargetBuildSystem }} swift-build --build-tests --build-system ${{ matrix.buildSystem}}'
# macos_build_command: 'swift run --build-system ${{ matrix.executableTargetBuildSystem }} swift-build --build-tests --build-system ${{ matrix.buildSystem}} && swift run --build-system ${{ matrix.executableTargetBuildSystem }} swift-test --parallel --build-system ${{ matrix.buildSystem}}'
ios_build_command: 'swift run --build-system ${{ matrix.executableTargetBuildSystem }} swift-build --build-tests --build-system ${{ matrix.buildSystem}} --sdk \"$(xcrun --sdk iphoneos --show-sdk-path)\" --triple arm64-apple-ios'
# ios_build_command: 'swift run --build-system ${{ matrix.executableTargetBuildSystem }} swift-build --build-tests --build-system ${{ matrix.buildSystem}} --sdk \"$(xcrun --sdk iphoneos --show-sdk-path)\" --triple arm64-apple-ios && swift run --build-system ${{ matrix.executableTargetBuildSystem }} swift-test --parallel --build-system ${{ matrix.buildSystem }} --sdk \"$(xcrun --sdk iphoneos --show-sdk-path)\" --triple arm64-apple-ios'

build-using-swiftbuild:
strategy:
fail-fast: false
matrix:
executableTargetBuildSystem: ["swiftbuild"]
buildSystem: ["swiftbuild"]
name: Build (${{ matrix.buildSystem }}) (exectable target built using ${{ matrix.executableTargetBuildSystem }})
needs: [soundness]
uses: swiftlang/github-workflows/.github/workflows/swift_package_test.yml@0.0.11
with:
linux_os_versions: '["amazonlinux2", "bookworm", "noble", "jammy", "rhel-ubi9"]'
linux_swift_versions: '["nightly-main"]'
linux_pre_build_command: ./.github/scripts/prebuild.sh
linux_build_command: 'swift run --build-system ${{ matrix.executableTargetBuildSystem }} swift-build --build-tests --build-system ${{ matrix.buildSystem }}'
enable_windows_checks: false
windows_build_timeout: 180
windows_swift_versions: '["nightly-main"]'
windows_pre_build_command: 'Invoke-Program .\.github\scripts\prebuild.ps1'
windows_build_command: 'Invoke-Program swift run --build-system ${{ matrix.executableTargetBuildSystem }} swift-build --build-tests --build-system ${{ matrix.buildSystem }}'
macos_build_command: 'swift run swift-build --build-tests'
enable_ios_checks: false
enable_macos_checks: true
macos_exclude_xcode_versions: "[{\"xcode_version\": \"16.3\"}, {\"xcode_version\": \"16.4\"}]"
macos_build_command: 'swift run --build-system ${{ matrix.executableTargetBuildSystem }} swift-build --build-tests --build-system ${{ matrix.buildSystem }}'
ios_build_command: 'swift run --build-system ${{ matrix.executableTargetBuildSystem }} swift-build --build-tests --build-system ${{ matrix.buildSystem }} --sdk \"$(xcrun --sdk iphoneos --show-sdk-path)\" --triple arm64-apple-ios'
# ios_build_command: 'swift run swift-build --build-tests --sdk \"$(xcrun --sdk iphoneos --show-sdk-path)\" --triple arm64-apple-ios'

soundness:
name: Soundness
Expand All @@ -88,8 +50,8 @@ jobs:
python_lint_check_enabled: true
yamllint_check_enabled: true

wasm-integration-tests:
name: Wasm Integration Tests
integration-tests:
name: Integration Tests
needs: [soundness]
uses: swiftlang/github-workflows/.github/workflows/swift_package_test.yml@0.0.11
with:
Expand All @@ -100,18 +62,9 @@ jobs:
wasm_sdk_versions: '["nightly-main"]'
wasm_sdk_pre_build_command: ./.github/scripts/prebuild.sh
# This is a hack - replace the build command with a test command and drop the --swift-sdk arg the workflow appends.
wasm_sdk_build_command: "swift test --filter WebAssemblyIntegrationTests #"

static-linux-integration-tests:
name: Static Linux Integration Tests
needs: [soundness]
uses: swiftlang/github-workflows/.github/workflows/swift_package_test.yml@0.0.11
with:
enable_linux_checks: false
enable_windows_checks: false
enable_macos_checks: false
wasm_sdk_build_command: "swift test --parallel --experimental-xunit-message-failure --xunit-output wasm-xunit.xml --filter WebAssemblyIntegrationTests #"
enable_linux_static_sdk_build: true
linux_static_sdk_versions: '["nightly-main"]'
linux_static_sdk_pre_build_command: ./.github/scripts/prebuild.sh
# This is a hack - replace the build command with a test command and drop the --swift-sdk arg the workflow appends.
linux_static_sdk_build_command: "swift test --filter StaticLinuxIntegrationTests #"
linux_static_sdk_build_command: "swift test --parallel --experimental-xunit-message-failure --xunit-output static-linux-xunit.xml --filter StaticLinuxIntegrationTests #"
2 changes: 2 additions & 0 deletions .github/workflows/pull_request_dependency_check.yaml
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
name: Pull Request

on:
pull_request_target:
types: [opened, edited, reopened, labeled, unlabeled, synchronize]
Expand Down
26 changes: 26 additions & 0 deletions Fixtures/TestTargetDependOnTestTarget/Package.swift
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
// swift-tools-version: 6.2
// The swift-tools-version declares the minimum version of Swift required to build this package.

import PackageDescription

let package = Package(
name: "TestTargetDependOnTestTarget",
targets: [
.testTarget(
name: "leafTestTarget",
),
.testTarget(
name: "myTestTarget",
dependencies: [
"leafTestTarget",
],
),
.testTarget(
name: "myOtherTestTarget",
dependencies: [
"leafTestTarget",
"myTestTarget",
],
),
]
)
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
import Testing

@Suite
struct LeafTestTargetTests {
@Test("LeafTestTarget tests")
func example() {
#expect(42 == 17 + 25)
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
import Testing

@Suite
struct MyOTherTestTargetTests {
@Test("MyOTherTestTarget tests")
func example() {
#expect(42 == 17 + 25)
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
import Testing

@Suite
struct MyTestTargetTests {
@Test("MyTestTarget tests")
func example() {
#expect(42 == 17 + 25)
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
// swift-tools-version: 6.0
import PackageDescription
let package = Package(
name: "GreeterUser",
targets: [
.executableTarget(
name: "GreeterUser",
linkerSettings: [
// `Greeter` is not declared as a target dependency; its module and static archive
// are resolved through the SDK's include/library search paths (populated via
// `swift sdk configure` in the enclosing test).
.linkedLibrary("Greeter"),
]
),
]
)
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
import Greeter

print(greet())
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
// swift-tools-version: 6.0
import PackageDescription
let package = Package(
name: "Greeter",
products: [
.library(name: "Greeter", type: .static, targets: ["Greeter"]),
],
targets: [
.target(name: "Greeter"),
]
)
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
public func greet() -> String {
return "Hello from Greeter!"
}
4 changes: 2 additions & 2 deletions Package.swift
Original file line number Diff line number Diff line change
Expand Up @@ -1100,7 +1100,7 @@ func swiftSyntaxDependencies(_ names: [String]) -> [Target.Dependency] {
// this right now.

/// When not using local dependencies, the branch to use for llbuild and TSC repositories.
let relatedDependenciesBranch = "main"
let relatedDependenciesBranch = "release/6.4.x"
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Issue (blocking): we need to revert this change


if ProcessInfo.processInfo.environment["SWIFTPM_LLBUILD_FWK"] == nil {
if ProcessInfo.processInfo.environment["SWIFTCI_USE_LOCAL_DEPS"] == nil {
Expand Down Expand Up @@ -1130,7 +1130,7 @@ if ProcessInfo.processInfo.environment["SWIFTCI_USE_LOCAL_DEPS"] == nil {
.package(url: "https://github.com/apple/swift-system.git", revision: "1.5.0"),
.package(url: "https://github.com/apple/swift-collections.git", revision: "1.1.6"),
.package(url: "https://github.com/apple/swift-certificates.git", revision: "1.10.1"),
.package(url: "https://github.com/swiftlang/swift-toolchain-sqlite.git", revision: "1.0.7"),
.package(url: "https://github.com/swiftlang/swift-toolchain-sqlite.git", revision: "1.0.9"),
// Not in toolchain, used for use in previewing documentation
.package(url: "https://github.com/swiftlang/swift-docc-plugin", from: "1.1.0"),
]
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -335,7 +335,7 @@ public final class ClangModuleBuildDescription {

// Only add the build path to the framework search path if there are binary frameworks to link against.
if !libraryBinaryPaths.isEmpty {
args += ["-F", buildParameters.buildPath.pathString]
args += ["-F", BuildOperation.buildProductsPath(for: buildParameters).pathString]
}

args += ["-I", clangTarget.includeDir.pathString]
Expand Down
11 changes: 8 additions & 3 deletions Sources/Build/BuildDescription/ProductBuildDescription.swift
Original file line number Diff line number Diff line change
Expand Up @@ -67,10 +67,15 @@ public final class ProductBuildDescription: SPMBuildCore.ProductBuildDescription
/// Paths to tools shipped in binary dependencies
var availableTools: [String: AbsolutePath] = [:]

/// Path to the build products directory.
public var productsPath: AbsolutePath {
BuildOperation.buildProductsPath(for: self.buildParameters)
}

/// Path to the temporary directory for this product.
var tempsPath: AbsolutePath {
let suffix = buildParameters.suffix
return self.buildParameters.buildPath.appending(component: "\(self.product.name)\(suffix).product")
return self.productsPath.appending(component: "\(self.product.name)\(suffix).product")
}

/// Path to the link filelist file.
Expand Down Expand Up @@ -161,10 +166,10 @@ public final class ProductBuildDescription: SPMBuildCore.ProductBuildDescription

// Only add the build path to the framework search path if there are binary frameworks to link against.
if !self.libraryBinaryPaths.isEmpty {
args += ["-F", self.buildParameters.buildPath.pathString]
args += ["-F", BuildOperation.buildProductsPath(for: self.buildParameters).pathString]
}

args += ["-L", self.buildParameters.buildPath.pathString]
args += ["-L", BuildOperation.buildProductsPath(for: self.buildParameters).pathString]
args += try ["-o", binaryPath.pathString]
args += ["-module-name", self.product.name.spm_mangledToC99ExtendedIdentifier()]
args += self.dylibs.map { "-l" + $0.product.name + $0.buildParameters.suffix }
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,6 @@ import SPMBuildCore
extension ResolvedModule {
func tempsPath(_ buildParameters: BuildParameters) -> AbsolutePath {
let suffix = buildParameters.suffix
return buildParameters.buildPath.appending(component: "\(self.c99name)\(suffix).build")
return BuildOperation.buildProductsPath(for: buildParameters).appending(component: "\(self.c99name)\(suffix).build")
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -138,7 +138,7 @@ public final class SwiftModuleBuildDescription {

var modulesPath: AbsolutePath {
let suffix = self.buildParameters.suffix
return self.buildParameters.buildPath.appending(component: "Modules\(suffix)")
return BuildOperation.buildProductsPath(for: self.buildParameters).appending(component: "Modules\(suffix)")
}

/// The path to the swiftmodule file after compilation.
Expand Down Expand Up @@ -459,13 +459,13 @@ public final class SwiftModuleBuildDescription {
try self.requiredMacros.forEach { macro in
args += [
"-Xfrontend", "-load-plugin-library",
"-Xfrontend", macroBuildParameters.macroBinaryPath(macro).pathString
"-Xfrontend", BuildOperation.macroBinaryPath(for: macro, parameters: macroBuildParameters).pathString
]
}
#else
let macroModules = try self.requiredMacros
try macroModules.forEach { macro in
let executablePath = try macroBuildParameters.macroBinaryPath(macro).pathString
let executablePath = try BuildOperation.macroBinaryPath(for: macro, parameters: macroBuildParameters).pathString
args += ["-Xfrontend", "-load-plugin-executable", "-Xfrontend", "\(executablePath)#\(macro.c99name)"]
}
#endif
Expand Down Expand Up @@ -563,7 +563,7 @@ public final class SwiftModuleBuildDescription {

// Only add the build path to the framework search path if there are binary frameworks to link against.
if !self.libraryBinaryPaths.isEmpty {
args += ["-F", self.buildParameters.buildPath.pathString]
args += ["-F", BuildOperation.buildProductsPath(for: self.buildParameters).pathString]
}

// Emit the ObjC compatibility header if enabled.
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -381,7 +381,7 @@ extension LLBuildManifestBuilder {

// Otherwise, come up with a path for the new file and generate a command to populate it.
let swiftCompilerPathHash = String(swiftCompilerPath.pathString.hash, radix: 16, uppercase: true)
let swiftVersionFilePath = buildParameters.buildPath.appending(component: "swift-version-\(swiftCompilerPathHash).txt")
let swiftVersionFilePath = BuildOperation.buildProductsPath(for: buildParameters).appending(component: "swift-version-\(swiftCompilerPathHash).txt")
self.manifest.addSwiftGetVersionCommand(swiftCompilerPath: swiftCompilerPath, swiftVersionFilePath: swiftVersionFilePath)
swiftGetVersionFiles[swiftCompilerPath] = swiftVersionFilePath
return swiftVersionFilePath
Expand Down
2 changes: 1 addition & 1 deletion Sources/Build/BuildManifest/LLBuildManifestBuilder.swift
Original file line number Diff line number Diff line change
Expand Up @@ -342,7 +342,7 @@ extension LLBuildManifestBuilder {

extension BuildParameters {
func destinationPath(forBinaryAt path: AbsolutePath) -> AbsolutePath {
self.buildPath.appending(component: path.basename)
BuildOperation.buildProductsPath(for: self).appending(component: path.basename)
}

var buildConfig: String { self.configuration.dirname }
Expand Down
Loading