Skip to content

Commit

Permalink
Generate package structure
Browse files Browse the repository at this point in the history
  • Loading branch information
ns-vasilev committed Oct 11, 2023
1 parent 34a94af commit ffbd9ae
Show file tree
Hide file tree
Showing 12 changed files with 440 additions and 1 deletion.
75 changes: 75 additions & 0 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,75 @@
#
name: "{{ cookiecutter.name | lower }}"

on:
push:
branches:
- main
- dev
pull_request:
paths:
- '.swiftlint.yml'
branches:
- main
- dev

concurrency:
group: ci
cancel-in-progress: true

jobs:
SwiftLint:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- name: GitHub Action for SwiftLint
uses: norio-nomura/[email protected]
with:
args: --strict
env:
DIFF_BASE: ${{ github.base_ref }}
Latest:
name: Test Latest (iOS, macOS, tvOS, watchOS)
runs-on: macOS-12
env:
DEVELOPER_DIR: "/Applications/Xcode_14.1.app/Contents/Developer"
timeout-minutes: 10
strategy:
fail-fast: false
matrix:
include:
{% if cookiecutter.ios == "Yes" %}
- destination: "OS=16.1,name=iPhone 14 Pro"
name: "iOS"
scheme: "{{ cookiecutter.name }}"
sdk: iphonesimulator
{% endif %}
{% if cookiecutter.tvOS == "Yes" %}
- destination: "OS=16.1,name=Apple TV"
name: "tvOS"
scheme: "{{ cookiecutter.name }}"
sdk: appletvsimulator
{% endif %}
{% if cookiecutter.watchOS == "Yes" %}
- destination: "OS=9.1,name=Apple Watch Series 8 (45mm)"
name: "watchOS"
scheme: "{{ cookiecutter.name }}"
sdk: watchsimulator
{% endif %}
{% if cookiecutter.macOS == "Yes" %}
- destination: "platform=macOS"
name: "macOS"
scheme: "{{ cookiecutter.name }}"
sdk: macosx
{% endif %}
steps:
- uses: actions/checkout@v3
- name: ${{ matrix.name }}
run: xcodebuild test -scheme "${{ matrix.scheme }}" -destination "${{ matrix.destination }}" clean -enableCodeCoverage YES -resultBundlePath "./${{ matrix.sdk }}.xcresult" | xcpretty -r junit
- name: Upload coverage reports to Codecov
uses: codecov/[email protected]
with:
token: ${{ secrets.CODECOV_TOKEN }}
xcode: true
xcode_archive_path: "./${{ matrix.sdk }}.xcresult"
#
64 changes: 64 additions & 0 deletions .swiftformat
Original file line number Diff line number Diff line change
@@ -0,0 +1,64 @@
# Stream rules

--swiftversion 5.3

# Use 'swiftformat --options' to list all of the possible options

--header "\nfloating-text-field\nCopyright © {created.year} Space Code. All rights reserved.\n//"

--enable blankLinesBetweenScopes
--enable blankLinesAtStartOfScope
--enable blankLinesAtEndOfScope
--enable blankLinesAroundMark
--enable anyObjectProtocol
--enable consecutiveBlankLines
--enable consecutiveSpaces
--enable duplicateImports
--enable elseOnSameLine
--enable emptyBraces
--enable initCoderUnavailable
--enable leadingDelimiters
--enable numberFormatting
--enable preferKeyPath
--enable redundantBreak
--enable redundantExtensionACL
--enable redundantFileprivate
--enable redundantGet
--enable redundantInit
--enable redundantLet
--enable redundantLetError
--enable redundantNilInit
--enable redundantObjc
--enable redundantParens
--enable redundantPattern
--enable redundantRawValues
--enable redundantReturn
--enable redundantSelf
--enable redundantVoidReturnType
--enable semicolons
--enable sortedImports
--enable sortedSwitchCases
--enable spaceAroundBraces
--enable spaceAroundBrackets
--enable spaceAroundComments
--enable spaceAroundGenerics
--enable spaceAroundOperators
--enable spaceInsideBraces
--enable spaceInsideBrackets
--enable spaceInsideComments
--enable spaceInsideGenerics
--enable spaceInsideParens
--enable strongOutlets
--enable strongifiedSelf
--enable todos
--enable trailingClosures
--enable unusedArguments
--enable void
--enable markTypes
--enable isEmpty

# format options

--wraparguments before-first
--wrapcollections before-first
--maxwidth 140
135 changes: 135 additions & 0 deletions .swiftlint.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,135 @@
excluded:
- Tests
- Package.swift
- .build

# Rules

disabled_rules:
- trailing_comma
- todo
- opening_brace

opt_in_rules: # some rules are only opt-in
- anyobject_protocol
- array_init
- attributes
- closure_body_length
- closure_end_indentation
- closure_spacing
- collection_alignment
- conditional_returns_on_newline
- contains_over_filter_count
- contains_over_filter_is_empty
- contains_over_first_not_nil
- contains_over_range_nil_comparison
- convenience_type
- discouraged_object_literal
- discouraged_optional_boolean
- empty_collection_literal
- empty_count
- empty_string
- empty_xctest_method
- enum_case_associated_values_count
- explicit_init
- fallthrough
- fatal_error_message
- file_name
- file_types_order
- first_where
- flatmap_over_map_reduce
- force_unwrapping
- ibinspectable_in_extension
- identical_operands
- implicit_return
- inert_defer
- joined_default_parameter
- last_where
- legacy_multiple
- legacy_random
- literal_expression_end_indentation
- lower_acl_than_parent
- multiline_arguments
- multiline_function_chains
- multiline_literal_brackets
- multiline_parameters
- multiline_parameters_brackets
- no_space_in_method_call
- operator_usage_whitespace
- optional_enum_case_matching
- orphaned_doc_comment
- overridden_super_call
- override_in_extension
- pattern_matching_keywords
- prefer_self_type_over_type_of_self
- prefer_zero_over_explicit_init
- prefixed_toplevel_constant
- private_action
- prohibited_super_call
- quick_discouraged_call
- quick_discouraged_focused_test
- quick_discouraged_pending_test
- reduce_into
- redundant_nil_coalescing
- redundant_objc_attribute
- redundant_type_annotation
- required_enum_case
- single_test_class
- sorted_first_last
- sorted_imports
- static_operator
- strict_fileprivate
- switch_case_on_newline
- toggle_bool
- unavailable_function
- unneeded_parentheses_in_closure_argument
- unowned_variable_capture
- untyped_error_in_catch
- vertical_parameter_alignment_on_call
- vertical_whitespace_closing_braces
- vertical_whitespace_opening_braces
- xct_specific_matcher
- yoda_condition

force_cast: warning
force_try: warning

identifier_name:
excluded:
- id
- URL

analyzer_rules:
- unused_import
- unused_declaration

line_length:
warning: 130
error: 200

type_body_length:
warning: 300
error: 400

file_length:
warning: 500
error: 1200

function_body_length:
warning: 30
error: 50

large_tuple:
error: 3

nesting:
type_level:
warning: 2
statement_level:
warning: 10


type_name:
max_length:
warning: 40
error: 50
7 changes: 7 additions & 0 deletions .swiftpm/xcode/package.xcworkspace/contents.xcworkspacedata

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 2 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
# Change Log
All notable changes to this project will be documented in this file.
19 changes: 19 additions & 0 deletions Makefile
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
all: bootstrap

bootstrap: hook
mint bootstrap

hook:
ln -sf ../../hooks/pre-commit .git/hooks/pre-commit
chmod +x .git/hooks/pre-commit

mint:
mint bootstrap

lint:
mint run swiftlint

fmt:
mint run swiftformat Sources Tests

.PHONY: all bootstrap hook mint lint fmt
2 changes: 2 additions & 0 deletions Mintfile
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
nicklockwood/[email protected]
realm/[email protected]
28 changes: 28 additions & 0 deletions Package.swift
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
// swift-tools-version: 5.7
// The swift-tools-version declares the minimum version of Swift required to build this package.

import PackageDescription

let package = Package(
name: "FloatingTextField",
products: [
// Products define the executables and libraries a package produces, and make them visible to other packages.
.library(
name: "FloatingTextField",
targets: ["FloatingTextField"]),
],
dependencies: [
// Dependencies declare other packages that this package depends on.
// .package(url: /* package url */, from: "1.0.0"),
],
targets: [
// Targets are the basic building blocks of a package. A target can define a module or a test suite.
// Targets can depend on other targets in this package, and on products in packages this package depends on.
.target(
name: "FloatingTextField",
dependencies: []),
.testTarget(
name: "FloatingTextFieldTests",
dependencies: ["FloatingTextField"]),
]
)
Loading

0 comments on commit ffbd9ae

Please sign in to comment.