{"id":37021913,"url":"https://github.com/bfg/eureka-dns-server","last_synced_at":"2026-01-14T02:36:32.053Z","repository":{"id":34207770,"uuid":"169064426","full_name":"bfg/eureka-dns-server","owner":"bfg","description":"Eureka DNS Server: RFC 1035/2782 compatible DNS server interface to Netflix Eureka service registry.","archived":false,"fork":false,"pushed_at":"2022-04-19T07:40:52.000Z","size":4931,"stargazers_count":17,"open_issues_count":2,"forks_count":8,"subscribers_count":3,"default_branch":"master","last_synced_at":"2024-11-16T17:39:56.573Z","etag":null,"topics":["dns","dns-server","eureka","eureka-client","eureka-server","eureka-service-discovery","java","netty","service-discovery"],"latest_commit_sha":null,"homepage":"","language":"Java","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/bfg.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":"CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2019-02-04T10:51:02.000Z","updated_at":"2024-10-18T15:10:36.000Z","dependencies_parsed_at":"2022-07-24T18:02:23.863Z","dependency_job_id":null,"html_url":"https://github.com/bfg/eureka-dns-server","commit_stats":null,"previous_names":[],"tags_count":4,"template":false,"template_full_name":null,"purl":"pkg:github/bfg/eureka-dns-server","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bfg%2Feureka-dns-server","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bfg%2Feureka-dns-server/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bfg%2Feureka-dns-server/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bfg%2Feureka-dns-server/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/bfg","download_url":"https://codeload.github.com/bfg/eureka-dns-server/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/bfg%2Feureka-dns-server/sbom","scorecard":{"id":235821,"data":{"date":"2025-08-11","repo":{"name":"github.com/bfg/eureka-dns-server","commit":"964fdbcabdaa95800c937889ee592a80169fc0be"},"scorecard":{"version":"v5.2.1-40-gf6ed084d","commit":"f6ed084d17c9236477efd66e5b258b9d4cc7b389"},"score":2.7,"checks":[{"name":"Dangerous-Workflow","score":-1,"reason":"no workflows found","details":null,"documentation":{"short":"Determines if the project's GitHub Action workflows avoid dangerous patterns.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#dangerous-workflow"}},{"name":"Packaging","score":-1,"reason":"packaging workflow not detected","details":["Warn: no GitHub/GitLab publishing workflow detected."],"documentation":{"short":"Determines if the project is published as a package that others can easily download, install, easily update, and uninstall.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#packaging"}},{"name":"Code-Review","score":0,"reason":"Found 0/10 approved changesets -- score normalized to 0","details":null,"documentation":{"short":"Determines if the project requires human code review before pull requests (aka merge requests) are merged.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#code-review"}},{"name":"Maintained","score":0,"reason":"0 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 0","details":null,"documentation":{"short":"Determines if the project is \"actively maintained\".","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#maintained"}},{"name":"Token-Permissions","score":-1,"reason":"No tokens found","details":null,"documentation":{"short":"Determines if the project's workflows follow the principle of least privilege.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#token-permissions"}},{"name":"Binary-Artifacts","score":9,"reason":"binaries present in source code","details":["Warn: binary detected: gradle/wrapper/gradle-wrapper.jar:1"],"documentation":{"short":"Determines if the project has generated executable (binary) artifacts in the source repository.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#binary-artifacts"}},{"name":"CII-Best-Practices","score":0,"reason":"no effort to earn an OpenSSF best practices badge detected","details":null,"documentation":{"short":"Determines if the project has an OpenSSF (formerly CII) Best Practices Badge.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#cii-best-practices"}},{"name":"Vulnerabilities","score":10,"reason":"0 existing vulnerabilities detected","details":null,"documentation":{"short":"Determines if the project has open, known unfixed vulnerabilities.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#vulnerabilities"}},{"name":"Security-Policy","score":0,"reason":"security policy file not detected","details":["Warn: no security policy file detected","Warn: no security file to analyze","Warn: no security file to analyze","Warn: no security file to analyze"],"documentation":{"short":"Determines if the project has published a security policy.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#security-policy"}},{"name":"Fuzzing","score":0,"reason":"project is not fuzzed","details":["Warn: no fuzzer integrations found"],"documentation":{"short":"Determines if the project uses fuzzing.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#fuzzing"}},{"name":"Pinned-Dependencies","score":0,"reason":"dependency not pinned by hash detected -- score normalized to 0","details":["Warn: containerImage not pinned by hash: eureka-dns-server-standalone/Dockerfile:8: pin your Docker image by updating azul/zulu-openjdk:17-jre to azul/zulu-openjdk:17-jre@sha256:16ba9d96229398c920dd6e6368de6e2b1ca0af4824fee6e7b1850f9214d4d86a","Info:   0 out of   1 containerImage dependencies pinned"],"documentation":{"short":"Determines if the project has declared and pinned the dependencies of its build process.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#pinned-dependencies"}},{"name":"License","score":10,"reason":"license file detected","details":["Info: project has a license file: LICENSE:0","Info: FSF or OSI recognized license: Apache License 2.0: LICENSE:0"],"documentation":{"short":"Determines if the project has defined a license.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#license"}},{"name":"Signed-Releases","score":-1,"reason":"no releases found","details":null,"documentation":{"short":"Determines if the project cryptographically signs release artifacts.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#signed-releases"}},{"name":"Branch-Protection","score":0,"reason":"branch protection not enabled on development/release branches","details":["Warn: branch protection not enabled for branch 'master'"],"documentation":{"short":"Determines if the default and release branches are protected with GitHub's branch protection settings.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#branch-protection"}},{"name":"SAST","score":0,"reason":"SAST tool is not run on all commits -- score normalized to 0","details":["Warn: 0 commits out of 25 are checked with a SAST tool"],"documentation":{"short":"Determines if the project uses static code analysis.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#sast"}}]},"last_synced_at":"2025-08-17T05:43:54.901Z","repository_id":34207770,"created_at":"2025-08-17T05:43:54.901Z","updated_at":"2025-08-17T05:43:54.901Z"},"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28408711,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-14T01:52:23.358Z","status":"online","status_checked_at":"2026-01-14T02:00:06.678Z","response_time":107,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["dns","dns-server","eureka","eureka-client","eureka-server","eureka-service-discovery","java","netty","service-discovery"],"created_at":"2026-01-14T02:36:31.368Z","updated_at":"2026-01-14T02:36:32.041Z","avatar_url":"https://github.com/bfg.png","language":"Java","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Eureka DNS server\n\n[![CircleCI](https://circleci.com/gh/bfg/eureka-dns-server.svg?style=svg)](https://circleci.com/gh/bfg/eureka-dns-server)\n[![codecov](https://codecov.io/gh/bfg/eureka-dns-server/branch/master/graph/badge.svg)](https://codecov.io/gh/bfg/eureka-dns-server)\n[![latest release](https://img.shields.io/nexus/r/https/oss.sonatype.org/com.github.bfg.eureka/eureka-dns-server.svg)](https://mvnrepository.com/artifact/com.github.bfg.eureka/eureka-dns-server)\n[![latest snapshot](https://img.shields.io/nexus/s/https/oss.sonatype.org/com.github.bfg.eureka/eureka-dns-server.svg)](https://oss.sonatype.org/content/groups/public/com/github/bfg/eureka/eureka-dns-server/)\n[![Javadocs](http://javadoc.io/badge/com.github.bfg.eureka/eureka-dns-server.svg?color=blue)](http://javadoc.io/doc/com.github.bfg.eureka/eureka-dns-server)\n\n`eureka-dns-server` is RFC1035/2782 compatible DNS server interface to [Netflix eureka](https://github.com/Netflix/eureka)\nservice registry which can be ran as a standalone daemon or embedded in any java application including eureka server \nitself.\n\nServices registered in eureka registry are being exposed as DNS names without need to contact eureka registry via it's \nREST interface, which can be a cumbersome task in languages without native `eureka-client` support (javascript, ruby, \npython). Accessing your service can be as easy as:\n\n```\ncurl http://my-service.service.eureka/\n```\n\n# IPv6 support\n\nServer supports automatic discovery of available IP addresses and will bind all of them by default, including IPv6 ones.\n`AAAA` records are being returned for service instances that are registered to eureka service registry with IPv6 address.\n\n# DNS interface\n\nDNS interface is minimal and all queries should be in the following form:\n\n* `\u003cname\u003e.service.\u003cdomain\u003e` for queries in default eureka region, where `name` is registered service name and `domain`\nis eureka dns server top level domain name\n* `\u003cname\u003e.service.\u003cregion\u003e.\u003cdomain\u003e` where `region` is some configured eureka region and where `default` is an alias for\ndefault eureka client configured region. \n\n### A/AAAA lookups\n\n```\n$ dig @localhost -p 8553  myapp.service.eureka \n\n;; QUESTION SECTION:\n;myapp.service.eureka.       IN      A\n\n;; ANSWER SECTION:\nmyapp.service.eureka. 5      IN      A       10.11.3.142\n```\n\nIPv6 records are being returned as well if there are services registered to eureka using IPv6 address:\n\n```\n$ dig @localhost -p 8553  myapp.service.eureka AAAA\n\n;; QUESTION SECTION:\n;myapp.service.eureka.       IN      AAAA\n\n;; ANSWER SECTION:\nmyapp.service.eureka. 5      IN      A       ::1\n```\n\n### TXT lookups\n\nAsking for service TXT record returns list of active urls for given service:\n\n```\n$ dig @localhost -p 8553  myapp.service.eureka TXT\n\n;; QUESTION SECTION:\n;myapp.service.eureka.       IN      TXT\n\n;; ANSWER SECTION:\nmyapp.service.eureka. 5      IN      TXT     \"http://10.11.3.142:32769/\"\n``` \n\n### SRV lookups\n\n#### normal SRV lookup\n\n```\n$ dig @localhost -p 8553  other-app.service.eureka SRV\n\n;; QUESTION SECTION:\n;other-app.service.eureka.      IN      SRV\n\n;; ANSWER SECTION:\nother-app.service.eureka. 5     IN      SRV     1 10 8080 ip-10-11-4-219.us-west-2.compute.internal.\nother-app.service.eureka. 5     IN      SRV     1 10 8080 v6-host.us-west-2.compute.internal.\n\n;; ADDITIONAL SECTION:\nip-10-11-4-219.us-west-2.compute.internal. 5 IN A 10.11.4.219\nv6-host.us-west-2.compute.internal.        5 IN A ::1\n```\n\n#### RFC2782 SRV lookup\n[RFC2782](https://www.ietf.org/rfc/rfc2782.txt) are supported as well:\n\n```\n$ dig @localhost -p 8553 _other-app._tcp.service.eureka SRV\n\n;; QUESTION SECTION:\n;_other-app._tcp.service.eureka.      IN      SRV\n\n;; ANSWER SECTION:\n_other-app._tcp.service.eureka. 5     IN      SRV     1 10 8080 ip-10-11-4-219.us-west-2.compute.internal.\n_other-app._tcp.service.eureka. 5     IN      SRV     1 10 8080 v6-host.us-west-2.compute.internal.\n\n;; ADDITIONAL SECTION:\nip-10-11-4-219.us-west-2.compute.internal. 5 IN A 10.11.4.219\nv6-host.us-west-2.compute.internal.        5 IN A ::1\n```\n\n## Limitations\n\nEureka dns server doesn't allow DNS lookups over TCP, therefore clients can easily hit infamous\n[DNS 512 byte payload size limit](https://tools.ietf.org/id/draft-madi-dnsop-udp4dns-00.html) or may receive truncated\nresponse without being aware of it. This should not be a problem if eureka-dns-server is just a delegate resolver\nfor a single domain for an existing DNS server (bind, unbound, dnsmasq), because these services speak EDNS0 and are\ncommonly able to process UDP packets with payload size up to 4096 bytes.\n\n# Usage\n\nTo use `eureka-dns-server`, you need at least java 8 runtime, java 11 works as well.\n\n### maven\n\n**release**\n```xml\n\u003cdependency\u003e\n    \u003cgroupId\u003ecom.github.bfg.eureka\u003c/groupId\u003e\n    \u003cartifactId\u003eeureka-dns-server\u003c/artifactId\u003e\n    \u003cversion\u003ex.y.z\u003c/version\u003e\n\u003c/dependency\u003e\n```\n\n**snapshot**\n\n```xml\n\u003crepositories\u003e\n  \u003crepository\u003e\n    \u003cid\u003esnapshots-repo\u003c/id\u003e\n    \u003curl\u003ehttps://oss.sonatype.org/content/repositories/snapshots\u003c/url\u003e\n    \u003creleases\u003e\u003cenabled\u003efalse\u003c/enabled\u003e\u003c/releases\u003e\n    \u003csnapshots\u003e\u003cenabled\u003etrue\u003c/enabled\u003e\u003c/snapshots\u003e\n  \u003c/repository\u003e\n\u003c/repositories\u003e\n\n\u003cdependencies\u003e\n  \u003cdependency\u003e\n    \u003cgroupId\u003ecom.github.bfg.eureka\u003c/groupId\u003e\n    \u003cartifactId\u003eeureka-dns-server\u003c/artifactId\u003e\n    \u003cversion\u003ex.y.z-SNAPSHOT\u003c/version\u003e\n  \u003c/dependency\u003e\n\u003c/dependencies\u003e\n```\n\n### gradle   \n\n**release**\n```gradle\ndependencies {\n  implementation  \"com.github.bfg.eureka:eureka-dns-server:x.y.z\"\n}\n```\n\n**snapshot**\n\n```gradle\nrepositories {\n  mavenLocal()\n  mavenCentral()\n  maven { url \"https://oss.sonatype.org/content/repositories/snapshots\" }\n}\n\ndependencies {\n  implementation  \"com.github.bfg.eureka:eureka-dns-server:x.y.z-SNAPSHOT\"\n}\n```\n\n# Running\n\nThis project is designed to be easy to run and embed to existing apps. It can be ran as a standalone daemon, as a \ndocker container or embedded as a completely standalone component in any java based application including eureka server\nitself. \n\n## Embedded in eureka server\n\nEureka dns server can run embedded in any [spring-cloud-netflix](https://spring.io/projects/spring-cloud-netflix) enabled\napplication by annotating application starter class with `@EnableEurekaDnsServer`. You can customize it's settings in\n`application.yml` file:\n\n```yaml\neureka:\n  dns:\n    server:\n      # dns server is disabled by default\n      enabled: true\n\n      # server listening port, default: 8553\n      port: 8553\n\n      # comma separated list of listening addresses, by default all bound listening addresses are used\n      # addresses: 127.0.0.1\n      \n      # top-level domain to use, default: eureka\n      domain: eureka\n\n      # DNS record TTL in seconds, default: 5\n      ttl: 5\n      \n      # maximum number of A/AAAA/SRV/TXT records to return in response to a DNS query, default: 5\n      max-responses: 5\n      \n      # maximum number of worker threads to use, default: 1\n      # set to 0 to automatically size eventloop according to number of available cpu cores.\n      max-threads: 1\n      \n      # prefer to use native (epoll/kqueue) backed netty event loop to achieve maximum performance, default: true\n      prefer-native-transport: false\n            \n      # log dns queries?\n      log-queries: true\n``` \n\n## Standalone daemon\n\n[eureka-dns-server-standalone](eureka-dns-server-standalone) subproject contains eureka-dns-server packaged as runnable \nuberjar with simple command line interface.\n\n```\nUsage: \u003cmain class\u003e [-hlV] [-c=\u003ceurekaPropertiesFile\u003e] [-p=\u003cport\u003e]\n                    [-t=\u003cthreads\u003e] [-e=\u003ceurekaUrls\u003e]...\n  -c, --config=\u003ceurekaPropertiesFile\u003e\n                            Path to eureka properties file.\n  -e, --eureka-url=\u003ceurekaUrls\u003e\n                            Comma separated list of eureka server URLs.\n  -p, --port=\u003cport\u003e         DNS server listening port.\n  -t, --threads=\u003cthreads\u003e   Number of working threads, set only if native transport\n                              is available; setting this number to 0 sets number of\n                              workers to number of available CPU cores.\n  -l, --log-queries         Log received queries.\n  -h, --help                Show this help message and exit.\n  -V, --version             Print version information and exit.\n```\n\n### Running as docker image\n\n[eureka-dns-server][docker image] is [standalone module] packaged as docker container; it's usage is exactly the same\nas standalone daemon, just don't forget to expose listening port:\n\n```\ndocker run -m 384m -it --rm -p 8553:8553/udp gracnar/eureka-dns-server -e http://eureka.example.com/eureka\n``` \n\n## Embedding in your application\n\nEmbedding this project in your application is straightforward:\n\n```java\nval server = EurekaDnsServer.builder()\n  .setPort(9553)\n  .setEurekaClient(eurekaClient)\n  .build();\n\nserver.start();\n```\n\nIf you want to achieve maximum performance you should [include netty native transport](https://netty.io/wiki/native-transports.html)\ndependencies to classpath.\n\n# DNS zone forwarding\n\nEureka DNS server is meant to be just a delegated resolver for a single domain; this means that you need to set up your\ncurrent DNS server in your network to delegate DNS queries for `.eureka` domain to eureka dns server. Please read\nexcellent [consul DNS zone forwarding guide](https://www.consul.io/docs/guides/forwarding.html) how to configure\ndifferent DNS servers.\n\n# Building\n\nTo build this project you need at least JDK 11 installed, but code is compiled to JDK8 bytecode. You also need `dig`\ninstalled because it's being used by integration tests.\n\n```bash\n./gradlew clean build\n```\n# Performance\n\nEureka DNS server is built on top of [netty](https://netty.io/) and is able to utilize epoll/kqueue based transports\nif they are available on classpath; [eureka dns server standalone][standalone module] submodule and \n[docker image] already include epoll dependencies by default which enable `SO_REUSEPORT` functionality\nleading to almost linear scaling across cpu cores.\n\nProject contains `scripts/performance-test.sh` script, which allows you to test actual performance of eureka dns server\non your setup (requires [dnsperf] installed).\n\nServer was started as docker container with host networking to reduce NAT overhead. Script was invoked like this: \n\n```\n./scripts/performance-test.sh {existing-a,existing-b,non-existing}.service.eureka\n```\n\nHere are figures on my laptop with i7-8550u CPU on linux:\n\n* 1 worker thread: `docker run -it --rm -m384m --network host gracnar/eureka-dns-server -e http://eureka.example.com/eureka`\n```\n[Status] Command line: dnsperf -s 127.0.0.1 -p 8553 -l 20 -c 100\n[Status] Sending queries (to 127.0.0.1)\n[Status] Started at: Mon Feb 25 02:14:23 2019\n[Status] Stopping after 20.000000 seconds\n[Status] Testing complete (time limit)\n\nStatistics:\n\n  Queries sent:         1484420u\n  Queries completed:    1484420u (100.00%)\n  Queries lost:         0u (0.00%)\n\n  Response codes:       NOERROR 990513u (66.73%), NXDOMAIN 493907u (33.27%)\n  Average packet size:  request 42, response 69\n  Run time (s):         20.001198\n  Queries per second:   74216.554428\n\n  Average Latency (s):  0.001285 (min 0.000030, max 0.017320)\n  Latency StdDev (s):   0.000369\n```\n* all available worker threads: `docker run -it --rm -m384m --network host gracnar/eureka-dns-server -e http://eureka.example.com/eureka -t 0`\n```\n[Status] Command line: dnsperf -s 127.0.0.1 -p 8553 -l 20 -c 100\n[Status] Sending queries (to 127.0.0.1)\n[Status] Started at: Wed Feb 27 00:52:33 2019\n[Status] Stopping after 20.000000 seconds\n[Status] Testing complete (time limit)\n\nStatistics:\n\n  Queries sent:         3578467u\n  Queries completed:    3578467u (100.00%)\n  Queries lost:         0u (0.00%)\n\n  Response codes:       NOERROR 2147785u (60.02%), NXDOMAIN 1430682u (39.98%)\n  Average packet size:  request 41, response 65\n  Run time (s):         20.000170\n  Queries per second:   178921.829164\n\n  Average Latency (s):  0.000157 (min 0.000013, max 0.068128)\n  Latency StdDev (s):   0.000571\n```\n\n# Releasing\n\nPublishing releases to maven central is a bit tricky; project needs to align with\n[maven central requirements](https://central.sonatype.org/pages/requirements.html). Docker image is published to\n[docker hub][docker image] automatically by [CI][CI].\n\n#### Create and publish PGP key\n```\ngpg --full-gen-key\n```\n* publish created *public* key to public key registry\n```\ngpg --send-key --keyserver pool.sks-keyservers.net \u003ckeyid\u003e\n```\n\n* setup ~/.gradle/gradle.properties\n```properties\n#\n# gradle.properties\n#\n\n# requires useGpgCmd() signing {} block\nsigning.gnupg.keyName=\u003ckeyid\u003e\n\n# vim:syntax=jproperties\n# EOF\n```\n\n#### Create release\n\n```\ngit checkout master\n./gradlew release\n```\n\n#### Publish release to maven central staging repository\n\n* checkout correct tag\n```\ngit checkout x.y.z\n```\n\n* build the project\n```\n./gradlew clean build\n```\n\n* publish release to Sonatype central staging\n\n```\n./gradlew publish\n```\n\n* follow [Sonatype OSSRH instructions](https://central.sonatype.org/pages/releasing-the-deployment.html) to release the\npublication\n\n[docker image]: https://cloud.docker.com/repository/docker/gracnar/eureka-dns-server/\n[standalone module]: eureka-dns-server-standalone\n[dnsperf]: https://github.com/DNS-OARC/dnsperf\n[CI]: https://circleci.com/gh/bfg/eureka-dns-server\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbfg%2Feureka-dns-server","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fbfg%2Feureka-dns-server","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fbfg%2Feureka-dns-server/lists"}