Library setup (#1)

This PR contains the work done to setup the library:
* Defined products, dependencies, and targets for the `Package` file;
* Restructured the folder structure of the library and test targets to start development work;
* Created the `DocC` documentation catalog in the library target;
* Added the `CONTRIBUTORS` and `LICENSE` files;
* Added `README` file.

Reviewed-on: #1
Co-authored-by: Javier Cicchelli <javier@rock-n-code.com>
Co-committed-by: Javier Cicchelli <javier@rock-n-code.com>
This commit was merged in pull request #1.
This commit is contained in:
2025-10-02 15:30:12 +00:00
committed by Javier Cicchelli
parent 7895923655
commit fa2ddf7795
10 changed files with 538 additions and 16 deletions
+104
View File
@@ -0,0 +1,104 @@
# ===----------------------------------------------------------------------===
#
# This source file is part of the MarvelService open source project
#
# Copyright (c) 2025 Röck+Cöde VoF. and the MarvelService project authors
# Licensed under the EUPL 1.2 or later.
#
# See LICENSE for license information
# See CONTRIBUTORS for the list of MarvelService project authors
#
# ===----------------------------------------------------------------------===
# ENVIRONMENT VARIABLES
environment ?= .env
include $(environment)
export $(shell sed 's/=.*//' $(environment))
# LIBRARY
lib-build: ## Builds the library
@swift build
lib-release: ## Releases the library
@swift build -c release
lib-test: ## Runs the unit tests for the library
@swift test \
--disable-xctest \
--enable-code-coverage \
--enable-swift-testing \
--parallel
# SWIFT PACKAGE MANAGER
pkg-clean: ## Deletes built SPM artifacts of the package
@swift package clean
pkg-reset: ## Resets the complete SPM cache/build folder of the package
@swift package reset
pkg-pristine: pkg-clean pkg-reset ## Deletes all built artifacts, caches, and documentations of the package
@rm -drf $(DOCC_ARCHIVE_OUTPUT)
@rm -drf $(DOCC_GITHUB_OUTPUT)
pkg-outdated: ## Lists the SPM package dependencies that can be updated
@swift package update --dry-run
pkg-update: ## Updates the SPM package dependencies
@swift package update
# DOCUMENTATION
doc-generate: doc-generate-archive doc-generate-github ## Generates the library documentation for both Github and Xcode
doc-generate-archive: ## Generates the library documentation archive for Xcode
@swift package \
--allow-writing-to-directory $(DOCC_ARCHIVE_OUTPUT) \
generate-documentation \
--target $(SPM_LIBRARY_TARGET) \
--include-extended-types \
--enable-inherited-docs \
--output-path $(DOCC_ARCHIVE_OUTPUT)
doc-generate-github: ## Generates the library documentation for Github
@swift package \
--allow-writing-to-directory $(DOCC_GITHUB_OUTPUT) \
generate-documentation \
--target $(SPM_LIBRARY_TARGET) \
--disable-indexing \
--transform-for-static-hosting \
--include-extended-types \
--enable-inherited-docs \
--hosting-base-path $(DOCC_GITHUB_BASE_PATH) \
--output-path $(DOCC_GITHUB_OUTPUT)
doc-preview: ## Previews the library documentation in Safari
@open -a safari $(DOCC_PREVIEW_URL)
@swift package \
--disable-sandbox \
preview-documentation \
--target $(SPM_LIBRARY_TARGET) \
--include-extended-types \
--enable-inherited-docs
# IDE
ide-xcode: ## Opens this package with Xcode
@open -a Xcode Package.swift
ide-vscode: ## Opens this package with Visual Studio Code
@code .
# HELP
# Output the documentation for each of the defined tasks when `help` is called.
# Reference: https://marmelab.com/blog/2016/02/29/auto-documented-makefile.html
.PHONY: help
help: ## Prints the written documentation for all the defined tasks
@awk 'BEGIN {FS = ":.*?## "} /^[a-zA-Z_-]+:.*?## / {printf "\033[36m%-30s\033[0m %s\n", $$1, $$2}' $(MAKEFILE_LIST)
.DEFAULT_GOAL := help