# Apache Pekko (Cluster) Management

This repository contains interfaces to inspect, interact and manage various Parts of Apache Pekko, primarily Pekko Cluster.
Future additions may extend these concepts to other parts of Apache Pekko.

Apache Pekko Management is a fork of [Akka Management](https://github.com/akka/akka-management)

## Documentation

The documentation is available at
[pekko.apache.org](https://pekko.apache.org/docs/pekko-management/current/).

## Building from Source

### Prerequisites
- Make sure you have installed a Java Development Kit (JDK) version 17 or later.
- Make sure you have [sbt](https://www.scala-sbt.org/) installed.
- [Graphviz](https://graphviz.gitlab.io/download/) is needed for the scaladoc generation build task, which is part of the release.

### Running the Build
- Open a command window and change directory to your preferred base directory
- Use git to clone the [repo](https://github.com/apache/pekko-management) or download a source release from https://pekko.apache.org (and unzip or untar it, as appropriate)
- Change directory to the directory where you installed the source (you should have a file called `build.sbt` in this directory)
- `sbt compile` compiles the main source for project default version of Scala (2.13)
    - `sbt +compile` will compile for all supported versions of Scala
- `sbt test` will compile the code and run the unit tests
- `sbt testQuick` similar to `test` but when repeated in shell mode will only run failing tests
- `sbt package` will build the jars
    - the jars will built into target dirs of the various modules
    - for the the 'discovery-aws-api' module, the jar will be built to `discovery-aws-api/target/scala-2.13/`
- `sbt publishLocal` will push the jars to your local Apache Ivy repository
- `sbt publishM2` will push the jars to your local Apache Maven repository
- `sbt docs/paradox` will build the docs (the ones describing the module features)
    - `sbt docs/paradoxBrowse` does the same but will open the docs in your browser when complete
    - the `index.html` file will appear in `target/paradox/site/main/`
- `sbt unidoc` will build the Javadocs for all the modules and load them to one place (may require Graphviz, see Prerequisites above)
    - the `index.html` file will appear in `target/scala-2.13/unidoc/`
- `sbt sourceDistGenerate` will generate source release to `target/dist/`
- The version number that appears in filenames and docs is derived, by default. The derived version contains the most git commit id or the date/time (if the directory is not under git control).
    - You can set the version number explicitly when running sbt commands
        - eg `sbt "set ThisBuild / version := \"1.0.0\"; sourceDistGenerate"`
    - Or you can add a file called `version.sbt` to the same directory that has the `build.sbt` containing something like
        - `ThisBuild / version := "1.0.0"`

### Running integration tests

The integration tests requires an Kubernetes API server running on `localhost:8080`. You can run a local Kubernetes cluster using [Minikube](https://kubernetes.io/docs/tasks/tools/install-minikube/).
You can bind the API server on `localhost:8080` using `kubectl proxy --port=8080`.

The following scripts can be used to run the integration tests:

- `./integration-test/kubernetes-api/test.sh` run the integration tests for the Kubernetes API.
- `./integration-test/kubernetes-dns/test.sh` run the integration tests related to the Kubernetes DNS-based discovery using the service name.
- `./integration-test/kubernetes-dns/test.sh` run the integration tests for the Kubernetes DNS-based discovery using the service name.
- `./lease-kubernetes-int-test/test.sh` run the integration tests for the Kubernetes lease implementation.

## Community

There are several ways to interact with the Apache Pekko community:

- [GitHub discussions](https://github.com/apache/pekko-management/discussions): for questions and general discussion.
- [Pekko users mailing list](https://lists.apache.org/list.html?users@pekko.apache.org): for Pekko user discussions.
- [Pekko dev mailing list](https://lists.apache.org/list.html?dev@pekko.apache.org): for Pekko development discussions.
- [GitHub issues](https://github.com/apache/pekko-management/issues): for bug reports and feature requests. Please search the existing issues before creating new ones. If you are unsure whether you have found a bug, consider asking in GitHub discussions or the mailing list first.

## Contributions & Maintainers

Contributions are very welcome. If you have an idea on how to improve Apache Pekko Management, don't hesitate to create an issue or submit a pull request.

See [CONTRIBUTING.md](https://github.com/apache/pekko-management/blob/main/CONTRIBUTING.md) for details on the development workflow and how to create your pull request.

## Project Status

With the exception of the experimental modules listed below, version 1.0.0 or later of this library
will be ready to be used in production and APIs are stable.

Snapshots are published to https://repository.apache.org/content/groups/snapshots/.

The following modules are considered experimental and require more work and testing to be considered production ready:

* pekko-discovery-marathon-api
* pekko-discovery-aws-api
* pekko-discovery-aws-api-async
* pekko-discovery-consul

## Code of Conduct

Apache Pekko Management is governed by the [Apache code of conduct](https://www.apache.org/foundation/policies/conduct.html). By participating in this project you agree to abide by its terms.

## License

Apache Pekko Management is available under the Apache License, version 2.0. See [LICENSE](https://github.com/apache/pekko-management/blob/main/LICENSE) file for details.
