The Atsign FoundationThe Atsign Foundation

gitHub licenseOpenSSF ScorecardOpenSSF Best Practices

The Atsign Platform for Java developers

This repository contains libraries, tools, samples and examples for developers that wish to work with the Atsign Platform from Java code.

Modules

There are 4 modules.

  1. at_client is the Java SDK for interacting with the Atsign Platform README.
  2. at_shell is a self-contained "fatjar" that provides an interactive command line interface for performing various operations and tests README.
  3. at_utils contains useful code which is not part of the SDK README.
  4. examples contains sample code which illustrates how to use the SDK README.

Build Process

Prerequisites

  • Java (JDK 11 or above)
  • Maven (3.6.3 or above)

Check out, build and test with the following commands:

git clone https://github.com/atsign-foundation/at_java.git
mvn install

Note: The integration tests rely on the virtual env. The tests will attempt to start a docker container with this image but that relies on dockerd (or desktop docker). If you want to skip these tests then add -DskipITs. See subsequent section for more information.

Unit Tests

These have no external dependencies and are run as part of the maven test lifecycle. The surefire plugin will pick up classes that end in the following:

**/*Test.java
**/*Tests.java
**/*TestCase.java

Use -DskipTests to avoid running unit tests.

Integration Tests

These depend on running the atsign virtual environment and are run as part of the maven verify lifecycle. The failsafe plugin will pick up classes that end in the following:

**/*IT.java

Use -DskipITs to avoid running integration tests.

The integration tests check to see if a virtual env is running. If not they will attempt to start one. This requires dockerd or desktop docker to be running.

For CI, "standing up" and then "tearing down" the docker container is the intended behavior. However, for a developer this will be slow so it's preferable to "standup" the virtual env independently, like this:

cd at_client/src/test/resources/org/atsign/virtualenv
docker compose -f up

The start-up can take a few minutes and involves running scripts that install the test configuration. The environment is ready to test with when you see the following log output:

...
virtualenv-1 | SHOUT|...| install_PKAM_Keys |cramAndPkamAuth successful for @chris
virtualenv-1 | SHOUT|...| install_PKAM_Keys |cramAndPkamAuth successful for @policy1
virtualenv-1 | SHOUT|...| install_PKAM_Keys |cramAndPkamAuth successful for @emoji

The tests require test keys (CRAM keys and atKeys) which the virtual env was built with. The pom contains a plugin which downloads the at_demo_data package and unpacks it under target. When the tests run this is where they expect to find keys. The release version is specified as property in the POM and needs to be periodically updated to the latest release.

Note: The integration tests are designed to reset the virtual env as best as possible. This relies on teardown steps. If you are debugging tests and terminate the execution then this can leave the virtual env in an unreset state. Running the test again might fail because of this BUT that teardown should successfully reset the env and allow the next run to succeed. In extreme circumstances it may be necessary to reset the docker container, like this:

cd at_client/src/test/resources/org/atsign/virtualenv
docker compose -f down
docker compose -f up

Virtual Environment

This is a docker image that bundles the following:

  • redis
  • root server
  • multiple at_servers in different states of configuration

The docker image is published as part of the at_server repository.

The keys (CRAM secrets, pre-cut AtKeys) are part the at_demos repository.

The pom.xml for modules which run have integration tests include a plugin which downloads the at_demos package to target.

Code Style And Formatting

The maven poms contain the following plugins to enforce a consistent coding style and format.

The rules which configure the respective plugins are here

Run the following maven command run the checks:

mvn validate

Run the following maven command to fix the spotless violations:

mvn spotless:apply

Intellij

To configure Intellij to use the same settings

  1. Add the Adaptor for Eclipse Code Formatter plugin and configure in Settings -> Adaptor for Eclipse Code Formatter by setting Eclipse workspace/project folder or config file as config/java-format.xml
  2. Add CheckStyle-IDEA plugin and configure in Settings -> Tools -> Checkstyle by adding config/checkstyle.xml

Releases

This script can be used to prepare a release

bash ./release.sh

By default, it will create a release for the current snapshot version and increment the patch number for the next dev release. e.g if the current pom version is 1.2.3-SNAPSHOT, then the release version will be 1.2.3 and the next version will be 1.2.4-SNAPSHOT.

However, you can provide the release version and the next version explicitly.

This example illustrates overriding the release version with a specific version

bash ./release.sh 1.2.3

This overrides the release version to be the next minor version. e.g if the current pom version is 1.2.3-SNAPSHOT then the release version will be 1.3.0 and the next version will be 1.3.1-SNAPSHOT.

bash ./release.sh minor

This overrides the release version to be the next minor version. e.g if the current pom version is 1.2.3-SNAPSHOT then the release version will be 2.0.0 and the next version will be 2.0.1-SNAPSHOT.

bash ./release.sh major

The script will prepare the working branch as a release branch. This means it will make 2 commits.

  1. One which updates the pom versions to the release version
  2. And a subsequent commit that updates the pom version to the next version.

This branch should be pushed as for a PR. Once that is approved and merged a GitHUb release should be created with a corresponding release tag. The target for the tag should be the first commit.

The maven-deploy.yml workflow will be triggered by the tag. This will build and deploy to maven central.

The workflow release.yml can be triggered from the GitHub UI. This will automatically create a branch, run the release script and push the branch.

Contributions welcome

All of our software is open with intent. We welcome contributions - we want pull requests, and we want to hear about issues. See also CONTRIBUTING.md

About

Java libraries, tools, samples and examples for the atPlatform

Resources

Code of conduct

Contributing

Security policy

Stars

2 stars

Watchers

8 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

The Atsign FoundationThe Atsign Foundation

gitHub licenseOpenSSF ScorecardOpenSSF Best Practices

The Atsign Platform for Java developers

This repository contains libraries, tools, samples and examples for developers that wish to work with the Atsign Platform from Java code.

Modules

There are 4 modules.

  1. at_client is the Java SDK for interacting with the Atsign Platform README.
  2. at_shell is a self-contained "fatjar" that provides an interactive command line interface for performing various operations and tests README.
  3. at_utils contains useful code which is not part of the SDK README.
  4. examples contains sample code which illustrates how to use the SDK README.

Build Process

Prerequisites

  • Java (JDK 11 or above)
  • Maven (3.6.3 or above)

Check out, build and test with the following commands:

git clone https://github.com/atsign-foundation/at_java.git
mvn install

Note: The integration tests rely on the virtual env. The tests will attempt to start a docker container with this image but that relies on dockerd (or desktop docker). If you want to skip these tests then add -DskipITs. See subsequent section for more information.

Unit Tests

These have no external dependencies and are run as part of the maven test lifecycle. The surefire plugin will pick up classes that end in the following:

**/*Test.java
**/*Tests.java
**/*TestCase.java

Use -DskipTests to avoid running unit tests.

Integration Tests

These depend on running the atsign virtual environment and are run as part of the maven verify lifecycle. The failsafe plugin will pick up classes that end in the following:

**/*IT.java

Use -DskipITs to avoid running integration tests.

The integration tests check to see if a virtual env is running. If not they will attempt to start one. This requires dockerd or desktop docker to be running.

For CI, "standing up" and then "tearing down" the docker container is the intended behavior. However, for a developer this will be slow so it's preferable to "standup" the virtual env independently, like this:

cd at_client/src/test/resources/org/atsign/virtualenv
docker compose -f up

The start-up can take a few minutes and involves running scripts that install the test configuration. The environment is ready to test with when you see the following log output:

...
virtualenv-1 | SHOUT|...| install_PKAM_Keys |cramAndPkamAuth successful for @chris
virtualenv-1 | SHOUT|...| install_PKAM_Keys |cramAndPkamAuth successful for @policy1
virtualenv-1 | SHOUT|...| install_PKAM_Keys |cramAndPkamAuth successful for @emoji

The tests require test keys (CRAM keys and atKeys) which the virtual env was built with. The pom contains a plugin which downloads the at_demo_data package and unpacks it under target. When the tests run this is where they expect to find keys. The release version is specified as property in the POM and needs to be periodically updated to the latest release.

Note: The integration tests are designed to reset the virtual env as best as possible. This relies on teardown steps. If you are debugging tests and terminate the execution then this can leave the virtual env in an unreset state. Running the test again might fail because of this BUT that teardown should successfully reset the env and allow the next run to succeed. In extreme circumstances it may be necessary to reset the docker container, like this:

cd at_client/src/test/resources/org/atsign/virtualenv
docker compose -f down
docker compose -f up

Virtual Environment

This is a docker image that bundles the following:

  • redis
  • root server
  • multiple at_servers in different states of configuration

The docker image is published as part of the at_server repository.

The keys (CRAM secrets, pre-cut AtKeys) are part the at_demos repository.

The pom.xml for modules which run have integration tests include a plugin which downloads the at_demos package to target.

Code Style And Formatting

The maven poms contain the following plugins to enforce a consistent coding style and format.

The rules which configure the respective plugins are here

Run the following maven command run the checks:

mvn validate

Run the following maven command to fix the spotless violations:

mvn spotless:apply

Intellij

To configure Intellij to use the same settings

  1. Add the Adaptor for Eclipse Code Formatter plugin and configure in Settings -> Adaptor for Eclipse Code Formatter by setting Eclipse workspace/project folder or config file as config/java-format.xml
  2. Add CheckStyle-IDEA plugin and configure in Settings -> Tools -> Checkstyle by adding config/checkstyle.xml

Releases

This script can be used to prepare a release

bash ./release.sh

By default, it will create a release for the current snapshot version and increment the patch number for the next dev release. e.g if the current pom version is 1.2.3-SNAPSHOT, then the release version will be 1.2.3 and the next version will be 1.2.4-SNAPSHOT.

However, you can provide the release version and the next version explicitly.

This example illustrates overriding the release version with a specific version

bash ./release.sh 1.2.3

This overrides the release version to be the next minor version. e.g if the current pom version is 1.2.3-SNAPSHOT then the release version will be 1.3.0 and the next version will be 1.3.1-SNAPSHOT.

bash ./release.sh minor

This overrides the release version to be the next minor version. e.g if the current pom version is 1.2.3-SNAPSHOT then the release version will be 2.0.0 and the next version will be 2.0.1-SNAPSHOT.

bash ./release.sh major

The script will prepare the working branch as a release branch. This means it will make 2 commits.

  1. One which updates the pom versions to the release version
  2. And a subsequent commit that updates the pom version to the next version.

This branch should be pushed as for a PR. Once that is approved and merged a GitHUb release should be created with a corresponding release tag. The target for the tag should be the first commit.

The maven-deploy.yml workflow will be triggered by the tag. This will build and deploy to maven central.

The workflow release.yml can be triggered from the GitHub UI. This will automatically create a branch, run the release script and push the branch.

Contributions welcome

All of our software is open with intent. We welcome contributions - we want pull requests, and we want to hear about issues. See also CONTRIBUTING.md

About

Java libraries, tools, samples and examples for the atPlatform

Resources

Code of conduct

Contributing

Security policy

Stars

2 stars

Watchers

8 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

The Atsign FoundationThe Atsign Foundation

gitHub licenseOpenSSF ScorecardOpenSSF Best Practices

The Atsign Platform for Java developers

This repository contains libraries, tools, samples and examples for developers that wish to work with the Atsign Platform from Java code.

Modules

There are 4 modules.

  1. at_client is the Java SDK for interacting with the Atsign Platform README.
  2. at_shell is a self-contained "fatjar" that provides an interactive command line interface for performing various operations and tests README.
  3. at_utils contains useful code which is not part of the SDK README.
  4. examples contains sample code which illustrates how to use the SDK README.

Build Process

Prerequisites

  • Java (JDK 11 or above)
  • Maven (3.6.3 or above)

Check out, build and test with the following commands:

git clone https://github.com/atsign-foundation/at_java.git
mvn install

Note: The integration tests rely on the virtual env. The tests will attempt to start a docker container with this image but that relies on dockerd (or desktop docker). If you want to skip these tests then add -DskipITs. See subsequent section for more information.

Unit Tests

These have no external dependencies and are run as part of the maven test lifecycle. The surefire plugin will pick up classes that end in the following:

**/*Test.java
**/*Tests.java
**/*TestCase.java

Use -DskipTests to avoid running unit tests.

Integration Tests

These depend on running the atsign virtual environment and are run as part of the maven verify lifecycle. The failsafe plugin will pick up classes that end in the following:

**/*IT.java

Use -DskipITs to avoid running integration tests.

The integration tests check to see if a virtual env is running. If not they will attempt to start one. This requires dockerd or desktop docker to be running.

For CI, "standing up" and then "tearing down" the docker container is the intended behavior. However, for a developer this will be slow so it's preferable to "standup" the virtual env independently, like this:

cd at_client/src/test/resources/org/atsign/virtualenv
docker compose -f up

The start-up can take a few minutes and involves running scripts that install the test configuration. The environment is ready to test with when you see the following log output:

...
virtualenv-1 | SHOUT|...| install_PKAM_Keys |cramAndPkamAuth successful for @chris
virtualenv-1 | SHOUT|...| install_PKAM_Keys |cramAndPkamAuth successful for @policy1
virtualenv-1 | SHOUT|...| install_PKAM_Keys |cramAndPkamAuth successful for @emoji

The tests require test keys (CRAM keys and atKeys) which the virtual env was built with. The pom contains a plugin which downloads the at_demo_data package and unpacks it under target. When the tests run this is where they expect to find keys. The release version is specified as property in the POM and needs to be periodically updated to the latest release.

Note: The integration tests are designed to reset the virtual env as best as possible. This relies on teardown steps. If you are debugging tests and terminate the execution then this can leave the virtual env in an unreset state. Running the test again might fail because of this BUT that teardown should successfully reset the env and allow the next run to succeed. In extreme circumstances it may be necessary to reset the docker container, like this:

cd at_client/src/test/resources/org/atsign/virtualenv
docker compose -f down
docker compose -f up

Virtual Environment

This is a docker image that bundles the following:

  • redis
  • root server
  • multiple at_servers in different states of configuration

The docker image is published as part of the at_server repository.

The keys (CRAM secrets, pre-cut AtKeys) are part the at_demos repository.

The pom.xml for modules which run have integration tests include a plugin which downloads the at_demos package to target.

Code Style And Formatting

The maven poms contain the following plugins to enforce a consistent coding style and format.

The rules which configure the respective plugins are here

Run the following maven command run the checks:

mvn validate

Run the following maven command to fix the spotless violations:

mvn spotless:apply

Intellij

To configure Intellij to use the same settings

  1. Add the Adaptor for Eclipse Code Formatter plugin and configure in Settings -> Adaptor for Eclipse Code Formatter by setting Eclipse workspace/project folder or config file as config/java-format.xml
  2. Add CheckStyle-IDEA plugin and configure in Settings -> Tools -> Checkstyle by adding config/checkstyle.xml

Releases

This script can be used to prepare a release

bash ./release.sh

By default, it will create a release for the current snapshot version and increment the patch number for the next dev release. e.g if the current pom version is 1.2.3-SNAPSHOT, then the release version will be 1.2.3 and the next version will be 1.2.4-SNAPSHOT.

However, you can provide the release version and the next version explicitly.

This example illustrates overriding the release version with a specific version

bash ./release.sh 1.2.3

This overrides the release version to be the next minor version. e.g if the current pom version is 1.2.3-SNAPSHOT then the release version will be 1.3.0 and the next version will be 1.3.1-SNAPSHOT.

bash ./release.sh minor

This overrides the release version to be the next minor version. e.g if the current pom version is 1.2.3-SNAPSHOT then the release version will be 2.0.0 and the next version will be 2.0.1-SNAPSHOT.

bash ./release.sh major

The script will prepare the working branch as a release branch. This means it will make 2 commits.

  1. One which updates the pom versions to the release version
  2. And a subsequent commit that updates the pom version to the next version.

This branch should be pushed as for a PR. Once that is approved and merged a GitHUb release should be created with a corresponding release tag. The target for the tag should be the first commit.

The maven-deploy.yml workflow will be triggered by the tag. This will build and deploy to maven central.

The workflow release.yml can be triggered from the GitHub UI. This will automatically create a branch, run the release script and push the branch.

Contributions welcome

All of our software is open with intent. We welcome contributions - we want pull requests, and we want to hear about issues. See also CONTRIBUTING.md

About

Java libraries, tools, samples and examples for the atPlatform

Resources

Code of conduct

Contributing

Security policy

Stars

2 stars

Watchers

8 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

The Atsign FoundationThe Atsign Foundation

gitHub licenseOpenSSF ScorecardOpenSSF Best Practices

The Atsign Platform for Java developers

This repository contains libraries, tools, samples and examples for developers that wish to work with the Atsign Platform from Java code.

Modules

There are 4 modules.

  1. at_client is the Java SDK for interacting with the Atsign Platform README.
  2. at_shell is a self-contained "fatjar" that provides an interactive command line interface for performing various operations and tests README.
  3. at_utils contains useful code which is not part of the SDK README.
  4. examples contains sample code which illustrates how to use the SDK README.

Build Process

Prerequisites

  • Java (JDK 11 or above)
  • Maven (3.6.3 or above)

Check out, build and test with the following commands:

git clone https://github.com/atsign-foundation/at_java.git
mvn install

Note: The integration tests rely on the virtual env. The tests will attempt to start a docker container with this image but that relies on dockerd (or desktop docker). If you want to skip these tests then add -DskipITs. See subsequent section for more information.

Unit Tests

These have no external dependencies and are run as part of the maven test lifecycle. The surefire plugin will pick up classes that end in the following:

**/*Test.java
**/*Tests.java
**/*TestCase.java

Use -DskipTests to avoid running unit tests.

Integration Tests

These depend on running the atsign virtual environment and are run as part of the maven verify lifecycle. The failsafe plugin will pick up classes that end in the following:

**/*IT.java

Use -DskipITs to avoid running integration tests.

The integration tests check to see if a virtual env is running. If not they will attempt to start one. This requires dockerd or desktop docker to be running.

For CI, "standing up" and then "tearing down" the docker container is the intended behavior. However, for a developer this will be slow so it's preferable to "standup" the virtual env independently, like this:

cd at_client/src/test/resources/org/atsign/virtualenv
docker compose -f up

The start-up can take a few minutes and involves running scripts that install the test configuration. The environment is ready to test with when you see the following log output:

...
virtualenv-1 | SHOUT|...| install_PKAM_Keys |cramAndPkamAuth successful for @chris
virtualenv-1 | SHOUT|...| install_PKAM_Keys |cramAndPkamAuth successful for @policy1
virtualenv-1 | SHOUT|...| install_PKAM_Keys |cramAndPkamAuth successful for @emoji

The tests require test keys (CRAM keys and atKeys) which the virtual env was built with. The pom contains a plugin which downloads the at_demo_data package and unpacks it under target. When the tests run this is where they expect to find keys. The release version is specified as property in the POM and needs to be periodically updated to the latest release.

Note: The integration tests are designed to reset the virtual env as best as possible. This relies on teardown steps. If you are debugging tests and terminate the execution then this can leave the virtual env in an unreset state. Running the test again might fail because of this BUT that teardown should successfully reset the env and allow the next run to succeed. In extreme circumstances it may be necessary to reset the docker container, like this:

cd at_client/src/test/resources/org/atsign/virtualenv
docker compose -f down
docker compose -f up

Virtual Environment

This is a docker image that bundles the following:

  • redis
  • root server
  • multiple at_servers in different states of configuration

The docker image is published as part of the at_server repository.

The keys (CRAM secrets, pre-cut AtKeys) are part the at_demos repository.

The pom.xml for modules which run have integration tests include a plugin which downloads the at_demos package to target.

Code Style And Formatting

The maven poms contain the following plugins to enforce a consistent coding style and format.

The rules which configure the respective plugins are here

Run the following maven command run the checks:

mvn validate

Run the following maven command to fix the spotless violations:

mvn spotless:apply

Intellij

To configure Intellij to use the same settings

  1. Add the Adaptor for Eclipse Code Formatter plugin and configure in Settings -> Adaptor for Eclipse Code Formatter by setting Eclipse workspace/project folder or config file as config/java-format.xml
  2. Add CheckStyle-IDEA plugin and configure in Settings -> Tools -> Checkstyle by adding config/checkstyle.xml

Releases

This script can be used to prepare a release

bash ./release.sh

By default, it will create a release for the current snapshot version and increment the patch number for the next dev release. e.g if the current pom version is 1.2.3-SNAPSHOT, then the release version will be 1.2.3 and the next version will be 1.2.4-SNAPSHOT.

However, you can provide the release version and the next version explicitly.

This example illustrates overriding the release version with a specific version

bash ./release.sh 1.2.3

This overrides the release version to be the next minor version. e.g if the current pom version is 1.2.3-SNAPSHOT then the release version will be 1.3.0 and the next version will be 1.3.1-SNAPSHOT.

bash ./release.sh minor

This overrides the release version to be the next minor version. e.g if the current pom version is 1.2.3-SNAPSHOT then the release version will be 2.0.0 and the next version will be 2.0.1-SNAPSHOT.

bash ./release.sh major

The script will prepare the working branch as a release branch. This means it will make 2 commits.

  1. One which updates the pom versions to the release version
  2. And a subsequent commit that updates the pom version to the next version.

This branch should be pushed as for a PR. Once that is approved and merged a GitHUb release should be created with a corresponding release tag. The target for the tag should be the first commit.

The maven-deploy.yml workflow will be triggered by the tag. This will build and deploy to maven central.

The workflow release.yml can be triggered from the GitHub UI. This will automatically create a branch, run the release script and push the branch.

Contributions welcome

All of our software is open with intent. We welcome contributions - we want pull requests, and we want to hear about issues. See also CONTRIBUTING.md

About

Java libraries, tools, samples and examples for the atPlatform

Resources

Code of conduct

Contributing

Security policy

Stars

2 stars

Watchers

8 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

The Atsign FoundationThe Atsign Foundation

gitHub licenseOpenSSF ScorecardOpenSSF Best Practices

The Atsign Platform for Java developers

This repository contains libraries, tools, samples and examples for developers that wish to work with the Atsign Platform from Java code.

Modules

There are 4 modules.

  1. at_client is the Java SDK for interacting with the Atsign Platform README.
  2. at_shell is a self-contained "fatjar" that provides an interactive command line interface for performing various operations and tests README.
  3. at_utils contains useful code which is not part of the SDK README.
  4. examples contains sample code which illustrates how to use the SDK README.

Build Process

Prerequisites

  • Java (JDK 11 or above)
  • Maven (3.6.3 or above)

Check out, build and test with the following commands:

git clone https://github.com/atsign-foundation/at_java.git
mvn install

Note: The integration tests rely on the virtual env. The tests will attempt to start a docker container with this image but that relies on dockerd (or desktop docker). If you want to skip these tests then add -DskipITs. See subsequent section for more information.

Unit Tests

These have no external dependencies and are run as part of the maven test lifecycle. The surefire plugin will pick up classes that end in the following:

**/*Test.java
**/*Tests.java
**/*TestCase.java

Use -DskipTests to avoid running unit tests.

Integration Tests

These depend on running the atsign virtual environment and are run as part of the maven verify lifecycle. The failsafe plugin will pick up classes that end in the following:

**/*IT.java

Use -DskipITs to avoid running integration tests.

The integration tests check to see if a virtual env is running. If not they will attempt to start one. This requires dockerd or desktop docker to be running.

For CI, "standing up" and then "tearing down" the docker container is the intended behavior. However, for a developer this will be slow so it's preferable to "standup" the virtual env independently, like this:

cd at_client/src/test/resources/org/atsign/virtualenv
docker compose -f up

The start-up can take a few minutes and involves running scripts that install the test configuration. The environment is ready to test with when you see the following log output:

...
virtualenv-1 | SHOUT|...| install_PKAM_Keys |cramAndPkamAuth successful for @chris
virtualenv-1 | SHOUT|...| install_PKAM_Keys |cramAndPkamAuth successful for @policy1
virtualenv-1 | SHOUT|...| install_PKAM_Keys |cramAndPkamAuth successful for @emoji

The tests require test keys (CRAM keys and atKeys) which the virtual env was built with. The pom contains a plugin which downloads the at_demo_data package and unpacks it under target. When the tests run this is where they expect to find keys. The release version is specified as property in the POM and needs to be periodically updated to the latest release.

Note: The integration tests are designed to reset the virtual env as best as possible. This relies on teardown steps. If you are debugging tests and terminate the execution then this can leave the virtual env in an unreset state. Running the test again might fail because of this BUT that teardown should successfully reset the env and allow the next run to succeed. In extreme circumstances it may be necessary to reset the docker container, like this:

cd at_client/src/test/resources/org/atsign/virtualenv
docker compose -f down
docker compose -f up

Virtual Environment

This is a docker image that bundles the following:

  • redis
  • root server
  • multiple at_servers in different states of configuration

The docker image is published as part of the at_server repository.

The keys (CRAM secrets, pre-cut AtKeys) are part the at_demos repository.

The pom.xml for modules which run have integration tests include a plugin which downloads the at_demos package to target.

Code Style And Formatting

The maven poms contain the following plugins to enforce a consistent coding style and format.

The rules which configure the respective plugins are here

Run the following maven command run the checks:

mvn validate

Run the following maven command to fix the spotless violations:

mvn spotless:apply

Intellij

To configure Intellij to use the same settings

  1. Add the Adaptor for Eclipse Code Formatter plugin and configure in Settings -> Adaptor for Eclipse Code Formatter by setting Eclipse workspace/project folder or config file as config/java-format.xml
  2. Add CheckStyle-IDEA plugin and configure in Settings -> Tools -> Checkstyle by adding config/checkstyle.xml

Releases

This script can be used to prepare a release

bash ./release.sh

By default, it will create a release for the current snapshot version and increment the patch number for the next dev release. e.g if the current pom version is 1.2.3-SNAPSHOT, then the release version will be 1.2.3 and the next version will be 1.2.4-SNAPSHOT.

However, you can provide the release version and the next version explicitly.

This example illustrates overriding the release version with a specific version

bash ./release.sh 1.2.3

This overrides the release version to be the next minor version. e.g if the current pom version is 1.2.3-SNAPSHOT then the release version will be 1.3.0 and the next version will be 1.3.1-SNAPSHOT.

bash ./release.sh minor

This overrides the release version to be the next minor version. e.g if the current pom version is 1.2.3-SNAPSHOT then the release version will be 2.0.0 and the next version will be 2.0.1-SNAPSHOT.

bash ./release.sh major

The script will prepare the working branch as a release branch. This means it will make 2 commits.

  1. One which updates the pom versions to the release version
  2. And a subsequent commit that updates the pom version to the next version.

This branch should be pushed as for a PR. Once that is approved and merged a GitHUb release should be created with a corresponding release tag. The target for the tag should be the first commit.

The maven-deploy.yml workflow will be triggered by the tag. This will build and deploy to maven central.

The workflow release.yml can be triggered from the GitHub UI. This will automatically create a branch, run the release script and push the branch.

Contributions welcome

All of our software is open with intent. We welcome contributions - we want pull requests, and we want to hear about issues. See also CONTRIBUTING.md

About

Java libraries, tools, samples and examples for the atPlatform

Resources

Code of conduct

Contributing

Security policy

Stars

2 stars

Watchers

8 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

The Atsign FoundationThe Atsign Foundation

gitHub licenseOpenSSF ScorecardOpenSSF Best Practices

The Atsign Platform for Java developers

This repository contains libraries, tools, samples and examples for developers that wish to work with the Atsign Platform from Java code.

Modules

There are 4 modules.

  1. at_client is the Java SDK for interacting with the Atsign Platform README.
  2. at_shell is a self-contained "fatjar" that provides an interactive command line interface for performing various operations and tests README.
  3. at_utils contains useful code which is not part of the SDK README.
  4. examples contains sample code which illustrates how to use the SDK README.

Build Process

Prerequisites

  • Java (JDK 11 or above)
  • Maven (3.6.3 or above)

Check out, build and test with the following commands:

git clone https://github.com/atsign-foundation/at_java.git
mvn install

Note: The integration tests rely on the virtual env. The tests will attempt to start a docker container with this image but that relies on dockerd (or desktop docker). If you want to skip these tests then add -DskipITs. See subsequent section for more information.

Unit Tests

These have no external dependencies and are run as part of the maven test lifecycle. The surefire plugin will pick up classes that end in the following:

**/*Test.java
**/*Tests.java
**/*TestCase.java

Use -DskipTests to avoid running unit tests.

Integration Tests

These depend on running the atsign virtual environment and are run as part of the maven verify lifecycle. The failsafe plugin will pick up classes that end in the following:

**/*IT.java

Use -DskipITs to avoid running integration tests.

The integration tests check to see if a virtual env is running. If not they will attempt to start one. This requires dockerd or desktop docker to be running.

For CI, "standing up" and then "tearing down" the docker container is the intended behavior. However, for a developer this will be slow so it's preferable to "standup" the virtual env independently, like this:

cd at_client/src/test/resources/org/atsign/virtualenv
docker compose -f up

The start-up can take a few minutes and involves running scripts that install the test configuration. The environment is ready to test with when you see the following log output:

...
virtualenv-1 | SHOUT|...| install_PKAM_Keys |cramAndPkamAuth successful for @chris
virtualenv-1 | SHOUT|...| install_PKAM_Keys |cramAndPkamAuth successful for @policy1
virtualenv-1 | SHOUT|...| install_PKAM_Keys |cramAndPkamAuth successful for @emoji

The tests require test keys (CRAM keys and atKeys) which the virtual env was built with. The pom contains a plugin which downloads the at_demo_data package and unpacks it under target. When the tests run this is where they expect to find keys. The release version is specified as property in the POM and needs to be periodically updated to the latest release.

Note: The integration tests are designed to reset the virtual env as best as possible. This relies on teardown steps. If you are debugging tests and terminate the execution then this can leave the virtual env in an unreset state. Running the test again might fail because of this BUT that teardown should successfully reset the env and allow the next run to succeed. In extreme circumstances it may be necessary to reset the docker container, like this:

cd at_client/src/test/resources/org/atsign/virtualenv
docker compose -f down
docker compose -f up

Virtual Environment

This is a docker image that bundles the following:

  • redis
  • root server
  • multiple at_servers in different states of configuration

The docker image is published as part of the at_server repository.

The keys (CRAM secrets, pre-cut AtKeys) are part the at_demos repository.

The pom.xml for modules which run have integration tests include a plugin which downloads the at_demos package to target.

Code Style And Formatting

The maven poms contain the following plugins to enforce a consistent coding style and format.

The rules which configure the respective plugins are here

Run the following maven command run the checks:

mvn validate

Run the following maven command to fix the spotless violations:

mvn spotless:apply

Intellij

To configure Intellij to use the same settings

  1. Add the Adaptor for Eclipse Code Formatter plugin and configure in Settings -> Adaptor for Eclipse Code Formatter by setting Eclipse workspace/project folder or config file as config/java-format.xml
  2. Add CheckStyle-IDEA plugin and configure in Settings -> Tools -> Checkstyle by adding config/checkstyle.xml

Releases

This script can be used to prepare a release

bash ./release.sh

By default, it will create a release for the current snapshot version and increment the patch number for the next dev release. e.g if the current pom version is 1.2.3-SNAPSHOT, then the release version will be 1.2.3 and the next version will be 1.2.4-SNAPSHOT.

However, you can provide the release version and the next version explicitly.

This example illustrates overriding the release version with a specific version

bash ./release.sh 1.2.3

This overrides the release version to be the next minor version. e.g if the current pom version is 1.2.3-SNAPSHOT then the release version will be 1.3.0 and the next version will be 1.3.1-SNAPSHOT.

bash ./release.sh minor

This overrides the release version to be the next minor version. e.g if the current pom version is 1.2.3-SNAPSHOT then the release version will be 2.0.0 and the next version will be 2.0.1-SNAPSHOT.

bash ./release.sh major

The script will prepare the working branch as a release branch. This means it will make 2 commits.

  1. One which updates the pom versions to the release version
  2. And a subsequent commit that updates the pom version to the next version.

This branch should be pushed as for a PR. Once that is approved and merged a GitHUb release should be created with a corresponding release tag. The target for the tag should be the first commit.

The maven-deploy.yml workflow will be triggered by the tag. This will build and deploy to maven central.

The workflow release.yml can be triggered from the GitHub UI. This will automatically create a branch, run the release script and push the branch.

Contributions welcome

All of our software is open with intent. We welcome contributions - we want pull requests, and we want to hear about issues. See also CONTRIBUTING.md

About

Java libraries, tools, samples and examples for the atPlatform

Resources

Code of conduct

Contributing

Security policy

Stars

2 stars

Watchers

8 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

The Atsign FoundationThe Atsign Foundation

gitHub licenseOpenSSF ScorecardOpenSSF Best Practices

The Atsign Platform for Java developers

This repository contains libraries, tools, samples and examples for developers that wish to work with the Atsign Platform from Java code.

Modules

There are 4 modules.

  1. at_client is the Java SDK for interacting with the Atsign Platform README.
  2. at_shell is a self-contained "fatjar" that provides an interactive command line interface for performing various operations and tests README.
  3. at_utils contains useful code which is not part of the SDK README.
  4. examples contains sample code which illustrates how to use the SDK README.

Build Process

Prerequisites

  • Java (JDK 11 or above)
  • Maven (3.6.3 or above)

Check out, build and test with the following commands:

git clone https://github.com/atsign-foundation/at_java.git
mvn install

Note: The integration tests rely on the virtual env. The tests will attempt to start a docker container with this image but that relies on dockerd (or desktop docker). If you want to skip these tests then add -DskipITs. See subsequent section for more information.

Unit Tests

These have no external dependencies and are run as part of the maven test lifecycle. The surefire plugin will pick up classes that end in the following:

**/*Test.java
**/*Tests.java
**/*TestCase.java

Use -DskipTests to avoid running unit tests.

Integration Tests

These depend on running the atsign virtual environment and are run as part of the maven verify lifecycle. The failsafe plugin will pick up classes that end in the following:

**/*IT.java

Use -DskipITs to avoid running integration tests.

The integration tests check to see if a virtual env is running. If not they will attempt to start one. This requires dockerd or desktop docker to be running.

For CI, "standing up" and then "tearing down" the docker container is the intended behavior. However, for a developer this will be slow so it's preferable to "standup" the virtual env independently, like this:

cd at_client/src/test/resources/org/atsign/virtualenv
docker compose -f up

The start-up can take a few minutes and involves running scripts that install the test configuration. The environment is ready to test with when you see the following log output:

...
virtualenv-1 | SHOUT|...| install_PKAM_Keys |cramAndPkamAuth successful for @chris
virtualenv-1 | SHOUT|...| install_PKAM_Keys |cramAndPkamAuth successful for @policy1
virtualenv-1 | SHOUT|...| install_PKAM_Keys |cramAndPkamAuth successful for @emoji

The tests require test keys (CRAM keys and atKeys) which the virtual env was built with. The pom contains a plugin which downloads the at_demo_data package and unpacks it under target. When the tests run this is where they expect to find keys. The release version is specified as property in the POM and needs to be periodically updated to the latest release.

Note: The integration tests are designed to reset the virtual env as best as possible. This relies on teardown steps. If you are debugging tests and terminate the execution then this can leave the virtual env in an unreset state. Running the test again might fail because of this BUT that teardown should successfully reset the env and allow the next run to succeed. In extreme circumstances it may be necessary to reset the docker container, like this:

cd at_client/src/test/resources/org/atsign/virtualenv
docker compose -f down
docker compose -f up

Virtual Environment

This is a docker image that bundles the following:

  • redis
  • root server
  • multiple at_servers in different states of configuration

The docker image is published as part of the at_server repository.

The keys (CRAM secrets, pre-cut AtKeys) are part the at_demos repository.

The pom.xml for modules which run have integration tests include a plugin which downloads the at_demos package to target.

Code Style And Formatting

The maven poms contain the following plugins to enforce a consistent coding style and format.

The rules which configure the respective plugins are here

Run the following maven command run the checks:

mvn validate

Run the following maven command to fix the spotless violations:

mvn spotless:apply

Intellij

To configure Intellij to use the same settings

  1. Add the Adaptor for Eclipse Code Formatter plugin and configure in Settings -> Adaptor for Eclipse Code Formatter by setting Eclipse workspace/project folder or config file as config/java-format.xml
  2. Add CheckStyle-IDEA plugin and configure in Settings -> Tools -> Checkstyle by adding config/checkstyle.xml

Releases

This script can be used to prepare a release

bash ./release.sh

By default, it will create a release for the current snapshot version and increment the patch number for the next dev release. e.g if the current pom version is 1.2.3-SNAPSHOT, then the release version will be 1.2.3 and the next version will be 1.2.4-SNAPSHOT.

However, you can provide the release version and the next version explicitly.

This example illustrates overriding the release version with a specific version

bash ./release.sh 1.2.3

This overrides the release version to be the next minor version. e.g if the current pom version is 1.2.3-SNAPSHOT then the release version will be 1.3.0 and the next version will be 1.3.1-SNAPSHOT.

bash ./release.sh minor

This overrides the release version to be the next minor version. e.g if the current pom version is 1.2.3-SNAPSHOT then the release version will be 2.0.0 and the next version will be 2.0.1-SNAPSHOT.

bash ./release.sh major

The script will prepare the working branch as a release branch. This means it will make 2 commits.

  1. One which updates the pom versions to the release version
  2. And a subsequent commit that updates the pom version to the next version.

This branch should be pushed as for a PR. Once that is approved and merged a GitHUb release should be created with a corresponding release tag. The target for the tag should be the first commit.

The maven-deploy.yml workflow will be triggered by the tag. This will build and deploy to maven central.

The workflow release.yml can be triggered from the GitHub UI. This will automatically create a branch, run the release script and push the branch.

Contributions welcome

All of our software is open with intent. We welcome contributions - we want pull requests, and we want to hear about issues. See also CONTRIBUTING.md

About

Java libraries, tools, samples and examples for the atPlatform

Resources

Code of conduct

Contributing

Security policy

Stars

2 stars

Watchers

8 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

The Atsign FoundationThe Atsign Foundation

gitHub licenseOpenSSF ScorecardOpenSSF Best Practices

The Atsign Platform for Java developers

This repository contains libraries, tools, samples and examples for developers that wish to work with the Atsign Platform from Java code.

Modules

There are 4 modules.

  1. at_client is the Java SDK for interacting with the Atsign Platform README.
  2. at_shell is a self-contained "fatjar" that provides an interactive command line interface for performing various operations and tests README.
  3. at_utils contains useful code which is not part of the SDK README.
  4. examples contains sample code which illustrates how to use the SDK README.

Build Process

Prerequisites

  • Java (JDK 11 or above)
  • Maven (3.6.3 or above)

Check out, build and test with the following commands:

git clone https://github.com/atsign-foundation/at_java.git
mvn install

Note: The integration tests rely on the virtual env. The tests will attempt to start a docker container with this image but that relies on dockerd (or desktop docker). If you want to skip these tests then add -DskipITs. See subsequent section for more information.

Unit Tests

These have no external dependencies and are run as part of the maven test lifecycle. The surefire plugin will pick up classes that end in the following:

**/*Test.java
**/*Tests.java
**/*TestCase.java

Use -DskipTests to avoid running unit tests.

Integration Tests

These depend on running the atsign virtual environment and are run as part of the maven verify lifecycle. The failsafe plugin will pick up classes that end in the following:

**/*IT.java

Use -DskipITs to avoid running integration tests.

The integration tests check to see if a virtual env is running. If not they will attempt to start one. This requires dockerd or desktop docker to be running.

For CI, "standing up" and then "tearing down" the docker container is the intended behavior. However, for a developer this will be slow so it's preferable to "standup" the virtual env independently, like this:

cd at_client/src/test/resources/org/atsign/virtualenv
docker compose -f up

The start-up can take a few minutes and involves running scripts that install the test configuration. The environment is ready to test with when you see the following log output:

...
virtualenv-1 | SHOUT|...| install_PKAM_Keys |cramAndPkamAuth successful for @chris
virtualenv-1 | SHOUT|...| install_PKAM_Keys |cramAndPkamAuth successful for @policy1
virtualenv-1 | SHOUT|...| install_PKAM_Keys |cramAndPkamAuth successful for @emoji

The tests require test keys (CRAM keys and atKeys) which the virtual env was built with. The pom contains a plugin which downloads the at_demo_data package and unpacks it under target. When the tests run this is where they expect to find keys. The release version is specified as property in the POM and needs to be periodically updated to the latest release.

Note: The integration tests are designed to reset the virtual env as best as possible. This relies on teardown steps. If you are debugging tests and terminate the execution then this can leave the virtual env in an unreset state. Running the test again might fail because of this BUT that teardown should successfully reset the env and allow the next run to succeed. In extreme circumstances it may be necessary to reset the docker container, like this:

cd at_client/src/test/resources/org/atsign/virtualenv
docker compose -f down
docker compose -f up

Virtual Environment

This is a docker image that bundles the following:

  • redis
  • root server
  • multiple at_servers in different states of configuration

The docker image is published as part of the at_server repository.

The keys (CRAM secrets, pre-cut AtKeys) are part the at_demos repository.

The pom.xml for modules which run have integration tests include a plugin which downloads the at_demos package to target.

Code Style And Formatting

The maven poms contain the following plugins to enforce a consistent coding style and format.

The rules which configure the respective plugins are here

Run the following maven command run the checks:

mvn validate

Run the following maven command to fix the spotless violations:

mvn spotless:apply

Intellij

To configure Intellij to use the same settings

  1. Add the Adaptor for Eclipse Code Formatter plugin and configure in Settings -> Adaptor for Eclipse Code Formatter by setting Eclipse workspace/project folder or config file as config/java-format.xml
  2. Add CheckStyle-IDEA plugin and configure in Settings -> Tools -> Checkstyle by adding config/checkstyle.xml

Releases

This script can be used to prepare a release

bash ./release.sh

By default, it will create a release for the current snapshot version and increment the patch number for the next dev release. e.g if the current pom version is 1.2.3-SNAPSHOT, then the release version will be 1.2.3 and the next version will be 1.2.4-SNAPSHOT.

However, you can provide the release version and the next version explicitly.

This example illustrates overriding the release version with a specific version

bash ./release.sh 1.2.3

This overrides the release version to be the next minor version. e.g if the current pom version is 1.2.3-SNAPSHOT then the release version will be 1.3.0 and the next version will be 1.3.1-SNAPSHOT.

bash ./release.sh minor

This overrides the release version to be the next minor version. e.g if the current pom version is 1.2.3-SNAPSHOT then the release version will be 2.0.0 and the next version will be 2.0.1-SNAPSHOT.

bash ./release.sh major

The script will prepare the working branch as a release branch. This means it will make 2 commits.

  1. One which updates the pom versions to the release version
  2. And a subsequent commit that updates the pom version to the next version.

This branch should be pushed as for a PR. Once that is approved and merged a GitHUb release should be created with a corresponding release tag. The target for the tag should be the first commit.

The maven-deploy.yml workflow will be triggered by the tag. This will build and deploy to maven central.

The workflow release.yml can be triggered from the GitHub UI. This will automatically create a branch, run the release script and push the branch.

Contributions welcome

All of our software is open with intent. We welcome contributions - we want pull requests, and we want to hear about issues. See also CONTRIBUTING.md

About

Java libraries, tools, samples and examples for the atPlatform

Resources

Code of conduct

Contributing

Security policy

Stars

2 stars

Watchers

8 watching

Forks

Releases

Packages

Used by

Contributors

Languages