{"id":24524355,"url":"https://github.com/devonfw/dotnet","last_synced_at":"2025-09-04T06:36:45.206Z","repository":{"id":82567292,"uuid":"566710060","full_name":"devonfw/dotnet","owner":"devonfw","description":null,"archived":false,"fork":false,"pushed_at":"2022-11-17T05:43:18.000Z","size":38,"stargazers_count":0,"open_issues_count":0,"forks_count":1,"subscribers_count":13,"default_branch":"main","last_synced_at":"2025-04-21T09:55:26.687Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"JavaScript","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/devonfw.png","metadata":{"files":{"readme":"README.adoc","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2022-11-16T08:56:12.000Z","updated_at":"2022-11-17T05:43:22.000Z","dependencies_parsed_at":"2023-03-06T09:15:36.786Z","dependency_job_id":null,"html_url":"https://github.com/devonfw/dotnet","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/devonfw/dotnet","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/devonfw%2Fdotnet","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/devonfw%2Fdotnet/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/devonfw%2Fdotnet/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/devonfw%2Fdotnet/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/devonfw","download_url":"https://codeload.github.com/devonfw/dotnet/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/devonfw%2Fdotnet/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":273566949,"owners_count":25128630,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-09-04T02:00:08.968Z","response_time":61,"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":[],"created_at":"2025-01-22T04:19:30.998Z","updated_at":"2025-09-04T06:36:45.019Z","avatar_url":"https://github.com/devonfw.png","language":"JavaScript","readme":"= devonfw website\n\nThis is the .net part of the link:https://devonfw.com[devonfw website].\n\n== Local development of the website\n\nTo test changes locally, this part of the website can be built separately from the rest of the website.\n\n=== Install dependencies\n\nBefore anything else, the dependencies needs to be installed. This is a onetime job, until the package.json changes.\n```\nnpm install\n```\n\n=== Building the website\n\nThe website is based on link:https://antora.org/[antora].\nThe content of the website is written in asciidoc and needs to be converted to a html website.\nBuilding the website can be done via\n\n```shell\nnpm run build\n```\n\n=== Serve the content\n\nTo view the content it's easiest to run an http-server listening on the build result of the before mentioned build-command.\nStart the server in a separate window, because it's blocking the terminal.\n\n```shell\nnpm run dev:server\n```\n\nThis will start a server on port 5000. \nYou can now open the website on http://localhost:5000.\n\n=== Re-build website after changes\n\nAs long as the server is running a re-build using the build-command is enough to view the changes in your browser.\n\n=== Stop the server\n\nTo stop the server press `\u003cCTRL\u003e+C`.\n\n== Articles\n\nArticles should be written in a passive form not using \"we\", \"you\", ...\n\nThere're two kinds of articles:\n\n=== Good practice articles\n\nGood practice article propose certain good practices and real project experiences on using a selected technology.\n\nTo accomplish this, each article is a lists the individual key points that build the headlines, that explain the good practice and provide links on further readings, where the implementation is explained in detail. This is often the specification or official documentation page.\n\nKeep the description as small as possible and use bullet points whenever feasible.\n\n.Example from JPA article\n====\n=== BLOBs must not be stored in byte arrays\n\nByte array will cause problems if BLOBs get large because the entire BLOB is loaded into the RAM. Use the datatype link:https://docs.oracle.com/javase/7/docs/api/java/sql/Blob.html[Blob]. Stream the BLOB directly from the database to the user when the data is requested via an API.\n\n=== Do not mix granularity of temporal values\n\n* Always use link:https://jakarta.ee/specifications/persistence/3.1/apidocs/jakarta.persistence/jakarta/persistence/temporaltype[`TemporalType.TIMESTAMP`] with link:https://jakarta.ee/specifications/persistence/3.1/apidocs/jakarta.persistence/jakarta/persistence/temporal[`@Temporal`].\n* Mixing with other granularities causes problems when comparing one value to another.\n====\n\n\n=== Evaluation articles\n\nThe evaluation articles compare technologies, where there's no standardization possible and highlight the benefits and concerns of each technology. \n\nA final recommendation or rule of thumb at the end of the article helps the reader to get to a educated decision for a certain problem.\n\n== Examples\n\nShowing a concrete implementation explains certain circumstances better than a thousand words. \nTherefore devonfw provides lots of tiny examples that explain core concepts.\nThe examples are located in the `examples` folder. The structure underneath it should follow the structure of the website, so that examples belonging to articles can be easily found. \nArticles that have an example should link to the example on the website.\nThe link should always point to the root folder of the concrete example.\n\nEach example should:\n\n* Be a own project based on a supported framework\n* Have a README.adoc file that explains the example, what it should show and how to use (execute it)\n* Use Unit tests to show most of the test cases. \n* Be as small as possible. Only create classes and layers that are necessary to show the concrete case(s)\n* Consistent with devonfw. Coding Conventions, naming conventions, good practices that are described should all be applied on th written code. Therefore, keep is small!\n\nIf it is necessary to build and deploy the application itself or third party tools, then the example should also deliver:\n\n* Multistage Dockerfile (at least build and deploy)\n* Helm Charts\n* Kubernetes Yamls (if further necessary to helm)\n* link:http://task.dev[Taskfile] that combines the deploy commands\n\n== Asciidoc\n\n=== Tabs\n\nIt is possible to add tabs if there is different for different situations. Currently only Spring and Quarkus are separated this way. The tabs are added with:\n\n[source,asciidoc]\n----\n[tabs] \n==== \nSpring:: \n+ \n-- \n\n--\n\nQuarkus::\n+\n--\n\n--\n====\n----\n\n`Spring` and `Quarkus` are the titles of the tabs. The content of the tabs is added between the `--`. \n\nNOTE: To use `====` inside a tab e.g. for a note or warning, use `=====` instead of `====` for a nested block.\n\n=== Code Blocks and Callouts\n\nTo explain source code callouts can be used:\n\n[source,asciidoc]\n....\n[source, java]\n----\n@Entity\npublic class ChildEntity {\n   private ParentEntity father;\n\n   @ManyToOne //\u003c1\u003e\n   @JoinColumn(name=\"father\") //\u003c2\u003e\n   public ParentEntity getFather() {\n      return this.father;\n   }\n\n   public void setFather(ParentEntity father) {\n      this.father = father;\n   }\n}\n----\n\u003c1\u003e A child has exactly one (biological) father but many children can have the same father.\n\u003c2\u003e `father` is the name of the column with the foreign key.\n....\n\nMore information can be found link:https://docs.asciidoctor.org/asciidoc/latest/verbatim/callouts/[here].\n\n\n== Git and Github\n\n=== Issues\n\nIn Github issues are created and tracked to propose new changes and to track progress.\nIt was decided to create one issue per article page. \nInstead of  closing an issue after work is done (The usual flow) those issues keep track of the unresolved discussions, history and open points. \nIssues are only closed, when the article is removed or all questions are resolved. Issues might be reopened once new questions arise.\n\nEach article contains a comment in the first line referencing the issue.\n\n=== Branches\n\n* Only master and feature branches are used\n* feature branches should start with 'feature' and include the issue number and a speaking name. `feature/\u003cissue-number\u003e_\u003cspeaking name\u003e. For example `feature/16_exception_handling`\n\n=== Commits\n\n* Include the issue number into each commit\n* Write good commit messages. The rules mentioned link:https://cbea.ms/git-commit/[here] could help you on that.\n\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdevonfw%2Fdotnet","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fdevonfw%2Fdotnet","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdevonfw%2Fdotnet/lists"}