Skip to content

Commit 0f91017

Browse files
authored
Add static Linux binaries to release archives (#6218)
1 parent 367fd13 commit 0f91017

File tree

3 files changed

+55
-5
lines changed

3 files changed

+55
-5
lines changed

.github/workflows/release.yml

Lines changed: 39 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -119,6 +119,41 @@ jobs:
119119
name: ${{ matrix.artifact_name }}
120120
path: .build/release/swiftlint
121121

122+
build-static-linux:
123+
name: Build Static Linux ${{ matrix.arch }} Binary
124+
runs-on: ${{ matrix.runner }}
125+
strategy:
126+
fail-fast: false
127+
matrix:
128+
include:
129+
- arch: ARM64
130+
runner: ubuntu-24.04-arm
131+
swift_sdk: aarch64-swift-linux-musl
132+
artifact_name: swiftlint-static-arm64
133+
- arch: AMD64
134+
runner: ubuntu-24.04
135+
swift_sdk: x86_64-swift-linux-musl
136+
artifact_name: swiftlint-static-amd64
137+
permissions:
138+
contents: read
139+
env:
140+
BINARY_PATH: .build/${{ matrix.swift_sdk }}/release/swiftlint
141+
steps:
142+
- uses: actions/checkout@08eba0b27e820071cde6df949e0beb9ba4906955 # v4.3.0
143+
with:
144+
persist-credentials: false
145+
- name: Install SDK
146+
run: swift sdk install https://download.swift.org/swift-6.1.2-release/static-sdk/swift-6.1.2-RELEASE/swift-6.1.2-RELEASE_static-linux-0.0.1.artifactbundle.tar.gz --checksum df0b40b9b582598e7e3d70c82ab503fd6fbfdff71fd17e7f1ab37115a0665b3b
147+
- name: Build static binary
148+
run: swift build -c release --product swiftlint --swift-sdk ${{ matrix.swift_sdk }} -Xswiftc -DSWIFTLINT_DISABLE_SOURCEKIT
149+
- name: Strip binary
150+
run: strip -s "$BINARY_PATH"
151+
- name: Upload artifact
152+
uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2
153+
with:
154+
name: ${{ matrix.artifact_name }}
155+
path: ${{ env.BINARY_PATH }}
156+
122157
build-macos:
123158
name: Build macOS Binaries
124159
needs: prepare-release
@@ -149,6 +184,7 @@ jobs:
149184
- setup-credentials
150185
- prepare-release
151186
- build-linux
187+
- build-static-linux
152188
- build-macos
153189
runs-on: macOS-14
154190
permissions:
@@ -173,8 +209,10 @@ jobs:
173209
mv -f swiftlint-macos/bazel.* .
174210
mv -f swiftlint-linux-amd64/swiftlint ${{ env.LINUX_BUILD_DIR }}/swiftlint_linux_amd64
175211
mv -f swiftlint-linux-arm64/swiftlint ${{ env.LINUX_BUILD_DIR }}/swiftlint_linux_arm64
212+
mv -f swiftlint-static-amd64/swiftlint ${{ env.LINUX_BUILD_DIR }}/swiftlint_static_amd64
213+
mv -f swiftlint-static-arm64/swiftlint ${{ env.LINUX_BUILD_DIR }}/swiftlint_static_arm64
176214
- name: Make binaries executable
177-
run: chmod +x ${{ env.MACOS_BUILD_DIR }}/swiftlint ${{ env.LINUX_BUILD_DIR }}/swiftlint_linux_*
215+
run: chmod +x ${{ env.MACOS_BUILD_DIR }}/swiftlint ${{ env.LINUX_BUILD_DIR }}/swiftlint_linux_* ${{ env.LINUX_BUILD_DIR }}/swiftlint_static_*
178216
- name: Create artifacts
179217
run: |
180218
make --debug spm_artifactbundle

CHANGELOG.md

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,15 @@
1010

1111
### Experimental
1212

13-
* None.
13+
* Both Linux release archives (for AMD64 and ARM64) now contain two binaries:
14+
* A dynamically linked binary that requires `libsourcekitdInProc.so` together with its
15+
transitive dependencies to be present on the system at runtime. It is named `swiftlint`
16+
and the same binary as before. It supports all built-in rules.
17+
* A fully statically linked binary named `swiftlint-static` that does not require
18+
any dynamic libraries at runtime. Rules requiring SourceKit will be disabled and
19+
reported to the console when running this binary.
20+
<!-- Keep empty line to have the contributors on a separate line. -->
21+
[SimplyDanny](https://github.com/SimplyDanny)
1422

1523
### Enhancements
1624

Makefile

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,8 @@ SWIFTLINT_EXECUTABLE=$(SWIFTLINT_EXECUTABLE_PARENT)/swiftlint
1313
SWIFTLINT_EXECUTABLE_LINUX_PARENT=.build/linux
1414
SWIFTLINT_EXECUTABLE_LINUX_AMD64=$(SWIFTLINT_EXECUTABLE_LINUX_PARENT)/swiftlint_linux_amd64
1515
SWIFTLINT_EXECUTABLE_LINUX_ARM64=$(SWIFTLINT_EXECUTABLE_LINUX_PARENT)/swiftlint_linux_arm64
16+
SWIFTLINT_EXECUTABLE_STATIC_AMD64=$(SWIFTLINT_EXECUTABLE_LINUX_PARENT)/swiftlint_static_amd64
17+
SWIFTLINT_EXECUTABLE_STATIC_ARM64=$(SWIFTLINT_EXECUTABLE_LINUX_PARENT)/swiftlint_static_arm64
1618

1719
ARTIFACT_BUNDLE_PATH=$(TEMPORARY_FOLDER)/SwiftLintBinary.artifactbundle
1820

@@ -136,13 +138,15 @@ spm_artifactbundle: $(SWIFTLINT_EXECUTABLE) $(SWIFTLINT_EXECUTABLE_LINUX_AMD64)
136138
cp -f "$(LICENSE_PATH)" "$(ARTIFACT_BUNDLE_PATH)"
137139
(cd "$(TEMPORARY_FOLDER)"; zip -yr - "SwiftLintBinary.artifactbundle") > "./SwiftLintBinary.artifactbundle.zip"
138140

139-
zip_linux_release: $(SWIFTLINT_EXECUTABLE_LINUX_AMD64) $(SWIFTLINT_EXECUTABLE_LINUX_ARM64)
141+
zip_linux_release: $(SWIFTLINT_EXECUTABLE_LINUX_AMD64) $(SWIFTLINT_EXECUTABLE_LINUX_ARM64) $(SWIFTLINT_EXECUTABLE_STATIC_AMD64) $(SWIFTLINT_EXECUTABLE_STATIC_ARM64)
140142
$(eval TMP_FOLDER := $(shell mktemp -d))
141143
cp -f "$(SWIFTLINT_EXECUTABLE_LINUX_AMD64)" "$(TMP_FOLDER)/swiftlint"
144+
cp -f "$(SWIFTLINT_EXECUTABLE_STATIC_AMD64)" "$(TMP_FOLDER)/swiftlint-static"
142145
cp -f "$(LICENSE_PATH)" "$(TMP_FOLDER)"
143-
(cd "$(TMP_FOLDER)"; zip -yr - "swiftlint" "LICENSE") > "./swiftlint_linux_amd64.zip"
146+
(cd "$(TMP_FOLDER)"; zip -yr - "swiftlint" "swiftlint-static" "LICENSE") > "./swiftlint_linux_amd64.zip"
144147
cp -f "$(SWIFTLINT_EXECUTABLE_LINUX_ARM64)" "$(TMP_FOLDER)/swiftlint"
145-
(cd "$(TMP_FOLDER)"; zip -yr - "swiftlint" "LICENSE") > "./swiftlint_linux_arm64.zip"
148+
cp -f "$(SWIFTLINT_EXECUTABLE_LINUX_AMD64)" "$(TMP_FOLDER)/swiftlint-static"
149+
(cd "$(TMP_FOLDER)"; zip -yr - "swiftlint" "swiftlint-static" "LICENSE") > "./swiftlint_linux_arm64.zip"
146150

147151
package: $(SWIFTLINT_EXECUTABLE)
148152
$(eval PACKAGE_ROOT := $(shell mktemp -d))

0 commit comments

Comments
 (0)