{"id":37034372,"url":"https://github.com/corgibytes/freshli-cli","last_synced_at":"2026-01-14T04:01:50.863Z","repository":{"id":37558099,"uuid":"299162738","full_name":"corgibytes/freshli-cli","owner":"corgibytes","description":"A tool for displaying historical metrics about a project's dependencies. Run the Freshli CLI on your project to see how its dependency freshness changes over time.","archived":false,"fork":false,"pushed_at":"2026-01-12T12:16:58.000Z","size":4537,"stargazers_count":9,"open_issues_count":157,"forks_count":5,"subscribers_count":4,"default_branch":"main","last_synced_at":"2026-01-12T19:38:23.708Z","etag":null,"topics":["dependencies","libyear","metrics","sbom-tool"],"latest_commit_sha":null,"homepage":"https://freshli.app","language":"C#","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"agpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/corgibytes.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","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,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2020-09-28T02:15:18.000Z","updated_at":"2024-10-14T08:06:38.000Z","dependencies_parsed_at":"2024-05-16T13:31:13.578Z","dependency_job_id":"39504aba-dffe-4495-a01e-61c48ddd6cbf","html_url":"https://github.com/corgibytes/freshli-cli","commit_stats":null,"previous_names":[],"tags_count":14,"template":false,"template_full_name":null,"purl":"pkg:github/corgibytes/freshli-cli","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/corgibytes%2Ffreshli-cli","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/corgibytes%2Ffreshli-cli/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/corgibytes%2Ffreshli-cli/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/corgibytes%2Ffreshli-cli/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/corgibytes","download_url":"https://codeload.github.com/corgibytes/freshli-cli/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/corgibytes%2Ffreshli-cli/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28408962,"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":["dependencies","libyear","metrics","sbom-tool"],"created_at":"2026-01-14T04:01:50.287Z","updated_at":"2026-01-14T04:01:50.853Z","avatar_url":"https://github.com/corgibytes.png","language":"C#","funding_links":[],"categories":[],"sub_categories":[],"readme":"![Freshli Logo](docs/logo-banner.png)\n\n# Freshli Command Line\n\n[![](https://img.shields.io/github/v/release/corgibytes/freshli-cli?label=Latest%20Release)](https://github.com/corgibytes/freshli-cli/releases/latest)\n[![](https://github.com/corgibytes/freshli-cli/actions/workflows/ci.yml/badge.svg)](https://github.com/corgibytes/freshli-cli/actions) [![Maintainability](https://api.codeclimate.com/v1/badges/53f738a69259b3940778/maintainability)](https://codeclimate.com/github/corgibytes/freshli-cli/maintainability) [![Test Coverage](https://api.codeclimate.com/v1/badges/53f738a69259b3940778/test_coverage)](https://codeclimate.com/github/corgibytes/freshli-cli/test_coverage)\n\nA tool for displaying historical metrics about a project's dependencies. Run the Freshli CLI on your project to see how its dependency freshness changes over time.\n\n## Installing and Running\n\n`freshli` is only distributed in binary form via a Docker container image. The Docker container image includes the `freshli-agent-java` executable. As new language agents are released, these will be added to the container image as well.\n\nIf you don’t want to use Docker, you’ll need to build from source and configure your environment appropriately.\n\n### Using Docker\n\nUse the `docker pull` command to retrieve the latest version of the container image.\n\n```bash\ndocker pull corgibytes/freshli-cli:latest\n```\n\nIt’s a good idea to run this command periodically to check for new versions.\n\nNext pass the `--version` option to check the version that’s been retrieved.\n\n```bash\ndocker run --rm corgibytes/freshli-cli --version\n```\n\n### `analyze` command\n\nThe `analyze` command is used to compute LibYear metrics from a local or remote Git repository. The LibYear metric is computed for every package found in every dependency manifest file for the entire history of the repository branch that is being analyzed.\n\nData is sent to the [Freshli app website](https://freshli.io) via API calls. You need to visit the link that’s provided in the `analyze` command’s output to view the results. There is no other supported way to access the collected data at this time.\n\n\u003e :exclamation: Warning\n\u003e\n\u003e The `analyze` command may take a long time to complete. For some projects, it may take well over an hour. How long it takes is dependent on several variables, such as the amount of history in the Git repository and the number of packages that are found at each point in time. The performance characteristics of the computer running the command is also a factor.\n\n\u003e :memo: Suggestion\n\u003e\n\u003e On Windows, you will see performance benefits if you exclude the cache directory (default `$HOME/.freshli`) from real-time security analysis by the malware engine that's built into Windows. You can do this by opening a PowerShell session as an administrator and running the following command:\n\u003e\n\u003e       Add-MpPreference -ExclusionPath $HOME/.freshli\n\u003e\n\u003e If you're working with this repository as a developer, then you'll also want to add an exclusion for the `./tmp` directory, which is used by the test suite.\n\n#### Analyzing a remote Git repository\n\nTo analyze a remote Git repository, provide a Git URL that can be used to clone the repository, such as `https://github.com/corgibytes/freshli-fixture-java-test`.\n\n```bash\ndocker run --rm corgibytes/freshli-cli analyze https://github.com/corgibytes/freshli-fixture-java-test\n```\n\nUnless a branch name is provided with the `--branch` option, the default branch will be used.\n\n#### Analyzing a local Git repository\n\nTo analyze a local Git repository, one that has already been cloned, provide a file system path to the location of the repository. The branch that is checked out is the one that will be analyzed.\n\n```bash\ngit clone https://github.com/corgibytes/freshli-fixture-java-test\ndocker run --rm corgibytes/freshli-cli analyze freshli-fixture-java-test\n```\n\n#### Adjusting the history interval\n\nBy default, the `analyze` command computes metrics at one month intervals. This value can be changed with the `--history-interval` option. Valid values are in the form of `\u003cnumber\u003e\u003cunit\u003e`, where `\u003cnumber\u003e` is a positive integer and `\u003cunit\u003e` is either `y` for years, `m` for months, `w` for weeks, or `d` for days.\n\nThe following command sets the history interval to 2 weeks.\n\n```bash\ndocker run --rm corgibytes/freshli-cli analyze --history-interval=2w https://github.com/corgibytes/freshli-fixture-java-test\n```\n\n#### Analyzing every commit\n\nIt is possible for some commits to get skipped depending on the history interval that is selected. Specifying the `--commit-history` option will instruct the `analyze` to compute metrics for every commit regardless of the history interval value.\n\nExample:\n\n```bash\ndocker run --rm corgibytes/freshli-cli analyze --commit-history https://github.com/corgibytes/freshli-fixture-java-test\n```\n\n#### Analyzing only the latest commit\n\nFor times when you would like to prevent the collection of historical metrics, use the `--latest-only` option.\n\nExample:\n\n```bash\ndocker run --rm corgibytes/freshli-cli analyze --latest-only https://github.com/corgibytes/freshli-fixture-java-test\n```\n\n#### Adjusting the number of workers\n\nThe `analyze` command, like many `freshli` commands, employs background workers to make full use of available CPU resources. You can use the `--workers` option to control the number of background workers that are used.\n\nExample:\n\n```bash\ndocker run --rm corgibytes/freshli-cli --workers=2 analyze https://github.com/corgibytes/freshli-fixture-java-test\n```\n\n### `agents detect` command\n\nThis command is used to determine the language agents that are available to `freshli`.\n\n```bash\ndocker run --rm corgibytes/freshli-cli agents detect\n```\n\n### `agents verify` command\n\nThis command is used to determine if the the language agents behave in the way that `Freshli` expects.\n\n```bash\ndocker run --rm corgibytes/freshli-cli agents verify\n```\n\n## Supported Dependency Managers\n\nThe `freshli` executable does not have built-in support for processing dependency manifest files. Language-specific agent programs, executables with names starting with `freshli-agent-`, provide the ability to process dependency manifests from different language ecosystems.\n\nHere is a list of language agents that have been developed so far and are included in the Docker container image mentioned above.\n\n| Language | Agent | Dependency Manager |\n|----------|-------|--------------------|\n| Java     | [`freshli-agent-java`](https://github.com/corgibytes/freshli-agent-java) | Maven |\n\nPlease let us know what other dependency managers and/or manifest files you would like use to support via the contact information in the [Contributing](#contributing) section.\n\n## Metrics\n\nThe `freshli analyze` command computes the [LibYear](https://libyear.com) metric.\n\n### Libyear\n\nThe libyear for a dependency is calculated by dividing the days between the current version and latest version by 365. Yes we know we shouldn't always use 365, we will fix it in a future release. For example, if the days between the current dependency and the latest is 42 days then the libyear is:\n\n```\n42 / 365 = 0.1151\n```\n\nSay you have 4 dependencies that are 128, 256, 512, and 1024 the libyear would be:\n\n```\n(128 / 365) + (256 / 365) + (512 / 365) + (1024 / 365) =\n0.3507 + 0.7014 + 1.4027 + 2.8055 =\n5.2603\n```\n\nThat means you dependencies are 5.3 libyears out of date or 5 libyears and 109.5 libdays.\n\nNote: The latest dependency is determined based on date the check is run. For example, if a dependency has the following release dates:\n\n```\nJan 1, 2019 (v1.0.0)\nJan 26, 2019 (v1.0.1)\nApr 3, 2019 (v1.1.0)\nSep 15, 2019 (v1.2.0)\nOct 31, 2019 (v1.2.1)\n```\n\nWhen checking the libyear on May 1, 2019 Freshli will use v1.1.0 (Apr 3rd, 2019) as the latest dependency. So if as of May 1, 2019 your project uses v1.1.0 your libyear is zero as v1.2.0 was not released until Sep. If on May 1st your project is using v1.0.0 then your libyear is days between Apr 3, 2019 and Jan 1, 2019 which is 93 days so you get a libyear of:\n\n```\n93 / 365 = 0.2548\n```\n\nIf you have v1.0.1 installed then your libyear when checking on May 1, 2019 is 68 days for a libyear of:\n\n```\n68 / 365 = 0.1863\n```\n\n## Culture and Language Support\n\nThe headings for column output are localized such that the culture settings of the user's computer are used. (This is found in the CurrentUICulture). Currently there are English and Spanish translations with English being the default.\n\nData (such as dates and numeric formatting) are NOT localized. Dates and numeric formats use the CurrentCulture which is explicitly set to the [invariant culture](https://docs.microsoft.com/en-us/dotnet/api/system.globalization.cultureinfo.invariantculture?view=net-6.0).\n\nWe are not sure how to handle documentation, such as this ReadMe, in different languages. If you have any suggestions or would like to help with translations please let us know using the contact information in the [Contributing](#contributing) section.\n\n## Logging\n\nBy default all logs are set to WARN level and sent to the console output.\n\nLog levels can be adjusted by using the `--logLevel \u003clevel\u003e` option when running the application. The level can be any level that is supported by NLog:\n\n-   Trace\n-   Debug\n-   Info\n-   Warn\n-   Error\n-   Fatal\n\nLogs can be redirected to a file instead by using the `--logfile \u003cfile_path_and_name\u003e` option when running the application.\n\n## Building\n\n\u003e :gear: Prerequisites\n\n* The scripts in the `bin/` directory require `ruby` version 3.1 or later to be [installed](https://www.ruby-lang.org/en/documentation/installation/).\n* Make sure you have the latest [.NET 7.0 SDK](https://dotnet.microsoft.com/en-us/download/dotnet/7.0) installed before attempting to run any of the commands below.\n\nThe project can be built using the `bin/build.rb` script.\n\nTo build manually, you first need to install the DotNet tools that are used by the project with:\n\n```bash\ndotnet tool restore\n```\n\nThen you can build the `freshli` executable and place it in the `exe` directory (where the acceptance tests expect it to be located) with:\n\n```bash\ndotnet build -o exe\n```\n\n## Linting\n\nWe use a few different automatted tools tools to help us keep the code in this repository in compliance with the Freshli project style guide.\n\nAll of the following linters (with the exception of `codeclimate`) can be run together by running the `bin/lint.rb` script. You can also run the `bin/format.rb` script if you want to instruct the linters to correct any issues that are found. (Note: not all of the linters provide an auto-correct mechanism.)\n\n### [eclint](https://gitlab.com/greut/eclint)\n\nThe `eclint` project helps us validate that the files in the project are formatted consistently with respect to the rules that have been defined in the `.editorconfig` file.\n\nAfter making sure the `eclint` executable's in your path, it can be run with:\n\n```bash\neclint\n```\n\n### [RuboCop](https://rubocop.org/)\n\nThe `rubocop` project help us validate that the Ruby code we're writing conforms with the [Ruby Style Guide](https://rubystyle.guide/) that it is based on.\n\nAfter running `bundle install`, the following will run `rubocop`:\n\n```bash\nbundle exec rubocop\n```\n\n### [`dotnet format`](https://docs.microsoft.com/en-us/dotnet/core/tools/dotnet-format)\n\nThe `dotnet format` command helps us make sure that our code is formatted consistent with the .NET/C# specific settings that are present in the `.editorconfig` file along with sets of [validation rules](https://docs.microsoft.com/en-us/visualstudio/code-quality/roslyn-analyzers-overview?view=vs-2022) that the project has been configured to use.\n\nTo determine if any style changes are needed, you can run:\n\n```bash\ndotnet format --verify-no-changes --severity info\n```\n\nTo instruct `dotnet format` to attempt to correct the issues that it has found, you can run:\n\n```bash\ndotnet format --severity info\n```\n\n### `dotnet jb`\n\n\u003e :exclamation: [Known Issue](https://youtrack.jetbrains.com/issue/RSRP-485906)\n\u003e\n\u003e If you encounter linter errors that persist despite being explicitly suppressed, try clearing the cache for JetBrains\n\u003e inspect code.\n\u003e On Windows the cache is located here `%LocalAppData%\\JetBrains\\Transient\\InspectCode\\v212\\SolutionCaches`\n\u003e On Linux and macOS the cache is located here `~/.local/share/JetBrains/Transient/InspectCode/v221/SolutionCaches`\n\n### `codeclimate`\n\nThere are two ways to run the `codeclimate` linter, by using the `codeclimate` CLI or by using `docker`. For both options, you'll need `docker` installed, because the `codeclimate` CLI is just a wrapper that makes it easy to run the `codeclimate` Docker image.\n\n1. Using the [`codeclimate` CLI](https://github.com/codeclimate/codeclimate)\n\n    Note: This option will not work if you're working with the DevContainer.\n\n    With the `codeclimate` CLI [in your path](https://github.com/codeclimate/codeclimate#installation), simply run the following to execute the CodeClimate analysis:\n\n    ```bash\n    codeclimate analyze\n    ```\n1. Using `docker`\n\n    Since `codeclimate` CLI is a wrapper around the `codeclimate` docker image the following command can be used to run the analysis:\n\n    ```bash\n    docker run \\\n        --interactive --tty --rm \\\n        --env CODECLIMATE_CODE=\"$PWD\" \\\n        --volume \"$PWD\":/code \\\n        --volume /var/run/docker.sock:/var/run/docker.sock \\\n        --volume /tmp/cc:/tmp/cc \\\n        codeclimate/codeclimate analyze\n    ```\n\n    The above command will need to be changed if you're attempting to run `codeclimate` from within the DevContainer. This is because `$PWD` in the command above will expand to be the path to the project source code as it is mounted in the container. The `docker` command needs the path to the source code on your host system.\n\n    To address this you'll need to start the DevContainer with an environment variable that contains the path to the source code on the host system. Here, we'll use `$CODE_FOLDER`.\n\n    Another thing that needs to be done is to mount the socket that's used for communicating with Docker on the host system.\n\n    ```bash\n    docker build -t freshli-cli-dev .devcontainer\n    docker run \\\n        --interactive --tty --rm \\\n        --env CODE_FOLDER=$PWD \\\n        --volume $PWD:/code \\\n        --volume /var/run/docker.sock:/var/run/docker.sock \\\n        --user vscode \\\n        --workdir /code \\\n        freshli-cli-dev bash\n    ```\n\n    And then from within that shell environment you can run `codeclimate` with:\n    ```bash\n    sudo docker run \\\n        --interactive --tty --rm \\\n        --env CODECLIMATE_CODE=\"$CODE_FOLDER\" \\\n        --volume \"$CODE_FOLDER\":/code \\\n        --volume /var/run/docker.sock:/var/run/docker.sock \\\n        --volume /tmp/cc:/tmp/cc \\\n        codeclimate/codeclimate analyze\n    ```\n\n    Also, note in the above command that we're using `sudo` to run the `docker` command. This is because of the permissions that are required to access the Docker socket from the host system.\n\n\n```bash\ndocker run \\\n    --interactive --tty --rm \\\n    --env CODECLIMATE_CODE=\"$CODE_FOLDER\" \\\n    --volume \"$CODE_FOLDER\":/code \\\n    --volume /var/run/docker.sock:/var/run/docker.sock \\\n    --volume /tmp/cc:/tmp/cc \\\n    codeclimate/codeclimate analyze\n```\n\n## Testing\n\nYou can run the unit, integration, and acceptance tests by running the `bin/test.rb` script.\n\n### Unit and Integration Tests\n\n#### Installing `freshli-agent-java` into the path\n\n\u003e :warning: Important Note\n\u003e\n\u003e Some of the integration tests require `freshli-agent-java` to be correctly installed in the path.\n\nYou'll need to have the [Eclipse Temurin](https://adoptium.net/temurin/) version of Java 17 installed before running the following commands.\nAnd you'll need [Maven](https://maven.apache.org/install.html) for some of the agent commands.\n\n```\ncd /tmp\ngit clone https://github.com/corgibytes/freshli-agent-java\ncd freshli-agent-java\n./gradlew installDist\nmkdir -p /usr/local/share/freshli-agent-java\ncp -r build/install/freshli-agent-java/* /usr/local/share/freshli-agent-java\nln -s /usr/local/share/freshli-agent-java/bin/freshli-agent-java /usr/local/bin/freshli-agent-java\ncd ~\nrm -rf /tmp/freshli-agent-java\n```\n\n#### Running the Unit and Integration Tests\n\nThe project's unit and integration tests can be run with:\n\n```bash\ndotnet test\n```\n\n### Acceptance Tests\n\nFreshli's acceptance test suite, built using Aruba and Cucumber, is pre-configured in the repository.\n\nYou will need Ruby installed on your system, and then run:\n\n```bash\ngem install bundler\nbundle\n```\n\nFrom then on, you can run the Aruba tests with:\n\n```bash\ndotnet build -o exe \u0026\u0026 bundle exec cucumber\n```\n\n### Collecting Code Coverage for the Acceptance Tests\n\nCode coverage data can be collected for the acceptance tests. This activity is performed by the project's continuous integration environment where the collected data is sent to CodeClimate for further tracking. You can also run the code coverage collection locally.\n\nFirst you'll need to make sure that the correct version of the [Coverlet code coverage tool](https://github.com/coverlet-coverage/coverlet) is installed:\n\n```bash\ndotnet tool restore\n```\n\n\u003e :orange_book: Take Note\n\u003e\n\u003e Make sure you run `bin/build.rb` before running any of the following commands.\n\n#### Collecting Coverage for the Entire Test Suite\n\nThe following command can be used to compute the total test coverage across the .NET-based unit and integration tests combined with the Cucumber-based acceptance tests.\n\n```bash\ndotnet coverlet --target \"./bin/test.rb\" --targetargs \"--skip-build\" ./exe\n```\n\n### Collecting Coverage for .NET-Based Test Suite\n\nThe following command will report the code coverage of the tests that are authored using the .NET-based testing tools.\n\n```bash\ndotnet coverlet --target \"dotnet\" --targetargs \"test exe/Corgibytes.Freshli.Cli.Test.dll\" ./exe\n```\n\n### Collecting Coverage for the Cucumber-based Acceptance Test Suite\n\nThe following command will list the code coverage for the Cucumber-based tests.\n\n```bash\ndotnet coverlet --target \"bundle\" --targetargs \"exec cucumber\" ./exe\n```\n## Working with the DevContainer\n\nThis project uses DevContainer to assist with creating a full configured development environment.\n\nThere are two paths to working with this DevContainer setup.\n\n1. [Install the `devcontainer` CLI](https://code.visualstudio.com/docs/remote/devcontainer-cli) and then run `devcontainer build` followed by `devcontainer open`. That will open Visual Studio Code running from inside of a container with everything needed to build the project.\n\n2. Run `docker` directly. Run `docker build -t freshli-cli-dev .devcontainer/` to build the container. Then you'll be able to run `docker run --rm -it -v $PWD:/code -w /code freshli-cli-dev bash` to create a shell session inside of a running container with everything set up for you. (Note, you may need to run `bundle install` when you first start the container to install the ruby-based dependencies. This step is performed for you if you use the `devcontainer` CLI to open a Visual Studio Code instance.)\n\n## Production Docker container\n\n### Building for local use\n\nA production-ready container can be created from the `Dockerfile` in this project by running:\n\n```bash\ndocker build -t freshli-cli .\n```\n\nYou can then run the container with:\n\n```bash\ndocker run --rm freshli-cli agents detect\n```\n\nYou should see output that looks similar to:\n\n```\n❯ docker run --rm freshli-cli agents detect\n+------------------+---------------------------------+\n|Agent file        |Agent path                       |\n+------------------+---------------------------------+\n|freshli-agent-java|/usr/local/bin/freshli-agent-java|\n+------------------+---------------------------------+\n```\n\n### Manually publishing to DockerHub\n\nDocker images are built and published to DockerHub by the CI process whenever a commit is added to the `main` or `release/*` branches (assuming that all of the tests have passed).\n\nFollow these instructions if you need to produce a build manually.\n\n1. Log into DockerHub\n\n   The account that you login with will need to have write permissions for the `corgibytes/freshli` project.\n\n   ```\n   docker login\n   ```\n\n2. Create a local buildx node\n\n   ```\n   docker buildx create --use\n   ```\n\n3. Build and publish\n\n   This will create images that can run on Intel/AMD 64-bit or ARM 64-bit processors.\n\n   You'll need to update the tag list with the specific tag list to include the specific tags that you want to publish.\n\n   ```\n   docker buildx build \\\n      --push \\\n      --platform linux/arm64/v8,linux/amd64 \\\n      --tag corgibytes/freshli-cli:latest \\\n      .\n   ```\n\n## Cache Database Migrations\n\nThis project uses C#'s Code First Migrations: https://docs.microsoft.com/en-us/ef/ef6/modeling/code-first/migrations/\nMigrations allow us to keep track of changes we make to models saved in a database, and it keeps our databases up-to-date.\n\n### Creating a new migration\n\nFrom the CLI:\n1. `dotnet ef migrations add [name]`\n\n### Running migrations\n\nBy default it'll update to the latest available migration.\n\nFrom the CLI:\n1. `dotnet ef database update`\n\n### Reverting migrations\n\nReverting a migration is done similarly as to updating the database though we are now specifying til what point in time we want to revert.\n\nFrom the CLI:\n1. `dotnet ef database update [specific migration name]`\n\n## Activities and Events\n\nSee the documentation for [Activities and Events](docs/activities-and-events.md), which includes a diagram showing the relationships between the current set of activities and events.\n\nThe diagram referenced above is generated as part of our continuous integration process. This ensures that it stays up-to-date as changes are made to the application.\n\n### Generating an Activity/Event diagram on demand\n\nTo update the contents of `docs/activities-and-events.md` with an updated diagram, you can simply run:\n\n```bash\nbin/generate-diagram.rb\n```\n\nIf you want just the raw diagram text, you can run:\n\n```bash\ndotnet run --project diagram-generator\n```\n\nThe text that is output can be pasted into [mermaid.live](https://mermaid.live) to see the rendered diagram.\n\n## Contributing\n\nIf you have any questions, notice a bug, or have a suggestion/enhancment please let us know by opening a [issue](https://github.com/corgibytes/freshli-cli/issues) or [pull request](https://github.com/corgibytes/freshli-cli/pulls).\n\nSee the [Contributing guide](CONTRIBUTING.md) guide for developer documentation.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcorgibytes%2Ffreshli-cli","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fcorgibytes%2Ffreshli-cli","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcorgibytes%2Ffreshli-cli/lists"}