|
1 | 1 | # Nodal
|
2 | 2 |
|
3 |
| -## What is it? |
| 3 | +### 🚧 Work in Progress |
4 | 4 |
|
5 |
| -TODO --- |
| 5 | +A highly scalable Kotlin Multiplatform (KMP) architecture framework, inspired by Uber's RIBs and powered by Koin for dependency injection, for building apps with node based architecture. |
6 | 6 |
|
7 |
| -It is the barebones library project intended to quickly bootstrap a Kotlin Multiplatform library, that is deployable to Maven Central. |
8 |
| - |
9 |
| -It has only one function: generate the [Fibonacci sequence](https://en.wikipedia.org/wiki/Fibonacci_sequence) starting from platform-provided numbers. Also, it has a test for each platform just to be sure that tests run. |
10 |
| - |
11 |
| -Note that no other actions or tools usually required for the library development are set up, such as [tracking of backwards compatibility] |
12 |
| -(https://kotlinlang.org/docs/jvm-api-guidelines-backward-compatibility.html#tools-designed-to-enforce-backward-compatibility), explicit API mode, |
13 |
| -licensing, contribution guideline, code of conduct and others. |
14 |
| - |
15 |
| -## How do I build it? |
16 |
| - |
17 |
| -1. - [x] Clone this repository ot just [use it as template](https://github.com/Kotlin/multiplatform-library-template/generate) |
18 |
| -1. - [ ] Edit library module name and include it in [`settings.gradle.kts`](settings.gradle.kts#L18) |
19 |
| -1. - [ ] Edit [`groupId` and `version`](convention-plugins/src/main/kotlin/module.publication.gradle.kts#L10-L11) |
20 |
| - 1. If you need the Android support update namespace [there](library/build.gradle.kts#L38) too |
21 |
| - 1. If you don't need an Android support delete the [`android` section](library/build.gradle.kts#L37-L43) |
22 |
| -1. - [ ] Edit [build targets you need](library/build.gradle.kts#L9-L21) |
23 |
| - |
24 |
| -At this stage, you have everything set to work with Kotlin Multiplatform. The project should be buildable (but you might need to provide actual starting values for the platforms you need). |
25 |
| - |
26 |
| -## How do I make it build on GitHub Actions? |
27 |
| - |
28 |
| -To make it work on GitHub actions, you need to update the [`matrix` section in `gradle.yml`](.github/workflows/gradle.yml#L25-L34). If you didn't change platforms in `build.gradle.kts` you don't need to touch anything. But still read it to understand how it works. |
29 |
| - |
30 |
| -Also, currently, it only runs tests, but you can change this behaviour as you wish by modifying `matrix` and the Gradle [build command](.github/workflows/gradle.yml#L52) |
31 |
| - |
32 |
| -## How do I deploy it to Maven Central? |
33 |
| - |
34 |
| -The most part of the job is already automated for you. However, deployment to Maven Central requires some manual work from your side. |
35 |
| - |
36 |
| -1. - [ ] Create an account at [Sonatype issue tracker](https://issues.sonatype.org/secure/Signup!default.jspa) |
37 |
| -1. - [ ] [Create an issue](https://issues.sonatype.org/secure/CreateIssue.jspa?issuetype=21&pid=10134) to create new project for you |
38 |
| -1. - [ ] You will have to prove that you own your desired namespace |
39 |
| -1. - [ ] Create a GPG key with `gpg --gen-key`, use the same email address you used to sign up to the Sonatype Jira |
40 |
| -1. - [ ] Find your key id in the output of the previous command looking like `D89FAAEB4CECAFD199A2F5E612C6F735F7A9A519` |
41 |
| -1. - [ ] Upload your key to a keyserver, for example |
42 |
| - ```bash |
43 |
| - gpg --send-keys --keyserver keyserver.ubuntu.com "<your key id>" |
44 |
| - ``` |
45 |
| -1. - [ ] Now you should create secrets available to your GitHub Actions |
46 |
| - 1. via `gh` command |
47 |
| - ```bash |
48 |
| - gh secret set OSSRH_GPG_SECRET_KEY -a actions --body "$(gpg --export-secret-key --armor "<your key id>")" |
49 |
| - gh secret set OSSRH_GPG_SECRET_KEY_ID -a actions --body "<your key id>" |
50 |
| - gh secret set OSSRH_GPG_SECRET_KEY_PASSWORD -a actions --body "<your key password>" |
51 |
| - gh secret set OSSRH_PASSWORD -a actions --body "<your sonatype account password>" |
52 |
| - gh secret set OSSRH_USERNAME -a actions --body "<your sonatype account username>" |
53 |
| - ``` |
54 |
| - 1. Or via the interface in `Settings` → `Secrets and Variables` → `Actions`, same variables as in 1. |
55 |
| -1. - [ ] Edit deployment pom parameters in [`module.publication.gradle.kts`](convention-plugins/src/main/kotlin/module.publication.gradle.kts#L25-L44) |
56 |
| -1. - [ ] Edit deploy targets in [`deploy.yml`](.github/workflows/deploy.yml#L23-L36) |
57 |
| -1. - [ ] Call deployment manually when ready [in Actions](../../actions/workflows/deploy.yml) → `Run Workflow` |
58 |
| -1. - [ ] When you see in your account on https://oss.sonatype.org that everything is fine, you can release your staging repositories and add target `releaseSonatypeStagingRepository` to `deploy.yml` [after this line](.github/workflows/deploy.yml#L60). This way artifacts will be published to central automatically when tests pass. |
| 7 | +Explore the [sample uber clone](https://github.com/omkar-tenkale/Nodal/tree/main/samples/ride/src/commonMain/kotlin/dev.omkartenkale.nodal.sample.ride) to see Nodal in action. |
0 commit comments