From ac700c1827afb197b6d393ca48c7b0605ea38f64 Mon Sep 17 00:00:00 2001 From: leanne Date: Tue, 31 Dec 2024 11:36:49 -0800 Subject: [PATCH] fixing broken links I found a some broken links in the documents, I found a fixed a bunch There are still some which are related to use moving some of our previously opensource recipe into private repositories. I'm uncertain how we want to address those --- .../configure-dx-organizations.md | 2 +- .../moderne-platform/faq.md | 2 +- .../agent-configuration/agent-config.md | 2 +- .../how-to-guides/dev-center.md | 8 +++--- .../how-to-guides/organizations-service.md | 4 +-- .../references/architecture.md | 2 +- .../moderne-platform/references/flow.md | 2 +- .../references/lossless-semantic-trees.md | 2 +- .../moderne-platform/references/user-roles.md | 2 +- .../community-office-hours.md | 26 +++++++++---------- .../moderne-cli/getting-started/cli-intro.md | 2 +- .../how-to-guides/air-gapped-cli-install.md | 2 +- .../how-to-guides/clone-and-sync.md | 4 +-- .../running-your-first-recipe.md | 2 +- .../references/create-scm-access-tokens.md | 2 +- 15 files changed, 32 insertions(+), 32 deletions(-) diff --git a/docs/administrator-documentation/moderne-dx/how-to-guides/configure-dx-organizations.md b/docs/administrator-documentation/moderne-dx/how-to-guides/configure-dx-organizations.md index e7bb789b..3563b847 100644 --- a/docs/administrator-documentation/moderne-dx/how-to-guides/configure-dx-organizations.md +++ b/docs/administrator-documentation/moderne-dx/how-to-guides/configure-dx-organizations.md @@ -53,7 +53,7 @@ A more feature rich replacement of the file based approach is to create an [Orga You have two main options for building this service. You can: 1. (**Recommended**) Fork our [Organizations service template](https://github.com/moderneinc/moderne-organizations) and modify it to meet your needs. Please see the [README](https://github.com/moderneinc/moderne-organizations/blob/main/README.md) for how to spin this up quickly. It can be as simple as updating a CSV file. -2. Build your own service that fulfills the [GraphQL contract](https://github.com/moderneinc/moderne-organizations/blob/main/src/main/resources/schema/moderne-organizations.graphqls) using any GraphQL stack (e.g., NodeJS, Rust, C#, etc.) +2. Build your own service that fulfills the [GraphQL contract](https://github.com/moderneinc/moderne-organizations/blob/main/src/main/resources/schema/organizations.graphqls) using any GraphQL stack (e.g., NodeJS, Rust, C#, etc.) We generally recommend forking the template and modifying it as, in most cases, that will be faster and easier than building it yourself. Regardless of which one you choose, however, some developer time will be required on your end. diff --git a/docs/administrator-documentation/moderne-platform/faq.md b/docs/administrator-documentation/moderne-platform/faq.md index 7477fcd1..5603cf89 100644 --- a/docs/administrator-documentation/moderne-platform/faq.md +++ b/docs/administrator-documentation/moderne-platform/faq.md @@ -20,4 +20,4 @@ By providing a list of every repository, even if they aren't ingested into the M If you need help configuring your Organizations service to return all repositories, please see our [reference implementation](https://github.com/moderneinc/moderne-organizations) which uses a [repos.csv](https://github.com/moderneinc/moderne-organizations/blob/main/src/main/resources/repos.csv) to expose all repositories – as well as [scripts that you can use to identify those repositories in your source control](https://github.com/moderneinc/repository-fetchers). -Of course, you're also welcome to build your own service that fulfills [the GraphQL contract we provide](https://github.com/moderneinc/moderne-organizations/blob/main/src/main/resources/schema/moderne-organizations.graphqls). \ No newline at end of file +Of course, you're also welcome to build your own service that fulfills [the GraphQL contract we provide](https://github.com/moderneinc/moderne-organizations/blob/main/src/main/resources/schema/organizations.graphqls). \ No newline at end of file diff --git a/docs/administrator-documentation/moderne-platform/how-to-guides/agent-configuration/agent-config.md b/docs/administrator-documentation/moderne-platform/how-to-guides/agent-configuration/agent-config.md index d73f7744..e2671f69 100644 --- a/docs/administrator-documentation/moderne-platform/how-to-guides/agent-configuration/agent-config.md +++ b/docs/administrator-documentation/moderne-platform/how-to-guides/agent-configuration/agent-config.md @@ -148,7 +148,7 @@ MODERNE_AGENT_ARTIFACTORY_0_ASTQUERYFILTERS_1='"repo":{"$eq":"example-maven"}' **Download the JAR:** -The download URL can be found on the [**Agent releases page**](../../../../releases/agent-releases#maven-download)**.** +The download URL can be found on the [**Agent releases page**](../../../../../releases/agent-releases#maven-download)**.** **How to run the agent:** diff --git a/docs/administrator-documentation/moderne-platform/how-to-guides/dev-center.md b/docs/administrator-documentation/moderne-platform/how-to-guides/dev-center.md index d8ad4d8f..6032c64b 100644 --- a/docs/administrator-documentation/moderne-platform/how-to-guides/dev-center.md +++ b/docs/administrator-documentation/moderne-platform/how-to-guides/dev-center.md @@ -15,7 +15,7 @@ In order to configure any DevCenters, there are two things you need to do (which If you are configuring an Organizations service for the first time, we **strongly** recommend that you use our [Organizations service template](https://github.com/moderneinc/moderne-organizations) and modify it to meet your needs. By doing so, you will only need to update some JSON files rather than writing your own code. -If you've chosen to create your own Organizations service without using our template, please ensure your service fulfills the [latest GraphQL schema](https://github.com/moderneinc/moderne-organizations/blob/main/src/main/resources/schema/moderne-organizations.graphqls). After doing so, please ensure you've [set up the Moderne agent with Maven configuration correctly](#moderne-agent-maven-configuration) and then [jump to the section of this doc about card types and what is necessary for each](#frameworks-and-migration-cards). +If you've chosen to create your own Organizations service without using our template, please ensure your service fulfills the [latest GraphQL schema](https://github.com/moderneinc/moderne-organizations/blob/main/src/main/resources/schema/organizations.graphqls). After doing so, please ensure you've [set up the Moderne agent with Maven configuration correctly](#moderne-agent-maven-configuration) and then [jump to the section of this doc about card types and what is necessary for each](#frameworks-and-migration-cards). ### Moderne agent Maven configuration @@ -42,7 +42,7 @@ If you've created an Organizations service after March 2024, please ensure that ## Step 2: Ensure you have an up-to-date `moderne-organizations.graphqls` schema -Similar to the previous step, please double-check your [moderne-organizations.graphqls file](https://github.com/moderneinc/moderne-organizations/blob/main/src/main/resources/schema/moderne-organizations.graphqls) and ensure that there is a `devCenter` field in the `Organization` object: +Similar to the previous step, please double-check your [moderne-organizations.graphqls file](https://github.com/moderneinc/moderne-organizations/blob/main/src/main/resources/schema/organizations.graphqls) and ensure that there is a `devCenter` field in the `Organization` object: ```graphql type Organization { @@ -60,11 +60,11 @@ type Organization { } ``` -The [DevCenter object](https://github.com/moderneinc/moderne-organizations/blob/main/src/main/resources/schema/moderne-organizations.graphqls#L50-L65) is the schema you need to follow in the below step to configure your DevCenter. +The [DevCenter object](https://github.com/moderneinc/moderne-organizations/blob/main/src/main/resources/schema/organizations.graphqls#L131-L150) is the schema you need to follow in the below step to configure your DevCenter. ## Step 3: Create and configure the DevCenter -Your service must fulfill the [GraphQL contract mentioned in the previous step](https://github.com/moderneinc/moderne-organizations/blob/main/src/main/resources/schema/moderne-organizations.graphqls). If you chose to use [our template repository](https://github.com/moderneinc/moderne-organizations) for your Organizations service, you will need to run `./gradlew generateGraphqlJava copyGeneratedGraphql` to [get the latest types](https://github.com/moderneinc/moderne-organizations/pull/61/files), and then you will need to configure your own [devcenter.json file](https://github.com/moderneinc/moderne-organizations/blob/main/src/main/resources/devcenter.json). +Your service must fulfill the [GraphQL contract mentioned in the previous step](https://github.com/moderneinc/moderne-organizations/blob/main/src/main/resources/schema/organizations.graphqls). If you chose to use [our template repository](https://github.com/moderneinc/moderne-organizations) for your Organizations service, you will need to run `./gradlew generateGraphqlJava copyGeneratedGraphql` to [get the latest types](https://github.com/moderneinc/moderne-organizations/pull/61/files), and then you will need to configure your own [devcenter.json file](https://github.com/moderneinc/moderne-organizations/blob/main/src/main/resources/devcenter.json). The `devcenter.json` file is where all of the configuration lies for DevCenters. In this file, you can configure things like which organizations should have a DevCenter, what cards should appear on said DevCenter, and what the keys should be on the cards. This file must follow the GraphQL schema mentioned above. diff --git a/docs/administrator-documentation/moderne-platform/how-to-guides/organizations-service.md b/docs/administrator-documentation/moderne-platform/how-to-guides/organizations-service.md index e8538a3d..74e369cc 100644 --- a/docs/administrator-documentation/moderne-platform/how-to-guides/organizations-service.md +++ b/docs/administrator-documentation/moderne-platform/how-to-guides/organizations-service.md @@ -8,7 +8,7 @@ Let's walk through everything you need to know to build and integrate such a ser In order to dynamically control the organizational structure in Moderne, you will need to: -1. Create and deploy an Organizations service that fulfills [this GraphQL contract](https://github.com/moderneinc/moderne-organizations/blob/main/src/main/resources/schema/moderne-organizations.graphqls) _in your environment_ +1. Create and deploy an Organizations service that fulfills [this GraphQL contract](https://github.com/moderneinc/moderne-organizations/blob/main/src/main/resources/schema/organizations.graphqls) _in your environment_ 2. [Configure your Moderne agent to point to this service](./agent-configuration/configure-organizations-service.md) ## Coding the Organizations service @@ -16,7 +16,7 @@ In order to dynamically control the organizational structure in Moderne, you wil You have two main options for building this service. You can: 1. (**Recommended**) Fork our [Organizations service template](https://github.com/moderneinc/moderne-organizations) and modify it to meet your needs. Please see the [README](https://github.com/moderneinc/moderne-organizations/blob/main/README.md) for how to spin this up quickly. It can be as simple as updating a JSON file that you get from the Moderne Platform. -2. Build your own service that fulfills the [GraphQL contract](https://github.com/moderneinc/moderne-organizations/blob/main/src/main/resources/schema/moderne-organizations.graphqls) using any GraphQL stack (e.g., NodeJS, Rust, C#, etc.) +2. Build your own service that fulfills the [GraphQL contract](https://github.com/moderneinc/moderne-organizations/blob/main/src/main/resources/schema/organizations.graphqls) using any GraphQL stack (e.g., NodeJS, Rust, C#, etc.) We generally recommend forking the template and modifying it as, in most cases, that will be faster and easier than building it yourself. Regardless of which one you choose, however, some developer time will be required on your end. diff --git a/docs/administrator-documentation/moderne-platform/references/architecture.md b/docs/administrator-documentation/moderne-platform/references/architecture.md index 0810818f..2f0f62df 100644 --- a/docs/administrator-documentation/moderne-platform/references/architecture.md +++ b/docs/administrator-documentation/moderne-platform/references/architecture.md @@ -51,7 +51,7 @@ Your team may also wish to configure the agent to: * Connect to your team's [Organizations service](../how-to-guides/organizations-service.md) so that the UI can provide a customized experience for some users or repositories :::info -You can find all of the documentation for configuring agents in your environment [here](https://docs.moderne.io/how-to/on-premise-agent). +You can find all of the documentation for configuring agents in your environment [here](../how-to-guides/agent-configuration/agent-config.md). ::: **Setup requirements** diff --git a/docs/administrator-documentation/moderne-platform/references/flow.md b/docs/administrator-documentation/moderne-platform/references/flow.md index 26877841..9410a4ba 100644 --- a/docs/administrator-documentation/moderne-platform/references/flow.md +++ b/docs/administrator-documentation/moderne-platform/references/flow.md @@ -70,7 +70,7 @@ When a user tries to sign into the Moderne SaaS, Moderne uses OIDC or SAML to au Moderne users can authorize the creation of an OAuth token for Moderne to use via a standard OAuth web application flow (such as in this [GitHub example](https://docs.github.com/en/apps/oauth-apps/building-oauth-apps/authorizing-oauth-apps#web-application-flow)). As part of this process, a user may be required to authenticate with the SCM first if they don't have an active session. Please note that the redirect part of the OAuth process goes from a developer's workstation to the SCM directly. If your SCM is self-hosted, that request does not go outside of your environment. -In order to set up this OAuth process, an OAuth client for Moderne needs to be created. The homepage URL and callback URL should both be [https://TENANT.moderne.io](https://tenant.moderne.io). Furthermore, the client id and client secret need to be provided to the Moderne SaaS. For instructions on how to configure this, please see our [configuring the Moderne agent docs](../how-to-guides/agent-configuration/agent-config.md). +In order to set up this OAuth process, an OAuth client for Moderne needs to be created. The homepage URL and callback URL should both be `https://TENANT.moderne.io`. Furthermore, the client id and client secret need to be provided to the Moderne SaaS. For instructions on how to configure this, please see our [configuring the Moderne agent docs](../how-to-guides/agent-configuration/agent-config.md). All of the user interactions that result in authorization decisions within GitHub, Bitbucket, and GitLab (such as viewing diffs, committing, and making PRs) come to these SCMs through the agent on behalf of the user. From GitHub, Bitbucket, or GitLab’s perspective, all interactions appear to come from the user at the agent's location. Therefore, the Moderne SaaS doesn’t require any changes to how GitHub, Bitbucket, or GitLab is used internally. diff --git a/docs/administrator-documentation/moderne-platform/references/lossless-semantic-trees.md b/docs/administrator-documentation/moderne-platform/references/lossless-semantic-trees.md index 653b32cc..713d28d0 100644 --- a/docs/administrator-documentation/moderne-platform/references/lossless-semantic-trees.md +++ b/docs/administrator-documentation/moderne-platform/references/lossless-semantic-trees.md @@ -48,7 +48,7 @@ If you want to see specific examples of Java LSTs, please read our [Java LST Exa 1. Before you can run a recipe against a repository in the Moderne Platform, you must build the LST for said repository. This is typically done by [setting up mass ingestion with the Moderne CLI](../how-to-guides/mass-ingest.md). 2. When you go to run a recipe, the LST artifact will be downloaded from your artifact repository. These LSTs are continuously uploaded/updated over time as long as you've set up ingestion for your repositories. 3. As the recipe runs, it will make transformations on the downloaded LST. This could be as simple as adding a search marker (`~~>`) if the recipe is a search recipe -- or it could be as complex as adding classes and methods throughout the repository. -4. Once the recipe has finished running, the **modified LST will be discarded** and the code **will not** be changed. Instead, you will be [provided with a list of the changes it would make](../../../user-documentation/moderne-platform/getting-started/running-your-first-recipe#step-6-run-the-recipe). You can [review them](../../../../user-documentation/moderne-platform/getting-started/running-your-first-recipe#step-7-view-the-results) and [choose what to do with them](../../../user-documentation/moderne-platform/getting-started/running-your-first-recipe#step-8-commit-your-changes). +4. Once the recipe has finished running, the **modified LST will be discarded** and the code **will not** be changed. Instead, you will be [provided with a list of the changes it would make](../../../../user-documentation/moderne-platform/getting-started/running-your-first-recipe#step-6-run-the-recipe). You can [review them](../../../../user-documentation/moderne-platform/getting-started/running-your-first-recipe#step-7-view-the-results) and [choose what to do with them](../../../../user-documentation/moderne-platform/getting-started/running-your-first-recipe#step-8-commit-your-changes). 5. Regardless of what you choose to do with the results, future recipe runs **will not** have those changes unless you commit them and the Moderne CLI ingestion job runs again to publish the LSTs to your artifact repository. :::info diff --git a/docs/administrator-documentation/moderne-platform/references/user-roles.md b/docs/administrator-documentation/moderne-platform/references/user-roles.md index 78eb3b1d..0dc4469c 100644 --- a/docs/administrator-documentation/moderne-platform/references/user-roles.md +++ b/docs/administrator-documentation/moderne-platform/references/user-roles.md @@ -27,7 +27,7 @@ Organization access is determined via an [Organizations service](../how-to-guide ## SCM access -In order to view recipe results, download data tables produced by a recipe, or commit recipe results, users will need to have [SCM access to the repositories](./flow#integrating-with-scms). This restriction applies even for admins in Moderne. +In order to view recipe results, download data tables produced by a recipe, or commit recipe results, users will need to have [SCM access to the repositories](../flow#integrating-with-scms). This restriction applies even for admins in Moderne. [^1]: If a user does not have access to a specific repository, they will not see a row for said repository in the data table. diff --git a/docs/user-documentation/community-office-hours.md b/docs/user-documentation/community-office-hours.md index ef7baeae..35d94531 100644 --- a/docs/user-documentation/community-office-hours.md +++ b/docs/user-documentation/community-office-hours.md @@ -450,7 +450,7 @@ Coming soon! * We started off by explaining how this feature came about. A company that uses our product wanted to switch access providers and they wanted to find everywhere that they were making a call with a particular header. They saw we had a [Find method usages recipe](https://app.moderne.io/recipes/org.openrewrite.java.search.FindMethods) - which does a great job at finding methods if you know _exactly_ where they come from and how they're defined. Unfortunately, they didn't know all of the libraries or methods that needed to be changed to plug in to this recipe. They wanted to be able to ask, "Where in my code base am I dealing with HTTP headers?" or "Where in my code base am I doing user authentication?" * This led in to the next recipe - [Finding method invocations that resemble a pattern](https://app.moderne.io/recipes/io.moderne.ai.research.FindCodeThatResembles). This uses AI to process a natural language query to find methods. We then walked through all of the details you need to know about this recipe. For more information on this, check out our [docs discussing how to use this recipe](/user-documentation/moderne-platform/how-to-guides/how-to-find-method-invocations-based-on-a-pattern.md). * To help explain how the AI stuff works, Justine created a diagram of what's actually happening when the recipe runs. - * To understand the diagram and what Justine is talking about, you may want to check out our [documentation on Scanning Recipes](https://docs.openrewrite.org/concepts-and-explanations/recipes#scanning-recipes) or our [documentation on embeddings](../user-documentation/moderne-platform/how-to-guides/how-to-gain-a-high-level-overview-of-your-codebase-using-clustering#embeddings). + * To understand the diagram and what Justine is talking about, you may want to check out our [documentation on Scanning Recipes](https://docs.openrewrite.org/concepts-and-explanations/recipes#scanning-recipes) or our [documentation on embeddings](../../../user-documentation/moderne-platform/how-to-guides/how-to-gain-a-high-level-overview-of-your-codebase-using-clustering#embeddings). * You can also find the diagram and a detailed explanation of it in our [blog post about AI code search at scale](https://www.moderne.ai/blog/ai-code-search-at-scale-finding-method-invocations-with-natural-language) * After a detailed explanation, we then jumped over to looking at what the results of the recipe run looked like. * We then dove into how you might [use those results to create or run recipes that are more focused and accurate](../user-documentation/moderne-platform/how-to-guides/how-to-find-method-invocations-based-on-a-pattern.md#gain-insight-from-the-results). @@ -626,7 +626,7 @@ Coming soon! * We then discussed another very common change – updating dependencies. As part of this, we'd recommend using the [Dependency insight for Gradle and Maven recipe](https://app.moderne.io/recipes/org.openrewrite.java.dependencies.DependencyInsight). Using it, you can see whether a particular dependency is in use or not throughout all of your repositories. Going even further, you can [generate a dependency usage visualization](../user-documentation/moderne-platform/how-to-guides/track-migrations.md#viewing-the-visualization) – which is a violin chart that shows what versions exist across everything in one central location. * This can be especially beneficial in security situations where you need to quickly know whether or not your repositories are vulnerable or not to a particular CVE. * If you do want to go ahead with upgrading versions of a particular dependency, you may find the [Upgrade Gradle or Maven dependency versions recipe](https://app.moderne.io/recipes/org.openrewrite.java.dependencies.UpgradeDependencyVersion) to be useful. - * After that, we quickly touched on a variety of topics such tracking Maven dependencies, [using data tables](../user-documentation/moderne-platform/getting-started/data-tables.md), [the Moderne DevCenter](../user-documentation/moderne-platform/getting-started/dev-center.md), [seeing what recipes have data tables](https://docs.openrewrite.org/reference/recipes-with-data-tables), etc. + * After that, we quickly touched on a variety of topics such tracking Maven dependencies, [using data tables](../../../user-documentation/moderne-platform/getting-started/data-tables), [the Moderne DevCenter](../user-documentation/moderne-platform/getting-started/dev-center.md), [seeing what recipes have data tables](https://docs.openrewrite.org/reference/recipes-with-data-tables), etc. * Towards the end of our talk, we brought up that you can run all of these recipes locally using the [Moderne Plugin for JetBrains IDEs](../user-documentation/moderne-ide-integration/how-to-guides/moderne-plugin-install.md). * [Remember that you can get this for free for a limited time](https://www.moderne.io/moderne-ide-plugin-signup). @@ -786,7 +786,7 @@ Coming soon! * **Content**: * [We released a new video about recruiting and retaining top tech talent](https://www.youtube.com/watch?v=D_2HT2n_3PM). * [Tim's session from Spring I/O is also available to watch](https://www.youtube.com/watch?v=KlQZH6WHa2c) - * [The workshop that Tim gave on creating recipes is also available in our docs](../user-documentation/workshops/recipe-authoring). + * [The workshop that Tim gave on creating recipes is also available in our docs](../../../user-documentation/workshops/recipe-authoring). * [We then began our main discussion for the week – recipe authoring best practices](https://youtu.be/6_w6gx7GPII?t=492) * [We've created a detailed doc about recipe conventions and best practices that covers a lot of the points being discussed in this session](https://docs.openrewrite.org/authoring-recipes/recipe-conventions-and-best-practices). * Sam began by talking about a common mistake people make when first creating recipes – [not making them idempotent and immutable](https://docs.openrewrite.org/authoring-recipes/recipe-conventions-and-best-practices#recipes-must-be-idempotent-and-immutable). What this means is that if a recipe is given the same LST and configuration, it should _always_ produce the same result. To go along with that, a recipe's behaviour _should not_ be influenced by LSTs which have been visited previously. @@ -837,7 +837,7 @@ Coming soon! * Sam found an example in the [Netflix/mantis repository](https://github.com/Netflix/mantis) so he cloned that and built it locally * To go along with this, [Sam demonstrated how to add the OpenRewrite build plugins to a project](https://youtu.be/lNLo6i7SVGI?t=2215) so that you can use them to debug a recipe. * [He then walked through setting up a debugger in IntelliJ IDEA and adding breakpoints that you can start from](https://youtu.be/lNLo6i7SVGI?t=2545). - * While the project was building, Sam mentioned that one of the downsides of using the OpenRewrite plugins instead of the CLI is that the plugins have to parse all the code every time rather than serializing the code to disk so it can be re-used. For more information about this, check out [our summary of the differences between the two](../user-documentation/moderne-cli/getting-started/cli-intro#differences-between-the-moderne-cli-and-the-openrewrite-build-plugins). + * While the project was building, Sam mentioned that one of the downsides of using the OpenRewrite plugins instead of the CLI is that the plugins have to parse all the code every time rather than serializing the code to disk so it can be re-used. For more information about this, check out [our summary of the differences between the two](../../user-documentation/moderne-cli/getting-started/cli-intro#differences-between-the-moderne-cli-and-the-openrewrite-build-plugins). * Next up was [utilizing the debugger to look into what is happening](https://youtu.be/lNLo6i7SVGI?t=2930). * Sam demonstrated how to use the cursor to figure out where you are when you're debugging a recipe. * We ran out of time towards the end, but [Sam briefly described the steps needed to use the Moderne CLI to debug a recipe](https://youtu.be/lNLo6i7SVGI?t=3328). @@ -851,7 +851,7 @@ Coming soon! * [Announcements for the week](https://youtu.be/egf5Q3fb6W0?t=30) * **Events**: - * Tim will be at [Spring I/O in Barcelona from May 30th - 31st](https://2024.springio.net/sessions/automated-software-refactoring-with-openrewrite-and-generative-ai/). He'll be giving a talk and an interactive workshop there. If you want to check out the workshop for yourself ahead of time, you can find it [in our docs right now](../user-documentation/workshops/recipe-authoring). + * Tim will be at [Spring I/O in Barcelona from May 30th - 31st](https://2024.springio.net/sessions/automated-software-refactoring-with-openrewrite-and-generative-ai/). He'll be giving a talk and an interactive workshop there. If you want to check out the workshop for yourself ahead of time, you can find it [in our docs right now](../../../user-documentation/workshops/recipe-authoring). * Tim also will be at [JNation.pt on June 5th to give a workshop on recipe authorship](https://jnation.pt/workshops/) * Sam will be [hosting a No-fluff-just-stuff webinar on the fundamental of migration engineering on Friday, May 31st](https://nofluffjuststuff.com/webinar/116/migration_engineering_w_openrewrite). * **Content**: @@ -897,7 +897,7 @@ Coming soon! * **Cool milestone**: * There are now over 2,500 recipes available in the Moderne Platform! 🎉 * **Events**: - * Tim will be at [Spring I/O in Barcelona from May 30th - 31st](https://2024.springio.net/sessions/automated-software-refactoring-with-openrewrite-and-generative-ai/). He'll be giving a talk and an interactive workshop there. If you want to check out the workshop for yourself ahead of time, you can find it [in our docs right now](../user-documentation/workshops/recipe-authoring). + * Tim will be at [Spring I/O in Barcelona from May 30th - 31st](https://2024.springio.net/sessions/automated-software-refactoring-with-openrewrite-and-generative-ai/). He'll be giving a talk and an interactive workshop there. If you want to check out the workshop for yourself ahead of time, you can find it [in our docs right now](../../../user-documentation/workshops/recipe-authoring). * **Content**: * We recently released a video about [how to fix security vulnerabilities across your entire codebase quickly with Moderne](https://www.youtube.com/watch?v=g97-2br6pug) * **Releases**: @@ -995,7 +995,7 @@ Coming soon! * **Releases**: * Shout out to [Ryan Hudson](https://github.com/ryan-hudson) who [added support for data tables to the rewrite-maven-plugin](https://github.com/openrewrite/rewrite-maven-plugin/pull/751). * Please feel free to jump in and add similar support to the [rewrite-gradle-plugin](https://github.com/openrewrite/rewrite-gradle-plugin). - * If you want to learn more about data tables, check out our [getting started with data tables doc](../user-documentation/moderne-platform/getting-started/data-tables) that shows how useful they can be at scale with Moderne. + * If you want to learn more about data tables, check out our [getting started with data tables doc](../../../user-documentation/moderne-platform/getting-started/data-tables) that shows how useful they can be at scale with Moderne. * **Events**: * Tim will be at [JCON Europe from May 13th - 16th](https://jconeurope2024.sched.com/). He will be giving a talk on [Transforming Code with OpenRewrite and Refaster](https://jconeurope2024.sched.com/event/1Z2tI/transforming-code-with-openrewrite-and-refaster) and [Weeding your Micro Service Landscape](https://jconeurope2024.sched.com/event/1YwSG/weeding-your-micro-service-landscape). He has a limited amount of free tickets to give away if you'd like to attend and are going to be in Germany at that time. Please reach out to him to learn more. * We'll be at [Spring I/O in Barcelona from May 30th - 31st](https://2024.springio.net/sessions/automated-software-refactoring-with-openrewrite-and-generative-ai/). @@ -1013,7 +1013,7 @@ Coming soon! * ![AssertJ best practices recipe](./assets/assertj-recipes.png) * ![AssertJ best practices sub-recipes](./assets/assertj-sub-recipes.png) * On a related note, [here is an example PR where Tim applied some JUnit5 best practices to an open-source project that got accepted and eventually led to discussions about migrating to AssertJ5](https://github.com/apache/shiro/pull/1338#issuecomment-1974747390). - * We then dove into [how to get started with running recipes](../user-documentation/moderne-platform/getting-started/running-your-first-recipe) and [creating your own user organization in Moderne](../user-documentation/moderne-platform/how-to-guides/managing-user-configured-organizations). + * We then dove into [how to get started with running recipes](../../../user-documentation/moderne-platform/getting-started/running-your-first-recipe) and [creating your own user organization in Moderne](../../../user-documentation/moderne-platform/how-to-guides/managing-user-configured-organizations). * We then ran the AssertJ best practices recipe against the shrio repository to demonstrate what it does and how effective it is. In \~1 minute, the recipe made nearly 100 changes, and it estimates that saved someone 8 _hours_ of work. You can imagine that this would be even more effective if run across hundreds or thousands of repos at a time. * Once the recipe finished, we created a fork with all of the changes (which is how we'd recommend proceeding if you are contributing to a project you don't own). We demonstrated that the project still compiles with all of the changes and discussed some of the issues you may run into - such as a recipe note automating _everything_ (if it doesn't, please consider contributing to the recipe to improve them - as [we saw someone do this past week](https://github.com/openrewrite/rewrite-apache/pull/16)). * After that, we took a look at the [Apache Maven Dev Center](https://app.moderne.io/devcenter/Apache%20Maven) and talked through how you can create dashboards like this to track key upgrades or migrations your organization needs to make. In the Maven case, you can see that 75% of their projects are still on Java 8. For each of these issues, a recipe is provided for how to fix the issue – such as a [migrate to Java 21 recipe](https://app.moderne.io/recipes/org.openrewrite.java.migrate.UpgradeToJava21). @@ -1069,7 +1069,7 @@ Coming soon! * **If someone wanted to get started with OpenRewrite, what would you recommend?** * Start by coming at OpenRewrite with a problem that you want to solve, so you have some context. Then, join the [OpenRewrite community Slack](https://join.slack.com/t/rewriteoss/shared_invite/zt-nj42n3ea-b\~62rIHzb3Vo0E1APKCXEA) and ask questions in there. He'd also recommend looking at [RewriteTest](https://github.com/openrewrite/rewrite/blob/4c9a9709399f722b8bd421fe94633c2b2e9de6e5/rewrite-test/src/main/java/org/openrewrite/test/RewriteTest.java#L52) and [rewriteRun](https://github.com/openrewrite/rewrite/blob/4c9a9709399f722b8bd421fe94633c2b2e9de6e5/rewrite-test/src/main/java/org/openrewrite/test/RewriteTest.java#L139) to get a better idea of the flow of recipes. * (We'd also recommend checking out [our documentation](https://docs.openrewrite.org/) where we've created numerous tutorials and references to help people get started. If you run into any issues or wish for something to exist that doesn't, please [let us know](https://github.com/openrewrite/rewrite-docs/issues)!) - * **Could you tell us about the challenges with using feature flags that motivated you to make contributions to** [**LaunchDarkly recipes**](https://docs.openrewrite.org/recipes/launchdarkly)**?** + * **Could you tell us about the challenges with using feature flags that motivated you to make contributions to** [**LaunchDarkly recipes**](https://docs.openrewrite.org/recipes/featureflags/launchdarkly)**?** * At big enterprise companies, it can be very hard to keep up with the open source community as it moves so fast. Feature flags may get added and then forgotten about. Having recipes to find and remove these has been super helpful. * **Are you using LaunchDarkly recipes to get rid of feature flags at Shelter?** * Yes. It's much nicer to use recipes than manually doing it across systems. @@ -1250,9 +1250,9 @@ Coming soon! * We then jumped into the main topic for the week: data tables and search recipes: * We demonstrated how you can use [search recipes in Moderne](https://app.moderne.io/marketplace/org.openrewrite.java.search) to [find usages of any type you care about](https://app.moderne.io/recipes/org.openrewrite.java.search.FindTypes) (perhaps because you wanted to learn more about it or find some examples to copy). * We explained how [Markers](https://docs.openrewrite.org/concepts-and-explanations/markers) help call out individual elements and how they work in relation to search recipes. - * We ran and talked through our [Find and fix vulnerable dependencies recipe](https://app.moderne.io/recipes/org.openrewrite.java.dependencies.DependencyVulnerabilityCheck). We also walked through the [data table](../user-documentation/moderne-platform/getting-started/data-tables) it produced. + * We ran and talked through our [Find and fix vulnerable dependencies recipe](https://app.moderne.io/recipes/org.openrewrite.java.dependencies.DependencyVulnerabilityCheck). We also walked through the [data table](../../../user-documentation/moderne-platform/getting-started/data-tables) it produced. * Using said data table, you can find transitive dependency vulnerabilities many levels deep – complete with CVE numbers and possible fix versions if they're available. - * We then showed how you can [produce your own class hierarchy and data table rows](../user-documentation/moderne-platform/getting-started/data-tables) as well as how to [verify the rows you produced](https://github.com/moderneinc/rewrite-recipe-starter/blob/main/src/test/java/com/yourorg/ClassHierarchyTest.java#L36-L37). + * We then showed how you can [produce your own class hierarchy and data table rows](../../../user-documentation/moderne-platform/getting-started/data-tables) as well as how to [verify the rows you produced](https://github.com/moderneinc/rewrite-recipe-starter/blob/main/src/test/java/com/yourorg/ClassHierarchyTest.java#L36-L37). ### Advanced recipe development: Scanning recipes (Feb 21, 2024) @@ -1266,7 +1266,7 @@ Coming soon! * You can find [the curated list of Codemods in the Moderne Platform](https://app.moderne.io/marketplace/org.openrewrite.codemods). * We recently [added a bunch of Error Prone recipes to the Moderne Platform](https://app.moderne.io/marketplace/tech.picnic.errorprone.refasterrules). * There were some great community additions such [as this new recipe on migrating away from Swagger to SpringDoc or OpenAPI](https://app.moderne.io/recipes/org.openrewrite.java.springdoc.SwaggerToSpringDoc). - * We added [the ability to bump transitive dependencies in Gradle](../user-documentation/moderne-platform/how-to-guides/transitive-dependencies). + * We added [the ability to bump transitive dependencies in Gradle](../../../user-documentation/moderne-platform/how-to-guides/transitive-dependencies). * We [updated our Spring 3.2 blog](https://www.moderne.io/blog/speed-your-spring-boot-3-0-migration) to contain the latest Spring changes and also discuss Java 21 changes. * We then jumped into the core topic of [Scanning Recipes](https://docs.openrewrite.org/concepts-and-explanations/recipes#scanning-recipes). We walked through every part of developing a Scanning Recipe along with examples and tests. @@ -1320,5 +1320,5 @@ Coming soon! * If you want to make your own Refaster recipe, check out our [Getting started with Refaster template recipes doc](https://docs.openrewrite.org/authoring-recipes/refaster-recipes). * There was a community question about how to can contribute to OpenRewrite. To get started with that, check out our [contributing doc](https://github.com/openrewrite/.github/blob/main/CONTRIBUTING.md) where we walk through all the different ways you can help – many of which don't even involve writing code. * We walked through how to use Moderne to combine recipes like [ChangeType](https://app.moderne.io/recipes/org.openrewrite.java.ChangeType) and [Add Gradle or Maven dependency](https://app.moderne.io/recipes/org.openrewrite.java.dependencies.AddDependency) into a larger migration recipe. -* We explained what [Preconditions are and how to use them](../user-documentation/moderne-platform/how-to-guides/preconditions). +* We explained what [Preconditions are and how to use them](../../../user-documentation/moderne-platform/how-to-guides/preconditions). * You might also consider checking out the [OpenRewrite docs on Preconditions](https://docs.openrewrite.org/reference/yaml-format-reference#preconditions). diff --git a/docs/user-documentation/moderne-cli/getting-started/cli-intro.md b/docs/user-documentation/moderne-cli/getting-started/cli-intro.md index 5161e953..d761891d 100644 --- a/docs/user-documentation/moderne-cli/getting-started/cli-intro.md +++ b/docs/user-documentation/moderne-cli/getting-started/cli-intro.md @@ -228,7 +228,7 @@ Netflix apache aws awslabs clone.log -4. Now that you have the repositories on your local machine, you'll need to build the [Lossless Semantic Trees](https://docs.moderne.io/concepts/lossless-semantic-trees) (LSTs) for them so that you can run recipes against them. Fortunately, since most of these repositories have their LSTs published to the Moderne Platform, the build operation will download the LSTs without you having to build them locally. This will save you a ton of time! +4. Now that you have the repositories on your local machine, you'll need to build the [Lossless Semantic Trees](../../../administrator-documentation/moderne-platform/references/lossless-semantic-trees.md) (LSTs) for them so that you can run recipes against them. Fortunately, since most of these repositories have their LSTs published to the Moderne Platform, the build operation will download the LSTs without you having to build them locally. This will save you a ton of time! :::info By default, the CLI is able to build LSTs for well-formed projects (i.e. projects that build well with a plain `mvn verify` or `gradle build`). At times, however, you may encounter a project that fails to build. This could be because of a hidden dependency on certain tooling, like NPM, or because specific dependencies or repositories are not available without additional configuration. diff --git a/docs/user-documentation/moderne-cli/how-to-guides/air-gapped-cli-install.md b/docs/user-documentation/moderne-cli/how-to-guides/air-gapped-cli-install.md index 6faaf5ad..4c06d8da 100644 --- a/docs/user-documentation/moderne-cli/how-to-guides/air-gapped-cli-install.md +++ b/docs/user-documentation/moderne-cli/how-to-guides/air-gapped-cli-install.md @@ -104,7 +104,7 @@ In order to run recipes, you'll need to ensure the CLI is configured with a lice mod config license edit ``` -_For more information on the Moderne CLI license, please see our [license documentation](../getting-started/moderne-cli-license)_ +_For more information on the Moderne CLI license, please see our [license documentation](../../getting-started/moderne-cli-license)_ ### Step 4: Configure the CLI to point to your internal artifact repository diff --git a/docs/user-documentation/moderne-cli/how-to-guides/clone-and-sync.md b/docs/user-documentation/moderne-cli/how-to-guides/clone-and-sync.md index 31158a89..8197c307 100644 --- a/docs/user-documentation/moderne-cli/how-to-guides/clone-and-sync.md +++ b/docs/user-documentation/moderne-cli/how-to-guides/clone-and-sync.md @@ -53,8 +53,8 @@ If you've performed a metadata only clone and then decided you actually needed t If you want to change what the `mod git clone moderne` command does, you can do so by passing in one or more of the following options: -* `--filter` : This is equivalent to the `git clone --filter` option. [Read more](https://git-scm.com/docs/git-clone/en#Documentation/git-clone.txt-code--filtercodeemltfilter-specgtem). -* `--depth` : This is the equivalent to the `git clone --depth` option. [Read more](https://git-scm.com/docs/git-clone/en#Documentation/git-clone.txt-code--depthcodeemltdepthgtem). +* `--filter` : This is equivalent to the `git clone --filter` option. [Read more](https://git-scm.com/docs/git-clone#Documentation/git-clone.txt-code--filtercodeemltfilter-specgtem). +* `--depth` : This is the equivalent to the `git clone --depth` option. [Read more](https://git-scm.com/docs/git-clone#Documentation/git-clone.txt-code--depthcodeemltdepthgtem). * `--single-branch` : Only clone the branch Moderne knows for this repository. * `--limit` : Only clone the first "n" repositories. We'd recommend _not_ using this unless you're debugging something. * `--metadata` or `--metadata-only` : Make a [metadata only clone of the repositories](#metadata-only-clone). diff --git a/docs/user-documentation/moderne-platform/getting-started/running-your-first-recipe.md b/docs/user-documentation/moderne-platform/getting-started/running-your-first-recipe.md index 1bde9c23..da6aa284 100644 --- a/docs/user-documentation/moderne-platform/getting-started/running-your-first-recipe.md +++ b/docs/user-documentation/moderne-platform/getting-started/running-your-first-recipe.md @@ -130,7 +130,7 @@ This will open a prompt that allows you to select different actions such as comm From this prompt, you can customize either the _Branch Name_ or the _Commit Message_ to match the contributing guidelines of a particular repository. :::info -You will need to have [specific permissions](https://docs.moderne.io/references/github-permissions) depending on the commit strategy you decide to go with. +You will need to have [specific permissions](../../../administrator-documentation/moderne-platform/references/github-permissions.md) depending on the commit strategy you decide to go with. ::: ## Step 9: 🎉 Profit diff --git a/docs/user-documentation/moderne-platform/references/create-scm-access-tokens.md b/docs/user-documentation/moderne-platform/references/create-scm-access-tokens.md index be393287..c0b8fcce 100644 --- a/docs/user-documentation/moderne-platform/references/create-scm-access-tokens.md +++ b/docs/user-documentation/moderne-platform/references/create-scm-access-tokens.md @@ -12,5 +12,5 @@ For more information on creating Personal Access Tokens, please see: * [GitHub - Creating a personal access token](https://docs.github.com/en/authentication/keeping-your-account-and-data-secure/creating-a-personal-access-token) * [GitLab - Personal access tokens](https://docs.gitlab.com/ee/user/profile/personal_access_tokens.html) -* [Bitbucket Cloud - Generating App Password / Personal Access Token](https://support.blubracket.com/hc/en-us/articles/4404687343124-How-to-Generate-an-App-Password-or-Personal-Access-Token-PAT-in-Bitbucket) +* [Bitbucket Cloud - Generating App Password / Personal Access Token](https://confluence.atlassian.com/bamboo/personal-access-tokens-976779873.html) * [Bitbucket Data Center and Server - HTTP access tokens](https://confluence.atlassian.com/bitbucketserver/http-access-tokens-939515499.html)