Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Update from Hummingbird Project Template #12

Merged
merged 3 commits into from
Nov 28, 2024
Merged
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
6 changes: 1 addition & 5 deletions .github/workflows/validate.yml
Original file line number Diff line number Diff line change
Expand Up @@ -8,16 +8,12 @@ concurrency:

jobs:
validate:
runs-on: macOS-latest
runs-on: ubuntu-latest
timeout-minutes: 15
steps:
- name: Checkout
uses: actions/checkout@v4
with:
fetch-depth: 1
- name: Install Dependencies
run: |
brew install mint
mint install NickLockwood/[email protected] --no-link
- name: run script
run: ./scripts/validate.sh
63 changes: 63 additions & 0 deletions .swift-format
Original file line number Diff line number Diff line change
@@ -0,0 +1,63 @@
{
"version" : 1,
"indentation" : {
"spaces" : 4
},
"tabWidth" : 4,
"fileScopedDeclarationPrivacy" : {
"accessLevel" : "private"
},
"spacesAroundRangeFormationOperators" : false,
"indentConditionalCompilationBlocks" : false,
"indentSwitchCaseLabels" : false,
"lineBreakAroundMultilineExpressionChainComponents" : false,
"lineBreakBeforeControlFlowKeywords" : false,
"lineBreakBeforeEachArgument" : true,
"lineBreakBeforeEachGenericRequirement" : true,
"lineLength" : 150,
"maximumBlankLines" : 1,
"respectsExistingLineBreaks" : true,
"prioritizeKeepingFunctionOutputTogether" : true,
"multiElementCollectionTrailingCommas" : true,
"rules" : {
"AllPublicDeclarationsHaveDocumentation" : false,
"AlwaysUseLiteralForEmptyCollectionInit" : false,
"AlwaysUseLowerCamelCase" : false,
"AmbiguousTrailingClosureOverload" : true,
"BeginDocumentationCommentWithOneLineSummary" : false,
"DoNotUseSemicolons" : true,
"DontRepeatTypeInStaticProperties" : true,
"FileScopedDeclarationPrivacy" : true,
"FullyIndirectEnum" : true,
"GroupNumericLiterals" : true,
"IdentifiersMustBeASCII" : true,
"NeverForceUnwrap" : false,
"NeverUseForceTry" : false,
"NeverUseImplicitlyUnwrappedOptionals" : false,
"NoAccessLevelOnExtensionDeclaration" : true,
"NoAssignmentInExpressions" : true,
"NoBlockComments" : true,
"NoCasesWithOnlyFallthrough" : true,
"NoEmptyTrailingClosureParentheses" : true,
"NoLabelsInCasePatterns" : true,
"NoLeadingUnderscores" : false,
"NoParensAroundConditions" : true,
"NoVoidReturnOnFunctionSignature" : true,
"OmitExplicitReturns" : true,
"OneCasePerLine" : true,
"OneVariableDeclarationPerLine" : true,
"OnlyOneTrailingClosureArgument" : true,
"OrderedImports" : true,
"ReplaceForEachWithForLoop" : true,
"ReturnVoidInsteadOfEmptyTuple" : true,
"UseEarlyExits" : false,
"UseExplicitNilCheckInConditions" : false,
"UseLetInEveryBoundCaseVariable" : false,
"UseShorthandTypeNames" : true,
"UseSingleLinePropertyGetter" : false,
"UseSynthesizedInitializer" : false,
"UseTripleSlashForDocumentationComments" : true,
"UseWhereClausesInForLoops" : false,
"ValidateDocumentationComments" : false
}
}
26 changes: 0 additions & 26 deletions .swiftformat

This file was deleted.

2 changes: 1 addition & 1 deletion CONTRIBUTING.md
Original file line number Diff line number Diff line change
Expand Up @@ -28,4 +28,4 @@ The main development branch of the repository is `main`.

### Formatting

We use Nick Lockwood's SwiftFormat for formatting code. PRs will not be accepted if they haven't be formatted. The current version of SwiftFormat we are using is v0.53.10.
We use Apple's swift-format for formatting code. PRs will not be accepted if they haven't be formatted.
24 changes: 15 additions & 9 deletions Package.swift
Original file line number Diff line number Diff line change
Expand Up @@ -7,20 +7,26 @@ let package = Package(
name: "swift-jobs-redis",
platforms: [.macOS(.v14), .iOS(.v17), .tvOS(.v17)],
products: [
.library(name: "JobsRedis", targets: ["JobsRedis"]),
.library(name: "JobsRedis", targets: ["JobsRedis"])
],
dependencies: [
.package(url: "https://github.com/hummingbird-project/swift-jobs.git", from: "1.0.0-beta.4"),
.package(url: "https://github.com/swift-server/RediStack.git", from: "1.4.0"),
],
targets: [
.target(name: "JobsRedis", dependencies: [
.product(name: "Jobs", package: "swift-jobs"),
.product(name: "RediStack", package: "RediStack"),
]),
.testTarget(name: "JobsRedisTests", dependencies: [
.byName(name: "JobsRedis"),
.product(name: "Jobs", package: "swift-jobs"),
]),
.target(
name: "JobsRedis",
dependencies: [
.product(name: "Jobs", package: "swift-jobs"),
.product(name: "RediStack", package: "RediStack"),
]
),
.testTarget(
name: "JobsRedisTests",
dependencies: [
.byName(name: "JobsRedis"),
.product(name: "Jobs", package: "swift-jobs"),
]
),
]
)
28 changes: 15 additions & 13 deletions Sources/JobsRedis/RedisJobQueue.swift
Original file line number Diff line number Diff line change
Expand Up @@ -13,13 +13,14 @@
//===----------------------------------------------------------------------===//

import Atomics
import Jobs
import NIOCore
import RediStack

import struct Foundation.Data
import struct Foundation.Date
import class Foundation.JSONDecoder
import struct Foundation.UUID
import Jobs
import NIOCore
import RediStack

/// Redis implementation of job queue driver
public final class RedisJobQueue: JobQueueDriver {
Expand All @@ -37,11 +38,12 @@ public final class RedisJobQueue: JobQueueDriver {
public init(_ value: String) {
let parts = value.components(separatedBy: ":")
self.id = parts[0]
self.delayUntil = if parts.count > 1 {
Self.toMillisecondsFromString(value: parts[1])
} else {
0
}
self.delayUntil =
if parts.count > 1 {
Self.toMillisecondsFromString(value: parts[1])
} else {
0
}
}

static func toMilliseconds(value: Double?) -> Int64 {
Expand All @@ -52,7 +54,7 @@ public final class RedisJobQueue: JobQueueDriver {
}

static func toMillisecondsFromString(value: String) -> Int64 {
return Int64(value) ?? 0
Int64(value) ?? 0
}

func isDelayed() -> Bool {
Expand Down Expand Up @@ -153,7 +155,7 @@ public final class RedisJobQueue: JobQueueDriver {
/// - Parameter key: Metadata key
/// - Returns: Associated ByteBuffer
public func getMetadata(_ key: String) async throws -> ByteBuffer? {
return try await self.redisConnectionPool.wrappedValue.get(.init(key)).get().byteBuffer
try await self.redisConnectionPool.wrappedValue.get(.init(key)).get().byteBuffer
}

/// Set job queue metadata
Expand Down Expand Up @@ -231,7 +233,7 @@ public final class RedisJobQueue: JobQueueDriver {
}

func get(jobId: JobID) async throws -> ByteBuffer? {
return try await self.redisConnectionPool.wrappedValue.get(jobId.redisKey).get().byteBuffer
try await self.redisConnectionPool.wrappedValue.get(jobId.redisKey).get().byteBuffer
}

func set(jobId: JobID, buffer: ByteBuffer) async throws {
Expand Down Expand Up @@ -264,7 +266,7 @@ extension RedisJobQueue {
}

public func makeAsyncIterator() -> AsyncIterator {
return .init(queue: self)
.init(queue: self)
}
}

Expand Down Expand Up @@ -292,6 +294,6 @@ extension ByteBuffer {
}

public func convertedToRESPValue() -> RESPValue {
return .bulkString(self)
.bulkString(self)
}
}
9 changes: 6 additions & 3 deletions Tests/JobsRedisTests/RedisJobsTests.swift
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,6 @@
import Atomics
import Foundation
import Jobs
@testable import JobsRedis
import Logging
import NIOConcurrencyHelpers
import NIOCore
Expand All @@ -24,6 +23,8 @@ import RediStack
import ServiceLifecycle
import XCTest

@testable import JobsRedis

extension XCTestExpectation {
convenience init(description: String, expectedFulfillmentCount: Int) {
self.init(description: description)
Expand Down Expand Up @@ -209,7 +210,8 @@ final class RedisJobsTests: XCTestCase {
let pendingJobs = try await jobQueue.queue.redisConnectionPool.wrappedValue.llen(of: jobQueue.queue.configuration.queueKey).get()
XCTAssertEqual(pendingJobs, 0)

let processingJobs = try await jobQueue.queue.redisConnectionPool.wrappedValue.llen(of: jobQueue.queue.configuration.processingQueueKey).get()
let processingJobs = try await jobQueue.queue.redisConnectionPool.wrappedValue.llen(of: jobQueue.queue.configuration.processingQueueKey)
.get()
XCTAssertEqual(processingJobs, 0)
}
XCTAssertEqual(currentJobTryCount.withLockedValue { $0 }, 2)
Expand Down Expand Up @@ -296,7 +298,8 @@ final class RedisJobsTests: XCTestCase {
let pendingJobs = try await jobQueue.queue.redisConnectionPool.wrappedValue.llen(of: jobQueue.queue.configuration.queueKey).get()
XCTAssertEqual(pendingJobs, 0)
let failedJobs = try await jobQueue.queue.redisConnectionPool.wrappedValue.llen(of: jobQueue.queue.configuration.failedQueueKey).get()
let processingJobs = try await jobQueue.queue.redisConnectionPool.wrappedValue.llen(of: jobQueue.queue.configuration.processingQueueKey).get()
let processingJobs = try await jobQueue.queue.redisConnectionPool.wrappedValue.llen(of: jobQueue.queue.configuration.processingQueueKey)
.get()
XCTAssertEqual(failedJobs + processingJobs, 1)
}
}
Expand Down
25 changes: 10 additions & 15 deletions scripts/validate.sh
Original file line number Diff line number Diff line change
Expand Up @@ -31,22 +31,16 @@ SWIFT_FORMAT_VERSION=0.53.10
set -eu
here="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"

which swiftformat > /dev/null 2>&1 || (echo "swiftformat not installed. You can install it using 'brew install swiftformat'" ; exit -1)

function replace_acceptable_years() {
# this needs to replace all acceptable forms with 'YEARS'
sed -e 's/20[12][0-9]-20[12][0-9]/YEARS/' -e 's/20[12][0-9]/YEARS/' -e '/^#!/ d'
}

printf "=> Checking format... "
FIRST_OUT="$(git status --porcelain)"
if [[ -n "${CI-""}" ]]; then
printf "(using v$(mint run NickLockwood/SwiftFormat@"$SWIFT_FORMAT_VERSION" --version)) "
mint run NickLockwood/SwiftFormat@"$SWIFT_FORMAT_VERSION" . > /dev/null 2>&1
else
printf "(using v$(swiftformat --version)) "
swiftformat . > /dev/null 2>&1
fi
git ls-files -z '*.swift' | xargs -0 swift format format --parallel --in-place
git diff --exit-code '*.swift'

SECOND_OUT="$(git status --porcelain)"
if [[ "$FIRST_OUT" != "$SECOND_OUT" ]]; then
printf "\033[0;31mformatting issues!\033[0m\n"
Expand All @@ -55,29 +49,30 @@ if [[ "$FIRST_OUT" != "$SECOND_OUT" ]]; then
else
printf "\033[0;32mokay.\033[0m\n"
fi
exit
printf "=> Checking license headers... "
tmp=$(mktemp /tmp/.soto-core-sanity_XXXXXX)

exit 0

for language in swift-or-c; do
declare -a matching_files
declare -a exceptions
expections=( )
matching_files=( -name '*' )
case "$language" in
swift-or-c)
exceptions=( -path '*Sources/INIParser/*' -o -path '*Sources/CSotoExpat/*' -o -path '*Benchmark/.build/*' -o -name Package.swift)
exceptions=( -path '*/Benchmarks/.build/*' -o -name Package.swift)
matching_files=( -name '*.swift' -o -name '*.c' -o -name '*.h' )
cat > "$tmp" <<"EOF"
//===----------------------------------------------------------------------===//
//
// This source file is part of the Hummingbird open source project
// This source file is part of the Hummingbird server framework project
//
// Copyright (c) YEARS the Hummingbird authors
// Licensed under Apache License v2.0
//
// See LICENSE.txt for license information
// See CONTRIBUTORS.txt for the list of Hummingbird authors
// See hummingbird/CONTRIBUTORS.txt for the list of Hummingbird authors
//
// SPDX-License-Identifier: Apache-2.0
//
Expand All @@ -89,13 +84,13 @@ EOF
cat > "$tmp" <<"EOF"
##===----------------------------------------------------------------------===##
##
## This source file is part of the Hummingbird open source project
## This source file is part of the Hummingbird server framework project
##
## Copyright (c) YEARS the Hummingbird authors
## Licensed under Apache License v2.0
##
## See LICENSE.txt for license information
## See CONTRIBUTORS.txt for the list of Hummingbird authors
## See hummingbird/CONTRIBUTORS.txt for the list of Hummingbird authors
##
## SPDX-License-Identifier: Apache-2.0
##
Expand Down