diff --git a/.editorconfig b/.editorconfig index 1148e2a81..8be070d53 100644 --- a/.editorconfig +++ b/.editorconfig @@ -90,11 +90,13 @@ dotnet_style_object_initializer = true:suggestion dotnet_style_prefer_collection_expression = true:suggestion [*.cs] +# ref: https://learn.microsoft.com/en-us/dotnet/fundamentals/code-analysis/style-rules/csharp-formatting-options + csharp_indent_labels = one_less_than_current csharp_using_directive_placement = outside_namespace:warning csharp_prefer_simple_using_statement = true:suggestion csharp_prefer_static_local_function = true:suggestion -csharp_prefer_braces = true:suggestion + csharp_style_namespace_declarations = file_scoped:suggestion csharp_style_prefer_method_group_conversion = true:silent csharp_style_prefer_top_level_statements = true:silent @@ -117,6 +119,22 @@ csharp_style_prefer_not_pattern = true:suggestion csharp_style_prefer_extended_property_pattern = true:suggestion csharp_style_inlined_variable_declaration = true:suggestion +# braces +csharp_prefer_braces = true:suggestion + +csharp_new_line_before_open_brace = methods, properties, control_blocks, types +csharp_new_line_before_else = true +csharp_new_line_before_catch = true +csharp_new_line_before_finally = true +csharp_new_line_before_members_in_object_initializers = false +csharp_new_line_before_members_in_anonymous_types = false +csharp_new_line_between_query_expression_clauses = false + +# braces overrides +csharp_type_declaration_braces = next_line +csharp_empty_block_style = together_same_line + +# diagnostic analyzers dotnet_diagnostic.CA1303.severity = none dotnet_diagnostic.CS1591.severity = silent dotnet_diagnostic.IDE0058.severity = none diff --git a/.gitattributes b/.gitattributes index 1ff0c4230..462913965 100644 --- a/.gitattributes +++ b/.gitattributes @@ -1,63 +1,2 @@ -############################################################################### -# Set default behavior to automatically normalize line endings. -############################################################################### -* text=auto - -############################################################################### -# Set default behavior for command prompt diff. -# -# This is need for earlier builds of msysgit that does not have it on by -# default for csharp files. -# Note: This is only used by command line -############################################################################### -#*.cs diff=csharp - -############################################################################### -# Set the merge driver for project and solution files -# -# Merging from the command prompt will add diff markers to the files if there -# are conflicts (Merging from VS is not affected by the settings below, in VS -# the diff markers are never inserted). Diff markers may cause the following -# file extensions to fail to load in VS. An alternative would be to treat -# these files as binary and thus will always conflict and require user -# intervention with every merge. To do so, just uncomment the entries below -############################################################################### -#*.sln merge=binary -#*.csproj merge=binary -#*.vbproj merge=binary -#*.vcxproj merge=binary -#*.vcproj merge=binary -#*.dbproj merge=binary -#*.fsproj merge=binary -#*.lsproj merge=binary -#*.wixproj merge=binary -#*.modelproj merge=binary -#*.sqlproj merge=binary -#*.wwaproj merge=binary - -############################################################################### -# behavior for image files -# -# image files are treated as binary by default. -############################################################################### -#*.jpg binary -#*.png binary -#*.gif binary - -############################################################################### -# diff behavior for common document formats -# -# Convert binary document formats to text before diffing them. This feature -# is only available from the command line. Turn it on by uncommenting the -# entries below. -############################################################################### -#*.doc diff=astextplain -#*.DOC diff=astextplain -#*.docx diff=astextplain -#*.DOCX diff=astextplain -#*.dot diff=astextplain -#*.DOT diff=astextplain -#*.pdf diff=astextplain -#*.PDF diff=astextplain -#*.rtf diff=astextplain -#*.RTF diff=astextplain +# Normalize line endings. +* text=lf diff --git a/.github/CODE_OF_CONDUCT.md b/.github/CODE_OF_CONDUCT.md index 0984012cf..dedf08548 100644 --- a/.github/CODE_OF_CONDUCT.md +++ b/.github/CODE_OF_CONDUCT.md @@ -2,76 +2,125 @@ ## Our Pledge -We as members, contributors, and leaders pledge to make participation in our community a harassment-free experience for everyone, regardless of age, body size, visible or invisible disability, ethnicity, sex characteristics, gender identity and expression, level of experience, education, socio-economic status, nationality, personal appearance, race, religion, or sexual identity and orientation. +We as members, contributors, and leaders pledge to make participation in our +community a harassment-free experience for everyone, regardless of age, body +size, visible or invisible disability, ethnicity, sex characteristics, gender +identity and expression, level of experience, education, socio-economic status, +nationality, personal appearance, race, religion, or sexual identity +and orientation. -We pledge to act and interact in ways that contribute to an open, welcoming, diverse, inclusive, and healthy community. +We pledge to act and interact in ways that contribute to an open, welcoming, +diverse, inclusive, and healthy community. ## Our Standards -Examples of behavior that contributes to a positive environment for our community include: +Examples of behavior that contributes to a positive environment for our +community include: -- Demonstrating empathy and kindness toward other people -- Being respectful of differing opinions, viewpoints, and experiences -- Giving and gracefully accepting constructive feedback -- Accepting responsibility and apologizing to those affected by our mistakes, and learning from the experience -- Focusing on what is best not just for us as individuals, but for the overall community +* Demonstrating empathy and kindness toward other people +* Being respectful of differing opinions, viewpoints, and experiences +* Giving and gracefully accepting constructive feedback +* Accepting responsibility and apologizing to those affected by our mistakes, + and learning from the experience +* Focusing on what is best not just for us as individuals, but for the + overall community Examples of unacceptable behavior include: -- The use of sexualized language or imagery, and sexual attention or advances of any kind -- Trolling, insulting or derogatory comments, and personal or political attacks -- Public or private harassment -- Publishing others' private information, such as a physical or email address, without their explicit permission -- Other conduct which could reasonably be considered inappropriate in a professional setting +* The use of sexualized language or imagery, and sexual attention or + advances of any kind +* Trolling, insulting or derogatory comments, and personal or political attacks +* Public or private harassment +* Publishing others' private information, such as a physical or email + address, without their explicit permission +* Other conduct which could reasonably be considered inappropriate in a + professional setting ## Enforcement Responsibilities -Community leaders are responsible for clarifying and enforcing our standards of acceptable behavior and will take appropriate and fair corrective action in response to any behavior that they deem inappropriate, threatening, offensive, or harmful. +Community leaders are responsible for clarifying and enforcing our standards of +acceptable behavior and will take appropriate and fair corrective action in +response to any behavior that they deem inappropriate, threatening, offensive, +or harmful. -Community leaders have the right and responsibility to remove, edit, or reject comments, commits, code, wiki edits, issues, and other contributions that are not aligned to this Code of Conduct, and will communicate reasons for moderation decisions when appropriate. +Community leaders have the right and responsibility to remove, edit, or reject +comments, commits, code, wiki edits, issues, and other contributions that are +not aligned to this Code of Conduct, and will communicate reasons for moderation +decisions when appropriate. ## Scope -This Code of Conduct applies within all community spaces, and also applies when an individual is officially representing the community in public spaces. Examples of representing our community include using an official e-mail address, posting via an official social media account, or acting as an appointed representative at an online or offline event. +This Code of Conduct applies within all community spaces, and also applies when +an individual is officially representing the community in public spaces. +Examples of representing our community include using an official e-mail address, +posting via an official social media account, or acting as an appointed +representative at an online or offline event. ## Enforcement -Instances of abusive, harassing, or otherwise unacceptable behavior may be reported to the community leaders responsible for enforcement at our [NuGet page](https://www.nuget.org/packages/Skender.Stock.Indicators) (use Contact Owners feature). All complaints will be reviewed and investigated promptly and fairly. +Instances of abusive, harassing, or otherwise unacceptable behavior may be +reported to the community leaders responsible for enforcement at +[support@facioquo.com](mailto:support@facioquo.com). +All complaints will be reviewed and investigated promptly and fairly. -All community leaders are obligated to respect the privacy and security of the reporter of any incident. +All community leaders are obligated to respect the privacy and security of the +reporter of any incident. ## Enforcement Guidelines -Community leaders will follow these Community Impact Guidelines in determining the consequences for any action they deem in violation of this Code of Conduct: +Community leaders will follow these Community Impact Guidelines in determining +the consequences for any action they deem in violation of this Code of Conduct: ### 1. Correction -**Community Impact**: Use of inappropriate language or other behavior deemed unprofessional or unwelcome in the community. +**Community Impact**: Use of inappropriate language or other behavior deemed +unprofessional or unwelcome in the community. -**Consequence**: A private, written warning from community leaders, providing clarity around the nature of the violation and an explanation of why the behavior was inappropriate. A public apology may be requested. +**Consequence**: A private, written warning from community leaders, providing +clarity around the nature of the violation and an explanation of why the +behavior was inappropriate. A public apology may be requested. ### 2. Warning -**Community Impact**: A violation through a single incident or series of actions. +**Community Impact**: A violation through a single incident or series +of actions. -**Consequence**: A warning with consequences for continued behavior. No interaction with the people involved, including unsolicited interaction with those enforcing the Code of Conduct, for a specified period of time. This includes avoiding interactions in community spaces as well as external channels like social media. Violating these terms may lead to a temporary or permanent ban. +**Consequence**: A warning with consequences for continued behavior. No +interaction with the people involved, including unsolicited interaction with +those enforcing the Code of Conduct, for a specified period of time. This +includes avoiding interactions in community spaces as well as external channels +like social media. Violating these terms may lead to a temporary or +permanent ban. ### 3. Temporary Ban -**Community Impact**: A serious violation of community standards, including sustained inappropriate behavior. +**Community Impact**: A serious violation of community standards, including +sustained inappropriate behavior. -**Consequence**: A temporary ban from any sort of interaction or public communication with the community for a specified period of time. No public or private interaction with the people involved, including unsolicited interaction with those enforcing the Code of Conduct, is allowed during this period. Violating these terms may lead to a permanent ban. +**Consequence**: A temporary ban from any sort of interaction or public +communication with the community for a specified period of time. No public or +private interaction with the people involved, including unsolicited interaction +with those enforcing the Code of Conduct, is allowed during this period. +Violating these terms may lead to a permanent ban. ### 4. Permanent Ban -**Community Impact**: Demonstrating a pattern of violation of community standards, including sustained inappropriate behavior, harassment of an individual, or aggression toward or disparagement of classes of individuals. +**Community Impact**: Demonstrating a pattern of violation of community +standards, including sustained inappropriate behavior, harassment of an +individual, or aggression toward or disparagement of classes of individuals. -**Consequence**: A permanent ban from any sort of public interaction within the community. +**Consequence**: A permanent ban from any sort of public interaction within +the community. ## Attribution -This Code of Conduct is adapted from the [Contributor Covenant](https://www.contributor-covenant.org), version 2.0, available at [contributor-covenant.org](https://www.contributor-covenant.org/version/2/0/code_of_conduct.html). +This Code of Conduct is adapted from the community +[Contributor Covenant version 2.0](https://www.contributor-covenant.org/version/2/0/code_of_conduct.html). -Community Impact Guidelines were inspired by [Mozilla's code of conduct enforcement ladder](https://github.com/mozilla/diversity). +Community Impact Guidelines were inspired by +[Mozilla's code of conduct enforcement ladder](https://github.com/mozilla/diversity). -For answers to common questions about this code of conduct, [read the FAQ](https://www.contributor-covenant.org/faq) and [available translations](https://www.contributor-covenant.org/translations). +For answers to common questions about this code of conduct, see the FAQ at +[contributor-covenant.org/faq](https://www.contributor-covenant.org/faq). +Translations are available at +[contributor-covenant.org/translations](https://www.contributor-covenant.org/translations). diff --git a/.github/ISSUE_TEMPLATE/bug_report.md b/.github/ISSUE_TEMPLATE/bug_report.md deleted file mode 100644 index 088475aaa..000000000 --- a/.github/ISSUE_TEMPLATE/bug_report.md +++ /dev/null @@ -1,37 +0,0 @@ ---- -name: Bug report -about: Create a report to help us improve -title: '' -labels: bug -assignees: '' ---- - -### the problem - -A clear and succinct description of the bug and expected behavior. If known, explain why you believe the problem is within this library. If applicable, add error messages, screenshots, or other reference materials to help explain the problem. - -> Please determine if other charting platforms are accurate before comparing to this library. We're unable to debug their problems for you. - -### my situation - -- library version: [e.g. v2.4.5] -- indicator and params: [e.g. GetSma(14)] -- with these quotes: [attach the historical quotes you used as JSON (preferred), CSV, or Excel file.] - -```csharp -// my code -var results = quotes.GetSma(14); -[..] -``` - -### steps to reproduce - -1. I did this first -2. Then another thing -3. and I got this error: - -Error message(s) or maleficent outcome: - -```bash -# Include any error messages if available. -``` diff --git a/.github/ISSUE_TEMPLATE/bug_report.yml b/.github/ISSUE_TEMPLATE/bug_report.yml new file mode 100644 index 000000000..921dda23d --- /dev/null +++ b/.github/ISSUE_TEMPLATE/bug_report.yml @@ -0,0 +1,39 @@ +name: Bug report +description: File a bug report. +labels: ["bug"] +body: + - type: markdown + attributes: + value: | + Thank you 💖 for taking the time report a bug in the [`Skender.Stock.Indicators` NuGet library](https://www.nuget.org/packages/Skender.Stock.Indicators)! + > Before reporting, please review known [issues](https://github.com/DaveSkender/Stock.Indicators/issues?q=is%3Aissue), community [discussions](https://github.com/DaveSkender/Stock.Indicators/discussions), and [Help! Results don't match TradingView!](https://github.com/DaveSkender/Stock.Indicators/discussions/801) + - type: textarea + id: what-happened + attributes: + label: What happened? + description: What did you expect to happen? + placeholder: Tell us what you see! + validations: + required: true + - type: textarea + id: usage + attributes: + label: Code usage + description: How did you write your code? Provide a code snippet. _This will be auto-formatted as code, so no need for \`backticks\`_. Also, consider providing your source _quotes_ as a _JSON, CSV, or Excel_ file in the "What happened?" field. + render: csharp + placeholder: | + // example (put your own code here) + IEnumerable results = quotes.GetEma(14); + validations: + required: false + - type: textarea + id: logs + attributes: + label: Log output + description: Please copy and paste any relevant log output. _This will be auto-formatted as code, so no need for \`backticks\`_. + render: bash + validations: + required: false + - type: markdown + attributes: + value: If your request is urgent, please review our [sponsorship tiers](https://github.com/sponsors/facioquo). For contract custom development, contact [Skender Co.](https://skenderco.com) diff --git a/.github/ISSUE_TEMPLATE/feature_request.md b/.github/ISSUE_TEMPLATE/feature_request.md deleted file mode 100644 index e3d241f3e..000000000 --- a/.github/ISSUE_TEMPLATE/feature_request.md +++ /dev/null @@ -1,20 +0,0 @@ ---- -name: Feature request -about: Suggest an idea for this project -title: '' -labels: enhancement -assignees: '' - ---- - -Describe the problem and solution you would like. Include reference materials (links, screenshots, etc). - -If requesting a new indicator, please provide links to, or source information for, the original author's publication of the indicator recipe (i.e. avoid sending potentially deviant third-party reproductions, if possible). - -> :information_source: Helpful tips -> -> Please only suggest new indicators from reputable published industry experts or if they are widely accepted time-tested standards. We do not implement community contributed indicators from third-party charting platforms; however, we do support your ability to extend the library with [custom indicators](https://dotnet.stockindicators.dev/custom-indicators/). -> -> See our [guiding principles](https://github.com/DaveSkender/Stock.Indicators/discussions/648) and [contributing guidelines](https://dotnet.stockindicators.dev/contributing/#content) for more information. - -**Please delete this explanatory text when submitting.** diff --git a/.github/ISSUE_TEMPLATE/feature_request.yml b/.github/ISSUE_TEMPLATE/feature_request.yml new file mode 100644 index 000000000..05e134ab7 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/feature_request.yml @@ -0,0 +1,36 @@ +name: Feature request +description: Suggest an idea for this project. +labels: ["enhancement"] +body: + - type: markdown + attributes: + value: | + Thank you 💖 for taking the time to make a recommendation for the [`Skender.Stock.Indicators` NuGet library](https://www.nuget.org/packages/Skender.Stock.Indicators)! If you have an idea that you don't want us to track in [our backlog](https://github.com/users/DaveSkender/projects/1), consider posting in our community [discussions](https://github.com/DaveSkender/Stock.Indicators/discussions). + - type: textarea + id: request + attributes: + label: the problem + description: What problem are you trying to solve? Or, what outcome do you want achieve? Why? + placeholder: I'm always frustrated when [...] + validations: + required: true + - type: textarea + id: solution + attributes: + label: an idea + description: Any suggestions for a solution? Include any alternative solutions you've considered. If requesting a new [reputable indicator](https://github.com/DaveSkender/Stock.Indicators/discussions/1024), please provide the original author's publication of its recipe. + placeholder: I'd love it if the library could [...] + validations: + required: false + - type: textarea + id: usage + attributes: + label: code example + description: Any proposed implementation syntax? _This will be auto-formatted as code, so no need for \`backticks\`_. + render: shell + placeholder: var foo = quotes.AwesomeNewFeature(whatDaYaThink); + validations: + required: false + - type: markdown + attributes: + value: If your request is urgent, please review our [sponsorship tiers](https://github.com/sponsors/facioquo). For contract custom development, contact [Skender Co.](https://skenderco.com) diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md index 5e1e3c17f..7bda92e59 100644 --- a/.github/PULL_REQUEST_TEMPLATE.md +++ b/.github/PULL_REQUEST_TEMPLATE.md @@ -1,19 +1,4 @@ -BY SUBMITTING A PULL REQUEST AND CHANGES TO THIS REPOSITORY YOU ARE ACKNOWLEDGING AND AGREE TO THE TERMS IN BOTH THE [DEVELOPER CERTIFICATE OF ORIGIN](https://developercertificate.org) AND THE [APACHE 2.0 LICENSE](https://opensource.org/licenses/Apache-2.0). +#### done when -PLEASE REMOVE EXPLANATORY TEXT AND UNNEEDED SECTIONS BEFORE CREATING PULL REQUEST. CREATE A DRAFT PULL REQUEST IF YOU INTEND TO ADD MORE COMMITS. REMOVE DRAFT STATUS AND REQUEST REVIEW FROM `DaveSkender` WHEN YOU ARE READY TO COMMIT CHANGES. - -### Description - -Please include a summary of the change and which issue is fixed. Please also include relevant motivation, context, and sources of information or recipes. - -Fixes # - -### Checklist - -- [ ] My code follows the existing style, code structure, and naming taxonomy -- [ ] I have put comments in my code, particularly for hard-to-understand areas -- [ ] I have performed a self-review of my code and included any verifying manual calculations -- [ ] I have added or updated unit tests that prove my fix is effective or that my feature works and achieves sufficient code coverage. New and existing unit tests pass locally and in the build (below) with my changes -- [ ] My changes generate no new warnings or other code analysis issues -- [ ] I have added or run the performance tests that depict optimal execution times -- [ ] I have made corresponding changes to the documentation +- [ ] Implement +- [ ] Fix: # diff --git a/.github/SECURITY.md b/.github/SECURITY.md index f5405ba95..f71ba7ada 100644 --- a/.github/SECURITY.md +++ b/.github/SECURITY.md @@ -1,5 +1,7 @@ -# Reporting a vulnerability +# Security policy -To report a vulnerability, please contact us privately through the NuGet [Contact Owners](https://www.nuget.org/packages/Skender.Stock.Indicators) feature. Please include a detailed description of the vulnerability. +All of our public non-archived repositories are supported with security updates. -We will inform everyone of vulnerability fixes in our release notes. +## Reporting a vulnerability + +To report a security vulnerability, please send it to [support@facioquo.com](mailto:support@facioquo.com). If a patch is not available, we may share that vulnerability through GitHub's reporting features; otherwise, we will communicate fixes in our release notes after they're remediated. diff --git a/.github/workflows/build-scan-codeql.yml b/.github/workflows/build-scan-codeql.yml deleted file mode 100644 index cdcc8bf97..000000000 --- a/.github/workflows/build-scan-codeql.yml +++ /dev/null @@ -1,55 +0,0 @@ -name: CodeQL - -on: - push: - branches: ["main"] - paths: - - 'src/**' - - 'tests/**' - - pull_request: - branches: ["main"] - paths: - - 'src/**' - - 'tests/**' - - ".github/workflows/build-codeql.yml" - - schedule: - - cron: "16 12 * * 3" - -jobs: - analyze: - name: analyze - runs-on: ubuntu-latest - - permissions: - actions: read - contents: read - security-events: write - - strategy: - fail-fast: false - matrix: - language: ["csharp"] - - steps: - - name: Checkout repository - uses: actions/checkout@v3 - - - name: Setup .NET - uses: actions/setup-dotnet@v3 - with: - dotnet-version: '8.x' - - - name: Initialize - uses: github/codeql-action/init@v2 - with: - languages: ${{ matrix.language }} - - - name: Build - uses: github/codeql-action/autobuild@v2 - - - name: Analyze - uses: github/codeql-action/analyze@v2 - with: - category: "/language:${{matrix.language}}" diff --git a/.github/workflows/built-test-indicators.yml b/.github/workflows/built-test-indicators.yml deleted file mode 100644 index 3f0f65931..000000000 --- a/.github/workflows/built-test-indicators.yml +++ /dev/null @@ -1,81 +0,0 @@ -name: Indicators - -on: - push: - branches: ["main"] - - pull_request: - branches: ["main"] - -jobs: - - test: - name: unit tests - runs-on: ubuntu-latest - - steps: - - - name: Clean workspace - run: | - rm -rf ./test-indicators/* || true - rm -rf ./test-indicators/.??* || true - rm -rf ./NuGet/* || true - rm -rf ./NuGet/.??* || true - - - name: Checkout repository - uses: actions/checkout@v4 - - - name: Install .NET SDK - uses: actions/setup-dotnet@v3 - with: - dotnet-version: "8.x" - dotnet-quality: "ga" - - - name: Build solution - run: > - dotnet build - --configuration Release - --property:ContinuousIntegrationBuild=true - -warnAsError - - - name: Test indicators - id: test-library - env: - ALPACA_KEY: ${{ secrets.ALPACA_KEY }} - ALPACA_SECRET: ${{ secrets.ALPACA_SECRET }} - run: > - dotnet test tests/indicators/Tests.Indicators.csproj - --configuration Release - --no-build - --verbosity normal - --logger trx - --collect:"XPlat Code Coverage" - --results-directory ./test-indicators - - - name: Test other items - id: test-other - run: > - dotnet test tests/other/Tests.Other.csproj - --configuration Release - --no-build - --verbosity normal - --logger trx - --results-directory ./test-other - - - name: Post tests summary - uses: bibipkins/dotnet-test-reporter@v1.3.3 - if: ${{ github.event_name == 'pull_request' && (success() || (failure() && (steps.test-library.conclusion == 'failure' || steps.test-other.conclusion == 'failure'))) }} - with: - github-token: ${{ secrets.GITHUB_TOKEN }} - comment-title: "" - results-path: ./test-indicators/**/*.trx - coverage-path: ./test-indicators/**/coverage.cobertura.xml - coverage-type: cobertura - - - name: Post coverage to Codacy - uses: codacy/codacy-coverage-reporter-action@v1 - with: - project-token: ${{ secrets.CODACY_PROJECT_TOKEN }} - coverage-reports: ./test-indicators/**/coverage.cobertura.xml - # or a comma-separated list for multiple reports - # coverage-reports: , diff --git a/.github/workflows/deploy-package.yml b/.github/workflows/deploy-package.yml index c4f78e5b2..c471762e6 100644 --- a/.github/workflows/deploy-package.yml +++ b/.github/workflows/deploy-package.yml @@ -7,9 +7,9 @@ on: description: Deployment environment type: choice options: - - azure-artifacts - - nuget - default: azure-artifacts + - staging + - nuget.org + default: staging required: true preview: description: Append preview suffix @@ -18,8 +18,8 @@ on: required: true concurrency: - group: nuget-deployer - cancel-in-progress: false + group: ${{ inputs.environment }} + cancel-in-progress: true jobs: build: @@ -29,36 +29,40 @@ jobs: steps: - - name: Checkout repository + - name: Checkout source uses: actions/checkout@v4 with: fetch-depth: 0 - - name: Install GitVersion - uses: gittools/actions/gitversion/setup@v0 + - name: Setup GitVersion + uses: gittools/actions/gitversion/setup@v1.2.0 with: versionSpec: "5.x" preferLatestVersion: true - name: Determine version id: gitversion - uses: gittools/actions/gitversion/execute@v0 + uses: gittools/actions/gitversion/execute@v1.2.0 with: updateAssemblyInfo: true useConfigFile: true - configFilePath: gitversion.yml + configFilePath: src/gitversion.yml - name: Compose version id: compose run: | - COMPOSED_VERSION=$GITVERSION_MAJORMINORPATCH${{ inputs.preview && '-preview-' || '' }}${{ inputs.preview && github.run_id || '' }} - echo "version=$COMPOSED_VERSION" >> "$GITHUB_OUTPUT" - echo "COMPOSED_VERSION=$COMPOSED_VERSION" >> "$GITHUB_ENV" - echo "Composed version is:" - echo $COMPOSED_VERSION - - - name: Install .NET SDK - uses: actions/setup-dotnet@v3 + ver=${{ steps.gitversion.outputs.majorMinorPatch }}${{ inputs.preview && '-preview.' || '' }}${{ inputs.preview && steps.gitversion.outputs.preReleaseNumber || inputs.preview && github.run_number || '' }} + echo "version=$ver" >> "$GITHUB_OUTPUT" + + - name: Update release notes URL + uses: jacobtomlinson/gha-find-replace@v3 + with: + find: "https://github.com/DaveSkender/Stock.Indicators/releases" + replace: "https://github.com/DaveSkender/Stock.Indicators/releases/tag/${{ steps.compose.outputs.version }}" + regex: false + + - name: Setup .NET + uses: actions/setup-dotnet@v4 with: dotnet-version: "8.x" dotnet-quality: "ga" @@ -67,7 +71,7 @@ jobs: run: > dotnet build src/Indicators.csproj --configuration Release - --property:Version=$COMPOSED_VERSION + --property:Version=${{ steps.compose.outputs.version }} --property:ContinuousIntegrationBuild=true -warnAsError @@ -78,13 +82,14 @@ jobs: --no-build --include-symbols --output NuGet - -p:PackageVersion=$COMPOSED_VERSION + -p:PackageVersion=${{ steps.compose.outputs.version }} - - name: Save NuGet package - uses: actions/upload-artifact@v3 + - name: Save package + uses: actions/upload-artifact@v4 with: name: packages path: NuGet + include-hidden-files: true - name: Summary output run: | @@ -95,7 +100,7 @@ jobs: echo "| Minor | ${{ steps.gitversion.outputs.minor }} |" echo "| Patch | ${{ steps.gitversion.outputs.patch }} |" echo "| Base | ${{ steps.gitversion.outputs.majorMinorPatch }} |" - echo "| Composed | $COMPOSED_VERSION |" + echo "| Composed | ${{ steps.compose.outputs.version }} |" } >> $GITHUB_STEP_SUMMARY deploy: @@ -122,33 +127,33 @@ jobs: echo "| Version ID | ${{ needs.build.outputs.version }} |" } >> $GITHUB_STEP_SUMMARY - - name: Install .NET SDK - uses: actions/setup-dotnet@v3 + - name: Setup .NET + uses: actions/setup-dotnet@v4 with: dotnet-version: "8.x" dotnet-quality: "ga" - - name: Install NuGet tool + - name: Setup NuGet uses: nuget/setup-nuget@v1 with: nuget-api-key: ${{ secrets.NUGET_TOKEN }} nuget-version: '6.x' - - name: Download NuGet package - uses: actions/download-artifact@v3 + - name: Download package + uses: actions/download-artifact@v4 with: name: packages path: NuGet - - name: Publish to Azure Artifacts - if: inputs.environment == 'azure-artifacts' + - name: Publish to Azure Artifacts (staging) + if: inputs.environment == 'staging' run: | dotnet new nugetconfig --force nuget sources Add -Name "AzureArtifacts" -Source ${{ vars.NUGET_PUBLISH_URL }} -UserName DaveSkender -Password ${{ secrets.NUGET_TOKEN }} -NonInteractive -ConfigFile nuget.config nuget push NuGet/*.nupkg -src AzureArtifacts -ApiKey AZ -NonInteractive -ConfigFile nuget.config - name: Publish to NuGet.org - if: inputs.environment == 'nuget' + if: inputs.environment == 'nuget.org' run: | dotnet new nugetconfig --force nuget setApiKey ${{ secrets.NUGET_TOKEN }} -src nuget -ConfigFile nuget.config @@ -156,7 +161,7 @@ jobs: - name: Tag and draft release note uses: ncipollo/release-action@v1 - if: inputs.environment == 'nuget' + if: inputs.environment == 'nuget.org' with: body: | We’ve released a new Stock Indicators for .NET NuGet package. diff --git a/.github/workflows/docs-deploy.yml b/.github/workflows/deploy-website.yml similarity index 62% rename from .github/workflows/docs-deploy.yml rename to .github/workflows/deploy-website.yml index f6b1a19d1..58058c1a0 100644 --- a/.github/workflows/docs-deploy.yml +++ b/.github/workflows/deploy-website.yml @@ -1,6 +1,6 @@ name: Deploy website -on: [workflow_dispatch] +on: workflow_dispatch concurrency: group: docs-website @@ -14,18 +14,29 @@ jobs: runs-on: ubuntu-latest environment: - name: docs-website + name: stockindicators.dev + url: ${{ steps.deploy.outputs.deployment-alias-url }} steps: - name: Checkout source uses: actions/checkout@v4 - - name: Install Ruby + - name: Setup Ruby uses: ruby/setup-ruby@v1 with: working-directory: docs - ruby-version: 3.1.3 - bundler-cache: false + ruby-version: 3.3 + + - name: Define tag + id: tag + run: echo "version=$(date +'%Y.%m.%d')-${{ github.run_number }}" >> $GITHUB_OUTPUT + + - name: Replace cache markers + uses: jacobtomlinson/gha-find-replace@v3 + with: + find: "YYYY.MM.DD" + replace: "${{ steps.tag.outputs.version }}" + regex: false - name: Install GEMs working-directory: docs @@ -52,10 +63,12 @@ jobs: run: bundle exec jekyll build - name: Publish to Cloudflare Pages - uses: cloudflare/pages-action@v1 + id: deploy + uses: cloudflare/wrangler-action@v3 with: apiToken: ${{ secrets.CLOUDFLARE_API_KEY }} accountId: ${{ secrets.CLOUDFLARE_ACCOUNT_ID }} - projectName: ${{ vars.CLOUDFLARE_PROJECT_NAME }} - directory: docs/_site - wranglerVersion: 'latest' \ No newline at end of file + wranglerVersion: "latest" + command: > + pages deploy docs/_site + --project-name=${{ vars.CLOUDFLARE_PROJECT_NAME }} diff --git a/.github/workflows/semantic-pr-linter.yml b/.github/workflows/lint-pull-request.yml similarity index 85% rename from .github/workflows/semantic-pr-linter.yml rename to .github/workflows/lint-pull-request.yml index a4113f57f..8fb6295e2 100644 --- a/.github/workflows/semantic-pr-linter.yml +++ b/.github/workflows/lint-pull-request.yml @@ -1,4 +1,4 @@ -name: "Lint PR" +name: "Pull request" on: pull_request_target: @@ -12,7 +12,7 @@ permissions: jobs: main: - name: validate PR title + name: lint PR title runs-on: ubuntu-latest steps: - uses: amannn/action-semantic-pull-request@v5 @@ -39,7 +39,7 @@ jobs: # event triggers in your workflow. ignoreLabels: | bot - ignore-semantic-pull-request + dependencies - uses: marocchino/sticky-pull-request-comment@v2 # When the previous steps fails, the workflow would stop. By adding this @@ -57,9 +57,15 @@ jobs: #### Pull request title naming convention Our PR title name taxonomy is `type: Subject`, where **type** is typically - *feat*, *fix*, or *chore*, and **subject** is a phrase (proper noun) that starts with a capitalized letter. - The *chore* type usually has a subject that starts with an action verb like *Add* or *Update*. - Examples: `feat: Admin portal login`, `fix: Divide by zero bug in SMA`, and `chore: Update user docs`. + *feat*, *fix*, or *chore*, and **subject** is a phrase (proper noun) that starts + with a capitalized letter. The *chore* type usually has a subject that starts + with an action verb like *Add* or *Update*. Examples: + + - _feat: Admin portal login_ + - _fix: Divide by zero in X calculation_ + - _chore: Update packages_ + - _docs: Improve setup guidance_ + See the [Conventional Commits specification](https://www.conventionalcommits.org) for more information. # Delete a previous comment when the issue has been resolved diff --git a/.github/workflows/lock.yml b/.github/workflows/lock-issues-pr.yml similarity index 65% rename from .github/workflows/lock.yml rename to .github/workflows/lock-issues-pr.yml index 4c94c3d5d..ffb20549b 100644 --- a/.github/workflows/lock.yml +++ b/.github/workflows/lock-issues-pr.yml @@ -4,6 +4,11 @@ name: Lock closed threads on: schedule: - cron: "0 4 * * 0" + workflow_dispatch: + +permissions: + issues: write + pull-requests: write concurrency: group: lock @@ -12,8 +17,8 @@ jobs: lock: runs-on: ubuntu-latest steps: - - uses: dessant/lock-threads@v4 + - uses: dessant/lock-threads@v5 with: - github-token: ${{ secrets.GITHUB_TOKEN }} + process-only: issues, prs issue-inactive-days: "90" pr-inactive-days: "30" diff --git a/.github/workflows/build-examples.yml b/.github/workflows/test-examples.yml similarity index 75% rename from .github/workflows/build-examples.yml rename to .github/workflows/test-examples.yml index aa273a92f..7b63a2fd1 100644 --- a/.github/workflows/build-examples.yml +++ b/.github/workflows/test-examples.yml @@ -10,20 +10,20 @@ on: branches: ["main"] paths: - docs/examples/** - - ".github/workflows/build-examples.yml" + - ".github/workflows/test-examples.yml" jobs: build: - name: build projects + name: build only runs-on: ubuntu-latest steps: - - name: Checkout repository + - name: Checkout source uses: actions/checkout@v4 - - name: Install .NET SDK - uses: actions/setup-dotnet@v3 + - name: Setup .NET + uses: actions/setup-dotnet@v4 with: dotnet-version: "8.x" dotnet-quality: "ga" diff --git a/.github/workflows/test-indicators.yml b/.github/workflows/test-indicators.yml new file mode 100644 index 000000000..72d8ef4d6 --- /dev/null +++ b/.github/workflows/test-indicators.yml @@ -0,0 +1,98 @@ +name: Indicators + +on: + push: + branches: ["main"] + + pull_request: + types: [opened, synchronize, reopened] + +jobs: + test: + name: unit tests + runs-on: ${{ matrix.os }} + + permissions: + contents: read + actions: read + checks: write + + strategy: + matrix: + os: [windows-latest, ubuntu-latest, macos-latest] + dotnet-version: ["2.0.x", "6.x", "8.x"] + + env: + + # identifying primary configuration so only one reports coverage + IS_PRIMARY: ${{ matrix.os == 'ubuntu-latest' && matrix.dotnet-version == '8.x' }} + + # .NET SDK versions in the matrix that support `ga` quality spec + # versions before 5.x do not support it + SUPPORT_GA: ${{ contains(fromJson('["6.x", "8.x"]'), matrix.dotnet-version) }} + + steps: + + - name: Checkout source + uses: actions/checkout@v4 + + - name: Setup .NET + id: dotnet-new + uses: actions/setup-dotnet@v4 + if: env.SUPPORT_GA == 'true' + with: + dotnet-version: ${{ matrix.dotnet-version }} + dotnet-quality: "ga" + + - name: Setup .NET (older) + uses: actions/setup-dotnet@v4 + if: env.SUPPORT_GA == 'false' + with: + dotnet-version: ${{ matrix.dotnet-version }} + + - name: Build library + run: > + dotnet build + --configuration Release + --property:ContinuousIntegrationBuild=true + -warnAsError + + - name: Test indicators + env: + ALPACA_KEY: ${{ secrets.ALPACA_KEY }} + ALPACA_SECRET: ${{ secrets.ALPACA_SECRET }} + run: > + dotnet test tests/indicators/Tests.Indicators.csproj + --configuration Release + --no-build + --verbosity normal + --logger trx + --collect:"XPlat Code Coverage" + --results-directory ./test-indicators + + # the remaining steps are only needed from one primary instance + + - name: Test other items + if: env.IS_PRIMARY == 'true' + run: > + dotnet test tests/other/Tests.Other.csproj + --configuration Release + --no-build + --verbosity normal + --logger trx + --results-directory ./test-other + + - name: Post test summary + uses: dorny/test-reporter@v1 + if: env.IS_PRIMARY == 'true' && always() + with: + name: Test results + path: ./test-indicators/**/*.trx + reporter: dotnet-trx + + - name: Publish coverage to Codacy + uses: codacy/codacy-coverage-reporter-action@v1 + if: env.IS_PRIMARY == 'true' + with: + project-token: ${{ secrets.CODACY_PROJECT_TOKEN }} + coverage-reports: ./test-indicators/**/coverage.cobertura.xml diff --git a/.github/workflows/test-performance.yml b/.github/workflows/test-performance.yml index da798f9cf..46056c64e 100644 --- a/.github/workflows/test-performance.yml +++ b/.github/workflows/test-performance.yml @@ -1,38 +1,37 @@ name: Benchmark performance concurrency: - group: test-performance - cancel-in-progress: true + group: ${{ github.workflow }}-${{ github.ref }} -on: [workflow_dispatch] +on: workflow_dispatch jobs: analyze: - runs-on: ubuntu-latest + runs-on: ubuntu-22.04 steps: - - name: Checkout repository + - name: Checkout source uses: actions/checkout@v4 with: fetch-depth: 0 - - name: Install GitVersion - uses: gittools/actions/gitversion/setup@v0 + - name: Setup GitVersion + uses: gittools/actions/gitversion/setup@v1.2.0 with: versionSpec: "5.x" preferLatestVersion: true - name: Determine version id: gitversion - uses: gittools/actions/gitversion/execute@v0 + uses: gittools/actions/gitversion/execute@v1.2.0 with: updateAssemblyInfo: true useConfigFile: true - configFilePath: gitversion.yml + configFilePath: src/gitversion.yml - - name: Install .NET SDK - uses: actions/setup-dotnet@v3 + - name: Setup .NET + uses: actions/setup-dotnet@v4 with: dotnet-version: "8.x" dotnet-quality: "ga" @@ -42,7 +41,6 @@ jobs: dotnet build --configuration Release --property:ContinuousIntegrationBuild=true - -warnAsError - name: Benchmark indicators working-directory: tests/performance @@ -51,5 +49,5 @@ jobs: - name: Publish summary working-directory: tests/performance/BenchmarkDotNet.Artifacts/results run: | - echo "### Package version $GITVERSION_FULLSEMVER" >> $GITHUB_STEP_SUMMARY + echo "### Package version ${{ steps.gitversion.outputs.fullSemVer }}" >> $GITHUB_STEP_SUMMARY cat Tests.Performance.IndicatorPerformance-report-github.md >> $GITHUB_STEP_SUMMARY diff --git a/.github/workflows/docs-test-a11y.yml b/.github/workflows/test-website-a11y.yml similarity index 86% rename from .github/workflows/docs-test-a11y.yml rename to .github/workflows/test-website-a11y.yml index 4c6918c20..d7164fb04 100644 --- a/.github/workflows/docs-test-a11y.yml +++ b/.github/workflows/test-website-a11y.yml @@ -5,7 +5,7 @@ on: branches: [main] paths: - 'docs/**' - - ".github/workflows/docs-test-a11y.yml" + - ".github/workflows/test-website-a11y.yml" env: JEKYLL_GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} @@ -19,12 +19,11 @@ jobs: - name: Checkout source uses: actions/checkout@v4 - - name: Install Ruby + - name: Setup Ruby uses: ruby/setup-ruby@v1 with: working-directory: docs - ruby-version: 3.1.3 - bundler-cache: false + ruby-version: 3.2 - name: Install GEMs working-directory: docs @@ -56,3 +55,7 @@ jobs: npx pa11y-ci \ --sitemap http://127.0.0.1:4000/sitemap.xml \ --sitemap-exclude "/*.pdf" + + - name: Kill site (failsafe) + if: always() + run: pkill -f jekyll diff --git a/.github/workflows/docs-test-links.yml b/.github/workflows/test-website-links.yml similarity index 76% rename from .github/workflows/docs-test-links.yml rename to .github/workflows/test-website-links.yml index 4ddd605a7..4d9136ec2 100644 --- a/.github/workflows/docs-test-links.yml +++ b/.github/workflows/test-website-links.yml @@ -5,7 +5,7 @@ on: branches: [main] paths: - 'docs/**' - - ".github/workflows/docs-test-links.yml" + - ".github/workflows/test-website-links.yml" env: JEKYLL_GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} @@ -17,14 +17,13 @@ jobs: steps: - name: Checkout source - uses: actions/checkout@v2 + uses: actions/checkout@v4 - - name: Install Ruby + - name: Setup Ruby uses: ruby/setup-ruby@v1 with: working-directory: docs - ruby-version: 3.1.3 - bundler-cache: false + ruby-version: 3.2 - name: Install GEMs working-directory: docs @@ -34,8 +33,10 @@ jobs: pwd bundle install - - name: Install HTML Proofer - run: gem install html-proofer + - name: Setup HTML Proofer + run: | + gem install html-proofer + htmlproofer --help - name: Replace "data-src" uses: jacobtomlinson/gha-find-replace@v3 @@ -63,11 +64,17 @@ jobs: BUNDLE_GEMFILE: ${{github.workspace}}/docs/GemFile run: bundle exec jekyll serve --detach + # see help in setup step - name: Test for broken URLs working-directory: docs run: | htmlproofer _site \ --no-enforce-https \ - --ignore-status-codes "0,403,406,408,429,503,999" \ + --no-check-external-hash \ + --ignore-status-codes "0,302,403,406,408,429,503,999" \ --swap-urls "https\://dotnet.stockindicators.dev:http\://127.0.0.1:4000" \ --ignore-urls "/fonts.gstatic.com/" + + - name: Kill site (failsafe) + if: always() + run: pkill -f jekyll diff --git a/.vscode/settings.json b/.vscode/settings.json index a42950c62..f02c7ba81 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -26,7 +26,7 @@ // markdown settings "markdownlint.config": { "MD033": false, // no-inline-html - "MD025": false // single-title/single-h1 --> fails with front-matter + "MD025": false // single-title/single-h1 --> fails with front-matter }, // dictionary exceptions "cSpell.words": [ @@ -193,8 +193,5 @@ "pivottrend", "trendline", "webp" - ], - "yaml.schemas": { - "https://json.schemastore.org/github-workflow.json": "file:///c%3A/Users/daves/Repos/Forks/Stock.Indicators/daveskender/.github/workflows/build.yml" - } -} \ No newline at end of file + ] +} diff --git a/README.md b/README.md index 105f2b741..f66f8607c 100644 --- a/README.md +++ b/README.md @@ -3,13 +3,12 @@ [![GitHub Stars](https://img.shields.io/github/stars/DaveSkender/Stock.Indicators?logo=github&label=Stars)](https://github.com/DaveSkender/Stock.Indicators) [![NuGet package](https://img.shields.io/nuget/v/skender.stock.indicators?color=blue&logo=NuGet&label=NuGet)](https://www.nuget.org/packages/Skender.Stock.Indicators) [![NuGet](https://img.shields.io/nuget/dt/skender.stock.indicators?logo=NuGet&label=Downloads)](https://www.nuget.org/packages/Skender.Stock.Indicators) -[![code coverage](https://img.shields.io/azure-devops/coverage/skender/stock.indicators/21/main?logo=AzureDevOps&label=Test%20Coverage)](https://dev.azure.com/skender/Stock.Indicators/_build/latest?definitionId=21&branchName=main&view=codecoverage-tab) # Stock Indicators for .NET **Stock Indicators for .NET** is a C# [library package](https://www.nuget.org/packages/Skender.Stock.Indicators) that produces financial market technical indicators. Send in historical price quotes and get back desired indicators such as moving averages, Relative Strength Index, Stochastic Oscillator, Parabolic SAR, etc. Nothing more. -Build your private technical analysis, trading algorithms, machine learning, charting, or other intelligent market software with this library and your own [OHLCV](https://dotnet.stockindicators.dev/guide/#historical-quotes) price quotes sources for equities, commodities, forex, cryptocurrencies, and others. [Stock Indicators for Python](https://python.stockindicators.dev/) is also available. +Build your technical analysis, trading algorithms, machine learning, charting, or other intelligent market software with this library and your own [OHLCV](https://dotnet.stockindicators.dev/guide/#historical-quotes) price quotes sources for equities, commodities, forex, cryptocurrencies, and others. [Stock Indicators for Python](https://python.stockindicators.dev/) is also available. Visit our project site for more information: diff --git a/Stock.Indicators.sln b/Stock.Indicators.sln index 10a0bbd4f..c3d9963da 100644 --- a/Stock.Indicators.sln +++ b/Stock.Indicators.sln @@ -8,7 +8,7 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Configuration", "Configurat .editorconfig = .editorconfig .gitattributes = .gitattributes .gitignore = .gitignore - gitversion.yml = gitversion.yml + src\gitversion.yml = src\gitversion.yml EndProjectSection EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Indicators", "src\Indicators.csproj", "{8D0F1781-EDA3-4C51-B05D-D33FF1156E49}" diff --git a/docs/.offline/banner-background.png b/docs/.offline/banner-background.png deleted file mode 100644 index a57dedb10..000000000 Binary files a/docs/.offline/banner-background.png and /dev/null differ diff --git a/docs/.offline/banner.png b/docs/.offline/banner.png deleted file mode 100644 index 39d251b57..000000000 Binary files a/docs/.offline/banner.png and /dev/null differ diff --git a/docs/.offline/banner.xcf b/docs/.offline/banner.xcf deleted file mode 100644 index ed0869dea..000000000 Binary files a/docs/.offline/banner.xcf and /dev/null differ diff --git a/docs/.offline/favicons.zip b/docs/.offline/favicons.zip new file mode 100644 index 000000000..4887dace2 Binary files /dev/null and b/docs/.offline/favicons.zip differ diff --git a/docs/.offline/icon-monochrome.png b/docs/.offline/icon-monochrome.png deleted file mode 100644 index b7555e3ff..000000000 Binary files a/docs/.offline/icon-monochrome.png and /dev/null differ diff --git a/docs/.offline/icon-monochrome.xcf b/docs/.offline/icon-monochrome.xcf deleted file mode 100644 index a8fbde6df..000000000 Binary files a/docs/.offline/icon-monochrome.xcf and /dev/null differ diff --git a/docs/.offline/icon.png b/docs/.offline/icon.png deleted file mode 100644 index 3f1022ad4..000000000 Binary files a/docs/.offline/icon.png and /dev/null differ diff --git a/docs/.offline/icon.xcf b/docs/.offline/icon.xcf deleted file mode 100644 index a01bed862..000000000 Binary files a/docs/.offline/icon.xcf and /dev/null differ diff --git a/docs/.offline/social-banner.pptx b/docs/.offline/social-banner.pptx new file mode 100644 index 000000000..2621b05ae Binary files /dev/null and b/docs/.offline/social-banner.pptx differ diff --git a/docs/.offline/social-banner.svg b/docs/.offline/social-banner.svg new file mode 100644 index 000000000..05268b9f6 --- /dev/null +++ b/docs/.offline/social-banner.svg @@ -0,0 +1,31 @@ + + + + + + + + + + + + + + + + + + + + + + stock + indicators + for C# .NET + Skender.Stock.Indicators + @nuget.org + https://dotnet.stockindicators.dev + diff --git a/docs/GemFile b/docs/GemFile index 822837d07..3d7499214 100644 --- a/docs/GemFile +++ b/docs/GemFile @@ -1,11 +1,7 @@ source 'https://rubygems.org' - -gem 'eventmachine', '1.2.7', git: 'https://github.com/eventmachine/eventmachine', tag: 'v1.2.7' -gem 'wdm', '>= 0.1.1' if Gem.win_platform? # windows compatibilty pack -gem 'faraday-retry' +# local dev: bundle exec jekyll serve -o -l # jekyll plugins -# local dev: bundle exec jekyll serve group :jekyll_plugins do gem 'github-pages' gem "jekyll-github-metadata" @@ -16,4 +12,6 @@ group :jekyll_plugins do gem 'jekyll-minifier' end -gem "webrick" # needed for ruby > v3.0 +gem 'wdm', '>= 0.2.0' if Gem.win_platform? # windows compatibilty pack +gem 'webrick' # needed for ruby > v3.0 +gem 'faraday' # reload/retry on file changes diff --git a/docs/GemFile.lock b/docs/GemFile.lock index df47096e9..55b558a17 100644 --- a/docs/GemFile.lock +++ b/docs/GemFile.lock @@ -1,66 +1,61 @@ -GIT - remote: https://github.com/eventmachine/eventmachine - revision: 9cb13a8a62363df5ebcc414169a3deb2c1608528 - tag: v1.2.7 - specs: - eventmachine (1.2.7) - GEM remote: https://rubygems.org/ specs: - activesupport (7.1.2) + activesupport (7.2.1.2) base64 bigdecimal - concurrent-ruby (~> 1.0, >= 1.0.2) + concurrent-ruby (~> 1.0, >= 1.3.1) connection_pool (>= 2.2.5) drb i18n (>= 1.6, < 2) + logger (>= 1.4.2) minitest (>= 5.1) - mutex_m - tzinfo (~> 2.0) - addressable (2.8.6) - public_suffix (>= 2.0.2, < 6.0) + securerandom (>= 0.3) + tzinfo (~> 2.0, >= 2.0.5) + addressable (2.8.7) + public_suffix (>= 2.0.2, < 7.0) base64 (0.2.0) - bigdecimal (3.1.5) + bigdecimal (3.1.8) coffee-script (2.4.1) coffee-script-source execjs - coffee-script-source (1.11.1) + coffee-script-source (1.12.2) colorator (1.1.0) commonmarker (0.23.10) - concurrent-ruby (1.2.2) + concurrent-ruby (1.3.4) connection_pool (2.4.1) cssminify2 (2.0.1) - dnsruby (1.70.0) + csv (3.3.0) + dnsruby (1.72.2) simpleidn (~> 0.2.1) - drb (2.2.0) - ruby2_keywords + drb (2.2.1) em-websocket (0.5.3) eventmachine (>= 0.12.9) http_parser.rb (~> 0) ethon (0.16.0) ffi (>= 1.15.0) - execjs (2.9.1) - faraday (2.9.0) - faraday-net_http (>= 2.0, < 3.2) - faraday-net_http (3.1.0) + eventmachine (1.2.7) + execjs (2.10.0) + faraday (2.12.0) + faraday-net_http (>= 2.0, < 3.4) + json + logger + faraday-net_http (3.3.0) net-http - faraday-retry (2.2.0) - faraday (~> 2.0) - ffi (1.16.3) - ffi (1.16.3-x64-mingw-ucrt) + ffi (1.17.0-x64-mingw-ucrt) + ffi (1.17.0-x86_64-linux-gnu) forwardable-extended (2.6.0) - gemoji (3.0.1) - github-pages (228) - github-pages-health-check (= 1.17.9) - jekyll (= 3.9.3) - jekyll-avatar (= 0.7.0) - jekyll-coffeescript (= 1.1.1) - jekyll-commonmark-ghpages (= 0.4.0) - jekyll-default-layout (= 0.1.4) - jekyll-feed (= 0.15.1) + gemoji (4.1.0) + github-pages (232) + github-pages-health-check (= 1.18.2) + jekyll (= 3.10.0) + jekyll-avatar (= 0.8.0) + jekyll-coffeescript (= 1.2.2) + jekyll-commonmark-ghpages (= 0.5.1) + jekyll-default-layout (= 0.1.5) + jekyll-feed (= 0.17.0) jekyll-gist (= 1.5.0) - jekyll-github-metadata (= 2.13.0) + jekyll-github-metadata (= 2.16.1) jekyll-include-cache (= 0.2.1) jekyll-mentions (= 1.6.0) jekyll-optional-front-matter (= 0.3.2) @@ -87,31 +82,33 @@ GEM jekyll-theme-tactile (= 0.2.0) jekyll-theme-time-machine (= 0.2.0) jekyll-titles-from-headings (= 0.5.3) - jemoji (= 0.12.0) - kramdown (= 2.3.2) + jemoji (= 0.13.0) + kramdown (= 2.4.0) kramdown-parser-gfm (= 1.1.0) liquid (= 4.0.4) mercenary (~> 0.3) minima (= 2.5.1) - nokogiri (>= 1.13.6, < 2.0) - rouge (= 3.26.0) + nokogiri (>= 1.16.2, < 2.0) + rouge (= 3.30.0) terminal-table (~> 1.4) - github-pages-health-check (1.17.9) + webrick (~> 1.8) + github-pages-health-check (1.18.2) addressable (~> 2.3) dnsruby (~> 1.60) - octokit (~> 4.0) - public_suffix (>= 3.0, < 5.0) + octokit (>= 4, < 8) + public_suffix (>= 3.0, < 6.0) typhoeus (~> 1.3) html-pipeline (2.14.3) activesupport (>= 2) nokogiri (>= 1.4) htmlcompressor (0.4.0) http_parser.rb (0.8.0) - i18n (1.14.1) + i18n (1.14.6) concurrent-ruby (~> 1.0) - jekyll (3.9.3) + jekyll (3.10.0) addressable (~> 2.4) colorator (~> 1.0) + csv (~> 3.0) em-websocket (~> 0.5) i18n (>= 0.7, < 2) jekyll-sass-converter (~> 1.0) @@ -122,32 +119,32 @@ GEM pathutil (~> 0.9) rouge (>= 1.7, < 4) safe_yaml (~> 1.0) - jekyll-avatar (0.7.0) + webrick (>= 1.0) + jekyll-avatar (0.8.0) jekyll (>= 3.0, < 5.0) - jekyll-coffeescript (1.1.1) + jekyll-coffeescript (1.2.2) coffee-script (~> 2.2) - coffee-script-source (~> 1.11.1) + coffee-script-source (~> 1.12) jekyll-commonmark (1.4.0) commonmarker (~> 0.22) - jekyll-commonmark-ghpages (0.4.0) - commonmarker (~> 0.23.7) - jekyll (~> 3.9.0) + jekyll-commonmark-ghpages (0.5.1) + commonmarker (>= 0.23.7, < 1.1.0) + jekyll (>= 3.9, < 4.0) jekyll-commonmark (~> 1.4.0) rouge (>= 2.0, < 5.0) - jekyll-default-layout (0.1.4) - jekyll (~> 3.0) - jekyll-feed (0.15.1) + jekyll-default-layout (0.1.5) + jekyll (>= 3.0, < 5.0) + jekyll-feed (0.17.0) jekyll (>= 3.7, < 5.0) jekyll-gist (1.5.0) octokit (~> 4.2) - jekyll-github-metadata (2.13.0) + jekyll-github-metadata (2.16.1) jekyll (>= 3.4, < 5.0) - octokit (~> 4.0, != 4.4.0) + octokit (>= 4, < 7, != 4.4.0) jekyll-include-cache (0.2.1) jekyll (>= 3.7, < 5.0) - jekyll-last-modified-at (1.3.0) + jekyll-last-modified-at (1.3.2) jekyll (>= 3.7, < 5.0) - posix-spawn (~> 0.3.9) jekyll-mentions (1.6.0) html-pipeline (~> 2.3) jekyll (>= 3.7, < 5.0) @@ -222,48 +219,46 @@ GEM jekyll (>= 3.3, < 5.0) jekyll-watch (2.2.1) listen (~> 3.0) - jemoji (0.12.0) - gemoji (~> 3.0) + jemoji (0.13.0) + gemoji (>= 3, < 5) html-pipeline (~> 2.2) jekyll (>= 3.0, < 5.0) - json (2.7.1) + json (2.7.4) json-minify (0.0.3) json (> 0) - kramdown (2.3.2) + kramdown (2.4.0) rexml kramdown-parser-gfm (1.1.0) kramdown (~> 2.0) liquid (4.0.4) - listen (3.8.0) + listen (3.9.0) rb-fsevent (~> 0.10, >= 0.10.3) rb-inotify (~> 0.9, >= 0.9.10) + logger (1.6.1) mercenary (0.3.6) minima (2.5.1) jekyll (>= 3.5, < 5.0) jekyll-feed (~> 0.9) jekyll-seo-tag (~> 2.1) - minitest (5.21.1) - mutex_m (0.2.0) + minitest (5.25.1) net-http (0.4.1) uri - nokogiri (1.16.0-x64-mingw-ucrt) + nokogiri (1.16.7-x64-mingw-ucrt) racc (~> 1.4) - nokogiri (1.16.0-x86_64-linux) + nokogiri (1.16.7-x86_64-linux) racc (~> 1.4) octokit (4.25.1) faraday (>= 1, < 3) sawyer (~> 0.9) pathutil (0.16.2) forwardable-extended (~> 2.6) - posix-spawn (0.3.15) - public_suffix (4.0.7) - racc (1.7.3) + public_suffix (5.1.1) + racc (1.8.1) rb-fsevent (0.11.2) - rb-inotify (0.10.1) + rb-inotify (0.11.1) ffi (~> 1.0) - rexml (3.2.6) - rouge (3.26.0) - ruby2_keywords (0.0.5) + rexml (3.3.9) + rouge (3.30.0) rubyzip (2.3.2) safe_yaml (1.0.5) sass (3.7.4) @@ -274,32 +269,27 @@ GEM sawyer (0.9.2) addressable (>= 2.3.5) faraday (>= 0.17.3, < 3) - simpleidn (0.2.1) - unf (~> 0.1.4) + securerandom (0.3.1) + simpleidn (0.2.3) terminal-table (1.8.0) unicode-display_width (~> 1.1, >= 1.1.1) typhoeus (1.4.1) ethon (>= 0.9.0) tzinfo (2.0.6) concurrent-ruby (~> 1.0) - uglifier (4.2.0) + uglifier (4.2.1) execjs (>= 0.3.0, < 3) - unf (0.1.4) - unf_ext - unf_ext (0.0.9.1) - unf_ext (0.0.9.1-x64-mingw-ucrt) unicode-display_width (1.8.0) - uri (0.13.0) - wdm (0.1.1) - webrick (1.8.1) + uri (0.13.1) + wdm (0.2.0) + webrick (1.8.2) PLATFORMS x64-mingw-ucrt x86_64-linux DEPENDENCIES - eventmachine (= 1.2.7)! - faraday-retry + faraday github-pages jekyll-github-metadata jekyll-last-modified-at @@ -307,7 +297,7 @@ DEPENDENCIES jekyll-redirect-from jekyll-seo-tag jekyll-sitemap - wdm (>= 0.1.1) + wdm (>= 0.2.0) webrick BUNDLED WITH diff --git a/docs/_config.yml b/docs/_config.yml index f4868cebf..e053db15c 100644 --- a/docs/_config.yml +++ b/docs/_config.yml @@ -47,7 +47,6 @@ exclude: [ "*.cs", "*.csproj", - "*.json", "*.lock", "*.yml", "*.pptx", @@ -61,6 +60,9 @@ exclude: "vendor", ] +include: + - _headers + permalink: pretty defaults: diff --git a/docs/_headers b/docs/_headers new file mode 100644 index 000000000..4b420d8d5 --- /dev/null +++ b/docs/_headers @@ -0,0 +1,2 @@ +https://:project.pages.dev/* + X-Robots-Tag: noindex diff --git a/docs/_includes/head-style.html b/docs/_includes/head-style.html index cb2e9fd54..b6c4ba2b1 100644 --- a/docs/_includes/head-style.html +++ b/docs/_includes/head-style.html @@ -1,7 +1,7 @@