mirror of
https://github.com/AdrianKuta/Tree-Data-Structure.git
synced 2025-10-16 10:12:31 +02:00
26-add-ios-target (#28)
* Refactor: Modernize build and publishing workflow - Upgraded Kotlin from 1.7.20 to 1.9.20. - Upgraded JDK from 11 to 21 across all GitHub Actions workflows. - Replaced the legacy `maven-publish` plugin with `com.vanniktech.maven.publish` for simplified publishing to Maven Central. - Removed the `publishSnapshot.yml` workflow, as snapshot publishing is now managed by the new plugin. - Updated `publishRelease.yml` to use the `publishToMavenCentral` task and new secrets (`MAVEN_CENTRAL_USERNAME`, `MAVEN_CENTRAL_PASSWORD`). - Simplified `build.gradle.kts` by removing manual publishing and signing logic. - Set the JVM target to "21". - Bumped the project version to `3.1.1`. - Removed `js` targets and related configurations. - Added a new code style configuration file for the project (`.idea/codeStyles/Project.xml`). * fix: Add JavaScript targets - Added JS (IR) targets (`browser` and `nodejs`) to the Kotlin Multiplatform configuration for publishing. * Improve README and document new publishing workflow - Expanded the project description to highlight key features like Kotlin Multiplatform support, traversal iterators, DSL, and utility functions. - Added a new "Installation" section with instructions for Gradle (Kotlin/Groovy) and Maven. - Added a "Traversal and utilities" section to demonstrate usage of iterators and helper functions. - Replaced the old publishing documentation with updated instructions for publishing to Maven Central via the Central Portal. - Detailed the two publishing methods: automatically via GitHub Actions on release and manually via local Gradle commands. - Clarified required secrets and environment variables for the new publishing process.
This commit is contained in:
129
README.md
129
README.md
@@ -1,9 +1,40 @@
|
||||
# Tree (Data Structure)
|
||||
[](https://mvnrepository.com/artifact/com.github.adriankuta/tree-structure)
|
||||
[](https://github.com/AdrianKuta/Tree-Data-Structure/blob/master/LICENSE)
|
||||
[](https://github.com/AdrianKuta/Tree-Data-Structure/actions/workflows/publish.yml)
|
||||
[](https://github.com/AdrianKuta/Tree-Data-Structure/actions/workflows/publishRelease.yml)
|
||||
|
||||
Simple implementation to store object in tree structure.
|
||||
Lightweight Kotlin Multiplatform tree data structure for Kotlin and Java. Includes a small DSL, multiple traversal iterators, and pretty-print support.
|
||||
|
||||
- Kotlin Multiplatform (JVM, JS, iOS, and Native host)
|
||||
- Pre-order, Post-order, and Level-order iteration
|
||||
- Simple DSL: tree { child(...) }
|
||||
- Utilities: nodeCount(), height(), depth(), path(), prettyString(), clear(), removeChild()
|
||||
|
||||
## Installation
|
||||
|
||||
Gradle (Kotlin DSL):
|
||||
```kotlin
|
||||
// commonMain for KMP projects, or any sourceSet/module where you need it
|
||||
dependencies {
|
||||
implementation("com.github.adriankuta:tree-structure:3.1.1") // see badge above for the latest version
|
||||
}
|
||||
```
|
||||
|
||||
Gradle (Groovy):
|
||||
```groovy
|
||||
dependencies {
|
||||
implementation "com.github.adriankuta:tree-structure:3.1.1" // see badge above for the latest
|
||||
}
|
||||
```
|
||||
|
||||
Maven:
|
||||
```xml
|
||||
<dependency>
|
||||
<groupId>com.github.adriankuta</groupId>
|
||||
<artifactId>tree-structure</artifactId>
|
||||
<version>3.1.1</version>
|
||||
</dependency>
|
||||
```
|
||||
|
||||
## Usage
|
||||
|
||||
@@ -25,19 +56,15 @@ europe.addChild(france)
|
||||
println(root.prettyString())
|
||||
```
|
||||
|
||||
**Pretty Kotlin**
|
||||
|
||||
**Pretty Kotlin (DSL)**
|
||||
```kotlin
|
||||
val root =
|
||||
tree("World") {
|
||||
child("North America") {
|
||||
child("USA")
|
||||
}
|
||||
child("Europe") {
|
||||
child("Poland")
|
||||
child("Germany")
|
||||
}
|
||||
val root = tree("World") {
|
||||
child("North America") { child("USA") }
|
||||
child("Europe") {
|
||||
child("Poland")
|
||||
child("Germany")
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
**Java**
|
||||
@@ -58,8 +85,7 @@ europe.addChild(france);
|
||||
System.out.println(root.prettyString());
|
||||
```
|
||||
|
||||
*Output:*
|
||||
|
||||
Output:
|
||||
```
|
||||
World
|
||||
├── North America
|
||||
@@ -69,11 +95,59 @@ World
|
||||
└── France
|
||||
```
|
||||
|
||||
### Traversal and utilities
|
||||
```kotlin
|
||||
val root = TreeNode("root")
|
||||
// ... build your tree
|
||||
|
||||
## Download
|
||||
// Choose iteration order (default is PreOrder)
|
||||
root.treeIterator = TreeNodeIterators.PostOrder
|
||||
for (node in root) println(node.value)
|
||||
|
||||
// Utilities
|
||||
root.nodeCount() // number of descendants
|
||||
root.height() // longest path to a leaf (in edges)
|
||||
root.depth() // distance from current node to the root
|
||||
val path = root.path(root.children.first()) // nodes from descendant up to root
|
||||
|
||||
// Mutations
|
||||
val child = root.children.first()
|
||||
root.removeChild(child)
|
||||
root.clear() // remove entire subtree
|
||||
```
|
||||
|
||||
## Publishing to Maven Central (central.sonatype.com)
|
||||
|
||||
This project is configured to publish artifacts to Maven Central via the Sonatype Central Portal.
|
||||
|
||||
There are two supported ways to publish:
|
||||
|
||||
1) Via GitHub Actions (recommended)
|
||||
- Create a GitHub Release (tag) in this repository. When a release is published, the workflow .github/workflows/publishRelease.yml runs automatically.
|
||||
- The workflow uses the Gradle task publishToMavenCentral to upload artifacts through the Central Portal.
|
||||
- Make sure these repository secrets are configured in GitHub:
|
||||
- MAVEN_CENTRAL_USERNAME — Your Sonatype Central username (not email).
|
||||
- MAVEN_CENTRAL_PASSWORD — Your Sonatype Central password or a token from central.sonatype.com.
|
||||
- SIGNING_KEY — ASCII‑armored GPG private key (exported, single line; for in‑memory signing).
|
||||
- SIGNING_PASSWORD — Passphrase for the key above.
|
||||
- The workflow uses JDK 21 and publishes the version defined in build.gradle.kts.
|
||||
|
||||
2) Locally via Gradle
|
||||
- Ensure you have a Sonatype Central account and that the groupId com.github.adriankuta is verified in central.sonatype.com (Namespace Rules → Verify).
|
||||
- Export the same credentials/signing values as environment variables or pass them as Gradle properties:
|
||||
- ORG_GRADLE_PROJECT_mavenCentralUsername
|
||||
- ORG_GRADLE_PROJECT_mavenCentralPassword
|
||||
- ORG_GRADLE_PROJECT_signingInMemoryKey
|
||||
- ORG_GRADLE_PROJECT_signingInMemoryKeyPassword
|
||||
- Then run:
|
||||
- ./gradlew publishToMavenCentral
|
||||
- For snapshot publishing, set -Psnapshot=true (the version is derived from PUBLISH_VERSION with -SNAPSHOT).
|
||||
|
||||
Notes
|
||||
- Publishing is powered by the com.vanniktech.maven.publish Gradle plugin and Sonatype Central Portal (no legacy Nexus staging URLs needed).
|
||||
- The plugin is configured to sign all publications. Coordinates and POM metadata are defined in build.gradle.kts.
|
||||
- If using the combined task is preferred, you can also run publishAndReleaseToMavenCentral when automatic release is enabled; this repository currently uploads with publishToMavenCentral from CI.
|
||||
|
||||
implementation "com.github.adriankuta:tree-structure:$latest_versions"
|
||||
|
||||
## License
|
||||
|
||||
MIT License
|
||||
@@ -99,22 +173,3 @@ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
SOFTWARE.
|
||||
|
||||
---
|
||||
|
||||
## Publishing (Maven Central migration)
|
||||
|
||||
This project is configured to publish via Sonatype's s01.oss.sonatype.org (Nexus) which is compatible with the new Central (central.sonatype.com). The old oss.sonatype.org host is no longer used.
|
||||
|
||||
Environment variables supported by the build:
|
||||
- CENTRAL_USERNAME / CENTRAL_PASSWORD — Central Portal user/token (preferred)
|
||||
- OSSRH_USERNAME / OSSRH_PASSWORD — legacy credentials (fallback)
|
||||
- SIGNING_KEY_ID / SIGNING_KEY / SIGNING_PASSWORD — PGP signing (ASCII-armored key)
|
||||
- SNAPSHOT — set to true to append -SNAPSHOT to version
|
||||
|
||||
Gradle tasks:
|
||||
- Publish all publications to Sonatype: `./gradlew publishAllPublicationsToSonatypeS01Repository`
|
||||
- Or, standard publish (selects snapshots vs releases by version): `./gradlew publish`
|
||||
|
||||
Notes:
|
||||
- Releases are uploaded to: https://s01.oss.sonatype.org/service/local/staging/deploy/maven2/
|
||||
- Snapshots are uploaded to: https://s01.oss.sonatype.org/content/repositories/snapshots/
|
||||
- Staging/release close and promote are handled by Sonatype. If you use CI, set the env vars in your secrets.
|
||||
|
Reference in New Issue
Block a user