Skip to content

Commit 9cd0d2b

Browse files
authored
Remove the dependency on Foundation (Dependencies still require it) (#417)
* Update aws-lambda and use the new plugin -- disable code strip for now * `NIOFoundationCompat` -> `NIOFoundationEssentialsCompat` * Make Penny itself Foundation-free * Remove some CI installations * Better verifier * Refinements
1 parent bd25622 commit 9cd0d2b

34 files changed

Lines changed: 1330 additions & 609 deletions

.github/workflows/deploy-all-lambdas.yml

Lines changed: 6 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -19,10 +19,12 @@ jobs:
1919
AWS_DEFAULT_REGION: eu-west-1
2020

2121
steps:
22-
- name: Install AWSCLI v2, jq, zstd, zip, binutils
22+
- name: Install AWSCLI v2, jq, zstd, zip, and stub docker for the lambda-build plugin
2323
run: |
2424
dnf update -y
25-
dnf install jq awscli zstd zip unzip binutils -y
25+
dnf install jq awscli zstd zip -y
26+
printf '#!/bin/sh\nexit 127\n' > /usr/local/bin/docker
27+
chmod +x /usr/local/bin/docker
2628
2729
- name: Check out repository
2830
uses: actions/checkout@v7
@@ -56,29 +58,11 @@ jobs:
5658
for name in ${{ steps.find_package_names.outputs.names }}; do
5759
swift package \
5860
--allow-network-connections docker \
59-
archive \
61+
lambda-build \
6062
--verbose \
61-
--base-docker-image swift:6.3-amazonlinux2023 \
6263
--output-path ./zips \
64+
--no-strip \
6365
--products "${name}"
64-
65-
# The archive plugin does not strip, and Lambda hard-caps deployment
66-
# packages at 250 MB unzipped. Drop DWARF but keep the symbol table.
67-
zip_path="$(pwd)/zips/${name}/${name}.zip"
68-
unpacked="$(mktemp -d)"
69-
unzip -q "${zip_path}" -d "${unpacked}"
70-
strip --strip-debug "${unpacked}/bootstrap"
71-
72-
unzipped_bytes="$(du -sb "${unpacked}" | cut -f1)"
73-
echo "${name}: $((unzipped_bytes / 1048576)) MiB unzipped after stripping"
74-
if [ "${unzipped_bytes}" -ge 262144000 ]; then
75-
echo "::error::${name} is ${unzipped_bytes} bytes unzipped, over Lambda's 262144000 limit"
76-
exit 1
77-
fi
78-
79-
rm "${zip_path}"
80-
(cd "${unpacked}" && zip -qry "${zip_path}" .)
81-
rm -rf "${unpacked}"
8266
done
8367
8468
- name: Configure AWS credentials

Lambdas/AutoFaqs/S3AutoFaqsRepository.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import Models
2-
import NIOFoundationCompat
2+
import NIOFoundationEssentialsCompat
33
import SotoS3
44

55
package import class SotoCore.AWSClient

Lambdas/AutoPings/S3AutoPingsRepository.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
package import Models
2-
import NIOFoundationCompat
2+
import NIOFoundationEssentialsCompat
33
import SotoS3
44

55
package import class SotoCore.AWSClient

Lambdas/Faqs/S3FaqsRepository.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import Models
2-
import NIOFoundationCompat
2+
import NIOFoundationEssentialsCompat
33
import SotoS3
44

55
package import class SotoCore.AWSClient

Lambdas/GHHooks/EventHandler/Handlers/ReleaseMaker.swift

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,10 @@
11
import AsyncHTTPClient
22
import DiscordBM
3-
/// Import full foundation even on linux for `trimmingCharacters`, for now.
4-
import Foundation
53
import GitHubAPI
64
import Logging
75
import Markdown
86
import NIOCore
9-
import NIOFoundationCompat
7+
import NIOFoundationEssentialsCompat
108
import Shared
119
import SwiftSemver
1210

@@ -251,7 +249,7 @@ struct ReleaseMaker {
251249
)
252250
).ok.body.json
253251
if (current.body ?? "")
254-
.trimmingCharacters(in: .whitespacesAndNewlines)
252+
.trimmingWhitespacesAndNewlines()
255253
.hasPrefix(Configuration.releaseNoticePrefix)
256254
{
257255
logger.debug(
@@ -452,15 +450,15 @@ struct ReleaseMaker {
452450

453451
extension String {
454452
func trimmingReleaseNoticeFromBody() -> String {
455-
let trimmedBody = self.trimmingCharacters(in: .whitespacesAndNewlines)
453+
let trimmedBody = self.trimmingWhitespacesAndNewlines()
456454
if trimmedBody.hasPrefix(ReleaseMaker.Configuration.releaseNoticePrefix) {
457455
return trimmedBody.split(
458456
separator: "\n",
459457
omittingEmptySubsequences: false
460458
)
461459
.dropFirst()
462460
.joined(separator: "\n")
463-
.trimmingCharacters(in: .whitespacesAndNewlines)
461+
.trimmingWhitespacesAndNewlines()
464462
} else {
465463
return trimmedBody
466464
}

Lambdas/GHHooks/Extensions/+PR.swift

Lines changed: 2 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
1-
/// Import full foundation even on linux for `folding(options:locale:)`, for now.
2-
import Foundation
31
import GitHubAPI
2+
import Shared
43

54
extension PullRequest {
65

@@ -73,14 +72,7 @@ extension String {
7372
fileprivate var hasDoNotMergePrefix: Bool {
7473
let folded = self.lowercased()
7574
.filter { !$0.isPunctuation }
76-
.folding(
77-
options: .caseInsensitive,
78-
locale: nil
79-
)
80-
.folding(
81-
options: .diacriticInsensitive,
82-
locale: nil
83-
)
75+
.foldingDiacritics()
8476
return folded.hasPrefix("dnm") || folded.hasPrefix("do not merge")
8577
}
8678
}

Lambdas/GHHooks/Extensions/String+Document.swift

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,3 @@
1-
/// Import full foundation even on linux for `trimmingCharacters`, for now.
2-
import Foundation
31
import Markdown
42
import Shared
53

@@ -119,9 +117,8 @@ extension String {
119117
}
120118

121119
private func trimmingForMarkdown() -> String {
122-
self.trimmingCharacters(
123-
in: .whitespacesAndNewlines
124-
).trimmingWorthlessLines()
120+
self.trimmingWhitespacesAndNewlines()
121+
.trimmingWorthlessLines()
125122
}
126123

127124
private func trimmingWorthlessLines() -> String {

Lambdas/GHOAuth/OAuthLambda.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ import JWTKit
77
import LambdasShared
88
import Logging
99
import Models
10-
import NIOFoundationCompat
10+
import NIOFoundationEssentialsCompat
1111
import Shared
1212
import SotoCore
1313

0 commit comments

Comments
 (0)