-
-
Notifications
You must be signed in to change notification settings - Fork 5
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
1 parent
a1e9e84
commit 407bf5d
Showing
20 changed files
with
1,298 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,2 @@ | ||
.build/ | ||
.swiftpm/ |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,45 @@ | ||
# This workflow will build a Swift project | ||
# For more information see: https://docs.github.com/en/actions/automating-builds-and-tests/building-and-testing-swift | ||
|
||
name: Swift | ||
|
||
on: | ||
push: | ||
branches: [ "main" ] | ||
pull_request: | ||
branches: [ "main" ] | ||
|
||
jobs: | ||
build: | ||
|
||
runs-on: ubuntu-latest | ||
|
||
services: | ||
postgres: | ||
image: postgres:latest | ||
env: | ||
POSTGRES_DB: vapor_database | ||
POSTGRES_PASSWORD: vapor_password | ||
POSTGRES_USER: vapor_username | ||
ports: | ||
- 5433:5432 | ||
# Set health checks to wait until postgres has started | ||
options: >- | ||
--health-cmd pg_isready | ||
--health-interval 10s | ||
--health-timeout 5s | ||
--health-retries 5 | ||
steps: | ||
- uses: actions/checkout@v3 | ||
- name: Build | ||
run: swift build -v | ||
- name: Run tests | ||
env: | ||
TEST_FIREBASE_WEB_API_KEY: ${{ secrets.TEST_FIREBASE_WEB_API_KEY }} | ||
TEST_FIREBASE_USER_EMAIL: ${{ secrets.TEST_FIREBASE_USER_EMAIL }} | ||
TEST_FIREBASE_USER_PASSWORD: ${{ secrets.TEST_FIREBASE_USER_PASSWORD }} | ||
TEST_FIREBASE_USER_2_EMAIL: ${{ secrets.TEST_FIREBASE_USER_2_EMAIL }} | ||
TEST_FIREBASE_USER_2_PASSWORD: ${{ secrets.TEST_FIREBASE_USER_2_PASSWORD }} | ||
FIREBASE_PROJECT_ID: ${{ secrets.FIREBASE_PROJECT_ID }} | ||
run: swift test -v |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,10 @@ | ||
Packages | ||
.build | ||
xcuserdata | ||
*.xcodeproj | ||
DerivedData/ | ||
.DS_Store | ||
db.sqlite | ||
.swiftpm | ||
.env | ||
/.env.testing |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,84 @@ | ||
# ================================ | ||
# Build image | ||
# ================================ | ||
FROM swift:5.9-jammy as build | ||
|
||
# Install OS updates | ||
RUN export DEBIAN_FRONTEND=noninteractive DEBCONF_NONINTERACTIVE_SEEN=true \ | ||
&& apt-get -q update \ | ||
&& apt-get -q dist-upgrade -y\ | ||
&& rm -rf /var/lib/apt/lists/* | ||
|
||
# Set up a build area | ||
WORKDIR /build | ||
|
||
# First just resolve dependencies. | ||
# This creates a cached layer that can be reused | ||
# as long as your Package.swift/Package.resolved | ||
# files do not change. | ||
COPY ./Package.* ./ | ||
RUN swift package resolve --skip-update \ | ||
$([ -f ./Package.resolved ] && echo "--force-resolved-versions" || true) | ||
|
||
# Copy entire repo into container | ||
COPY . . | ||
|
||
# Build everything, with optimizations | ||
RUN swift build -c release --static-swift-stdlib \ | ||
# Workaround for https://github.com/apple/swift/pull/68669 | ||
# This can be removed as soon as 5.9.1 is released, but is harmless if left in. | ||
-Xlinker -u -Xlinker _swift_backtrace_isThunkFunction | ||
|
||
# Switch to the staging area | ||
WORKDIR /staging | ||
|
||
# Copy main executable to staging area | ||
RUN cp "$(swift build --package-path /build -c release --show-bin-path)/App" ./ | ||
|
||
# Copy resources bundled by SPM to staging area | ||
RUN find -L "$(swift build --package-path /build -c release --show-bin-path)/" -regex '.*\.resources$' -exec cp -Ra {} ./ \; | ||
|
||
# Copy any resources from the public directory and views directory if the directories exist | ||
# Ensure that by default, neither the directory nor any of its contents are writable. | ||
RUN [ -d /build/Public ] && { mv /build/Public ./Public && chmod -R a-w ./Public; } || true | ||
RUN [ -d /build/Resources ] && { mv /build/Resources ./Resources && chmod -R a-w ./Resources; } || true | ||
|
||
# ================================ | ||
# Run image | ||
# ================================ | ||
FROM swift:5.9-jammy-slim | ||
|
||
# Make sure all system packages are up to date, and install only essential packages. | ||
RUN export DEBIAN_FRONTEND=noninteractive DEBCONF_NONINTERACTIVE_SEEN=true \ | ||
&& apt-get -q update \ | ||
&& apt-get -q dist-upgrade -y \ | ||
&& apt-get -q install -y \ | ||
ca-certificates \ | ||
tzdata \ | ||
# If your app or its dependencies import FoundationNetworking, also install `libcurl4`. | ||
# libcurl4 \ | ||
# If your app or its dependencies import FoundationXML, also install `libxml2`. | ||
# libxml2 \ | ||
&& rm -r /var/lib/apt/lists/* | ||
|
||
# Create a vapor user and group with /app as its home directory | ||
RUN useradd --user-group --create-home --system --skel /dev/null --home-dir /app vapor | ||
|
||
# Switch to the new home directory | ||
WORKDIR /app | ||
|
||
# Copy built executable and any staged resources from builder | ||
COPY --from=build --chown=vapor:vapor /staging /app | ||
|
||
# Provide configuration needed by the built-in crash reporter and some sensible default behaviors. | ||
ENV SWIFT_ROOT=/usr SWIFT_BACKTRACE=enable=yes,sanitize=yes,threads=all,images=all,interactive=no | ||
|
||
# Ensure all further commands run as the vapor user | ||
USER vapor:vapor | ||
|
||
# Let Docker bind to port 8080 | ||
EXPOSE 8080 | ||
|
||
# Start the Vapor service when the image is run, default to listening on 8080 in production environment | ||
ENTRYPOINT ["./App"] | ||
CMD ["serve", "--env", "production", "--hostname", "0.0.0.0", "--port", "8080"] |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,50 @@ | ||
// swift-tools-version:5.9 | ||
import PackageDescription | ||
|
||
let package = Package( | ||
name: "SaasTemplate", | ||
platforms: [ | ||
.macOS(.v13) | ||
], | ||
dependencies: [ | ||
// 💧 A server-side Swift web framework. | ||
.package(url: "https://github.com/vapor/vapor.git", from: "4.83.1"), | ||
// 🗄 An ORM for SQL and NoSQL databases. | ||
.package(url: "https://github.com/vapor/fluent.git", from: "4.8.0"), | ||
// 🐘 Fluent driver for Postgres. | ||
.package(url: "https://github.com/vapor/fluent-postgres-driver.git", from: "2.7.2"), | ||
.package(url: "https://github.com/emvakar/vapor-firebase-jwt-middleware.git", branch: "master"), | ||
.package(url: "https://github.com/Quick/Nimble.git", from: "13.0.0"), | ||
.package(url: "https://github.com/petrpavlik/swift-sentry.git", branch: "main"), | ||
.package(url: "https://github.com/petrpavlik/MixpanelVapor.git", from: "0.0.0"), | ||
.package(url: "https://github.com/Joannis/VaporSMTPKit.git", from: "1.0.0"), | ||
], | ||
targets: [ | ||
.executableTarget( | ||
name: "App", | ||
dependencies: [ | ||
.product(name: "Fluent", package: "fluent"), | ||
.product(name: "FluentPostgresDriver", package: "fluent-postgres-driver"), | ||
.product(name: "Vapor", package: "vapor"), | ||
.product(name: "FirebaseJWTMiddleware", package: "vapor-firebase-jwt-middleware"), | ||
.product(name: "SwiftSentry", package: "swift-sentry"), | ||
"MixpanelVapor", | ||
.product(name: "VaporSMTPKit", package: "VaporSMTPKit"), | ||
] | ||
), | ||
.testTarget(name: "AppTests", dependencies: [ | ||
.target(name: "App"), | ||
.product(name: "XCTVapor", package: "vapor"), | ||
.product(name: "Nimble", package: "Nimble"), | ||
|
||
// Workaround for https://github.com/apple/swift-package-manager/issues/6940 | ||
.product(name: "Vapor", package: "vapor"), | ||
.product(name: "Fluent", package: "Fluent"), | ||
.product(name: "FluentPostgresDriver", package: "fluent-postgres-driver"), | ||
.product(name: "FirebaseJWTMiddleware", package: "vapor-firebase-jwt-middleware"), | ||
.product(name: "SwiftSentry", package: "swift-sentry"), | ||
"MixpanelVapor", | ||
.product(name: "VaporSMTPKit", package: "VaporSMTPKit"), | ||
]) | ||
] | ||
) |
Empty file.
Oops, something went wrong.