diff --git a/.DEREK.yml b/.DEREK.yml new file mode 100644 index 00000000000..462522f880c --- /dev/null +++ b/.DEREK.yml @@ -0,0 +1,11 @@ +curators: + - alexrogalskiy + +features: + - dco_check + - comments + - pr_description_required + - release_notes + - hacktoberfest + +contributing_url: https://github.com/AlexRogalskiy/github-action-random-quote/blob/master/.github/CONTRIBUTING.md diff --git a/.adr-dir b/.adr-dir new file mode 100644 index 00000000000..d0a7d896b53 --- /dev/null +++ b/.adr-dir @@ -0,0 +1 @@ +adrs diff --git a/.alexignore b/.alexignore new file mode 100644 index 00000000000..8b7e7e40b8d --- /dev/null +++ b/.alexignore @@ -0,0 +1,2 @@ +# We will handle the older blog posts later. +config/ diff --git a/.alexrc.js b/.alexrc.js new file mode 100644 index 00000000000..b737fa2d74e --- /dev/null +++ b/.alexrc.js @@ -0,0 +1,31 @@ +/* + * Copyright (C) 2022 SensibleMetrics, Inc. (http://sensiblemetrics.io/) + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +'use strict'; + +exports.allow = [ + // We frequently refer to form props by their name "disabled". + // Ideally we would alex-ignore only the valid uses (PRs accepted). + 'invalid', + + // Unfortunately "watchman" is a library name that we depend on. + 'watchman-watchwoman', + + // ignore rehab rule, Detox is an e2e testing library + 'rehab', +]; + +// Use a "maybe" level of profanity instead of the default "unlikely". +exports.profanitySureness = 1; diff --git a/.all-contributorsrc b/.all-contributorsrc index d6b4099c171..d434db4113c 100644 --- a/.all-contributorsrc +++ b/.all-contributorsrc @@ -6,8 +6,15 @@ "files": [ "README.md" ], + "types": { + "marketing": { + "symbol": "💌", + "description": "Marketing - People who help in marketing the repo/project" + } + }, "imageSize": 100, - "commit": false, + "commit": true, + "contributorsPerLine": 5, "contributors": [ { "login": "AlexRogalskiy", @@ -21,7 +28,11 @@ "ideas", "infra", "maintenance", - "test" + "test", + "bug", + "content", + "data", + "tutorial" ] }, { @@ -30,8 +41,9 @@ "avatar_url": "https://avatars1.githubusercontent.com/u/25180681", "profile": "https://github.com/renovate-bot", "contributions": [ - "maintenance" + "maintenance" ] } - ] + ], + "commitConvention": "none" } diff --git a/.changeset/README.md b/.changeset/README.md new file mode 100644 index 00000000000..4f3b76b096b --- /dev/null +++ b/.changeset/README.md @@ -0,0 +1,8 @@ +# Changesets + +Hello and welcome! This folder has been automatically generated by `@changesets/cli`, a build tool that works +with multi-package repos, or single-package repos to help you version and publish your code. You can +find the full documentation for it [in our repository](https://github.com/changesets/changesets) + +We have a quick list of common questions to get you started engaging with this project in +[our documentation](https://github.com/changesets/changesets/blob/master/docs/common-questions.md) diff --git a/.changeset/config.json b/.changeset/config.json new file mode 100644 index 00000000000..fe84f5ad040 --- /dev/null +++ b/.changeset/config.json @@ -0,0 +1,12 @@ +{ + "$schema": "https://unpkg.com/@changesets/config@1.1.0/schema.json", + "changelog": [ + "@changesets/changelog-github", + { "repo": "AlexRogalskiy/java-patterns" } + ], + "commit": false, + "linked": [], + "access": "public", + "baseBranch": "master", + "updateInternalDependencies": "patch" +} diff --git a/.codeclimate.yml b/.codeclimate.yml new file mode 100644 index 00000000000..f49235f75f3 --- /dev/null +++ b/.codeclimate.yml @@ -0,0 +1,50 @@ +engines: + fixme: + enabled: true + duplication: + enabled: false + config: + languages: + - javascript + - python: + python_version: 3 + mass_threshold: 50 + exclude_paths: + - doc/ + pep8: + enabled: false + radon: + enabled: true + config: + threshold: 'C' + eslint: + enabled: false + shellcheck: + enabled: false + csslint: + enabled: false + +checks: + argument-count: + config: + threshold: 5 + method-complexity: + config: + threshold: 7 + +ratings: + paths: + - '**.py' + - '**.js' + - '**.sh' + - '**.css' + +exclude_patterns: + - 'dist/' + - 'docs/' + - 'scripts/' + - 'test/' + - '*.js' + - '*.json' + - '*.md' + - '.*' diff --git a/.codesandbox/ci.json b/.codesandbox/ci.json new file mode 100644 index 00000000000..1e1df2093f9 --- /dev/null +++ b/.codesandbox/ci.json @@ -0,0 +1,6 @@ +{ + "packages": ["packages/*"], + "sandboxes": ["packages/contributors/src", "packages/changelog/src"], + "buildCommand": "all", + "node": "16" +} diff --git a/.crowdin.bak b/.crowdin.bak new file mode 100644 index 00000000000..3d86b56fbfe --- /dev/null +++ b/.crowdin.bak @@ -0,0 +1 @@ +{"token":"","organization":"Nullables.io","projectId":"java-patterns","baseDir":"docs","path":"."} diff --git a/.csslintrc b/.csslintrc new file mode 100644 index 00000000000..19ae9c144be --- /dev/null +++ b/.csslintrc @@ -0,0 +1,38 @@ +{ + "important": false, + "adjoining-classes": false, + "known-properties": true, + "box-sizing": false, + "box-model": false, + "overqualified-elements": false, + "display-property-grouping": true, + "bulletproof-font-face": false, + "compatible-vendor-prefixes": false, + "order-alphabetical": false, + "regex-selectors": false, + "errors": false, + "duplicate-background-images": false, + "duplicate-properties": false, + "empty-rules": false, + "selector-max-approaching": false, + "gradients": false, + "fallback-colors": false, + "font-sizes": false, + "font-faces": false, + "floats": false, + "star-property-hack": false, + "outline-none": false, + "import": true, + "ids": false, + "underscore-property-hack": false, + "rules-count": false, + "qualified-headings": false, + "selector-max": false, + "shorthand": true, + "text-indent": false, + "unique-headings": false, + "universal-selector": false, + "unqualified-attributes": false, + "vendor-prefix": false, + "zero-units": true +} diff --git a/.deepsource.toml b/.deepsource.toml new file mode 100644 index 00000000000..6431df05dd8 --- /dev/null +++ b/.deepsource.toml @@ -0,0 +1,16 @@ +version = 1 + +test_patterns = [ + "tests/**" +] + +exclude_patterns = [ + "setup.py" +] + +[[analyzers]] +name = "python" +enabled = true + + [analyzers.meta] + runtime_version = "3.x.x" diff --git a/.dependabot/config.yml b/.dependabot/config.yml index 3ea4679c45e..2f6ff0b9106 100644 --- a/.dependabot/config.yml +++ b/.dependabot/config.yml @@ -10,6 +10,10 @@ update_configs: - package_manager: "javascript" directory: "/" update_schedule: "live" + automerged_updates: + - match: + dependency_type: "all" + update_type: "semver:minor" allowed_updates: - match: dependency_type: "development" @@ -38,4 +42,4 @@ update_configs: - package_manager: "python" directory: "/" - update_schedule: "weekly" \ No newline at end of file + update_schedule: "weekly" diff --git a/.devcontainer/Dockerfile b/.devcontainer/Dockerfile new file mode 100644 index 00000000000..db421a0903d --- /dev/null +++ b/.devcontainer/Dockerfile @@ -0,0 +1,16 @@ +# See here for image contents: https://github.com/microsoft/vscode-dev-containers/tree/v0.209.6/containers/javascript-node/.devcontainer/base.Dockerfile + +# [Choice] Node.js version (use -bullseye variants on local arm64/Apple Silicon): 16, 14, 12, 16-bullseye, 14-bullseye, 12-bullseye, 16-buster, 14-buster, 12-buster +ARG VARIANT="16-bullseye" +FROM mcr.microsoft.com/vscode/devcontainers/javascript-node:0-${VARIANT} + +# [Optional] Uncomment this section to install additional OS packages. +# RUN apt-get update && export DEBIAN_FRONTEND=noninteractive \ +# && apt-get -y install --no-install-recommends + +# [Optional] Uncomment if you want to install an additional version of node using nvm +# ARG EXTRA_NODE_VERSION=10 +# RUN su node -c "source /usr/local/share/nvm/nvm.sh && nvm install ${EXTRA_NODE_VERSION}" + +# [Optional] Uncomment if you want to install more global node modules +# RUN su node -c "npm install -g " diff --git a/.devcontainer/devcontainer.json b/.devcontainer/devcontainer.json new file mode 100644 index 00000000000..9d0e6757a1d --- /dev/null +++ b/.devcontainer/devcontainer.json @@ -0,0 +1,30 @@ +// For format details, see https://aka.ms/devcontainer.json. For config options, see the README at: +// https://github.com/microsoft/vscode-dev-containers/tree/v0.209.6/containers/javascript-node +{ + "name": "Node.js", + "build": { + "dockerfile": "Dockerfile", + // Update 'VARIANT' to pick a Node version: 16, 14, 12. + // Append -bullseye or -buster to pin to an OS version. + // Use -bullseye variants on local arm64/Apple Silicon. + "args": { "VARIANT": "16-bullseye" } + }, + + // Set *default* container specific settings.json values on container create. + "settings": {}, + + // Add the IDs of extensions you want installed when the container is created. + "extensions": ["dbaeumer.vscode-eslint"], + + // Use 'forwardPorts' to make a list of ports inside the container available locally. + // "forwardPorts": [], + + // Use 'postCreateCommand' to run commands after the container is created. + // "postCreateCommand": "yarn install", + + // Comment out connect as root instead. More info: https://aka.ms/vscode-remote/containers/non-root. + "remoteUser": "node", + "features": { + "git": "latest" + } +} diff --git a/.dockerfilelintrc b/.dockerfilelintrc new file mode 100644 index 00000000000..70f6afc0848 --- /dev/null +++ b/.dockerfilelintrc @@ -0,0 +1,4 @@ +--- +rules: + # Base images should not use the latest tag + latest_tag: off diff --git a/.dockerignore b/.dockerignore new file mode 100644 index 00000000000..076fcb9516d --- /dev/null +++ b/.dockerignore @@ -0,0 +1,21 @@ +.dependabot +.github +.husky +.idea +reports +scripts +images +k8s +cla +traffic +makefiles +node_modules +tilt_modules +okteto +release +site +temp +venv + +npm-debug.log +.gitignore diff --git a/.editorconfig b/.editorconfig new file mode 100644 index 00000000000..ff1592b8b72 --- /dev/null +++ b/.editorconfig @@ -0,0 +1,34 @@ +# http://editorconfig.org +root = true + +[*] +indent_size = 2 +# Possible values - tab, space +indent_style = space +# Possible values - lf, crlf, cr +end_of_line = lf +# Possible values - latin1, utf-8, utf-16be, utf-16le +charset = utf-8 +insert_final_newline = true +trim_trailing_whitespace = true +max_line_length = 120 + +[*.{js, ts}] +indent_size = 2 +max_line_length = 100 + +[*.{yml, yaml}] +indent_size = 2 + +[*.{html, xml}] +indent_size = 4 + +[*.{css, scss, json}] +indent_size = 4 + +[*.{md, markdown}] +max_line_length = off +trim_trailing_whitespace = false + +[*.sh] +indent_size = 4 diff --git a/.env.example b/.env.example new file mode 100644 index 00000000000..0268e936f2f --- /dev/null +++ b/.env.example @@ -0,0 +1,35 @@ +##################################################### +###### General Configuration +##################################################### +COMPOSE_PROJECT_NAME=styled-java-patterns +COMPOSE_HTTP_TIMEOUT=240 + +VOLUMES_DRIVER=local +NETWORKS_DRIVER=bridge + +WORKSPACE_TIMEZONE=UTC + +IMAGE_SOURCE=node +IMAGE_TAG=12-buster + +TILT_WATCH_WINDOWS_BUFFER_SIZE=10265536 + +UID=502 +GID=20 + +##################################################### +###### Services Configuration +##################################################### +DOCKER_TAG=dev +DOCKER_FILE=./distribution/docker-images/$DOCKER_TAG.Dockerfile + +APP_NAME=styled-java-patterns +APP_HOST_NAME=${APP_NAME} +APP_CONTAINER_NAME=${APP_NAME} +APP_IMAGE_NAME=${APP_NAME} + +APP_SRC_DIR=./ +APP_DATA_DIR=./data +APP_TEMP_DIR=/tmp + +ENABLE_MKDOCS_SIMPLE_HOOKS=true diff --git a/.env.json b/.env.json new file mode 100644 index 00000000000..a40f43fc373 --- /dev/null +++ b/.env.json @@ -0,0 +1,4 @@ +{ + "DOCKER_IMAGE_JAVA_PATTERNS": "styled-java-patterns", + "ENABLE_MKDOCS_SIMPLE_HOOKS": "true" +} diff --git a/.git-blame-ignore-revs b/.git-blame-ignore-revs new file mode 100644 index 00000000000..8ea59bf4269 --- /dev/null +++ b/.git-blame-ignore-revs @@ -0,0 +1,25 @@ +# This file contains a list of commits that are not likely what you +# are looking for in a blame, such as mass reformatting or renaming. +# You can set this file as a default ignore file for blame by running +# the following command. +# +# $ git config blame.ignoreRevsFile .git-blame-ignore-revs +# +# To temporarily not use this file add +# --ignore-revs-file="" +# to your blame command. +# +# The ignoreRevsFile can't be set globally due to blame failing if the file isn't present. +# To not have to set the option in every repository it is needed in, +# save the following script in your path with the name "git-bblame" +# now you can run +# $ git bblame $FILE +# to use the .git-blame-ignore-revs file if it is present. +# +# #!/usr/bin/env bash +# repo_root=$(git rev-parse --show-toplevel) +# if [[ -e $repo_root/.git-blame-ignore-revs ]]; then +# git blame --ignore-revs-file="$repo_root/.git-blame-ignore-revs" $@ +# else +# git blame $@ +# fi diff --git a/.gitattributes b/.gitattributes index 5448a41c3e0..dab1f04d1fe 100644 --- a/.gitattributes +++ b/.gitattributes @@ -14,7 +14,7 @@ *.html text *.java text *.js text -*.json text +*.json linguist-language=JSON-with-Comments *.less text *.properties text *.sass text diff --git a/.gitbook.yaml b/.gitbook.yaml index 207fec18dda..f24a31763b9 100644 --- a/.gitbook.yaml +++ b/.gitbook.yaml @@ -1,6 +1,6 @@ root: ./docs/ -​structure: +structure: user-guide: changelog: ./user-guide/changelog.md dependency: ./user-guide/dependency.md @@ -25,8 +25,8 @@ root: ./docs/ links: info: ./links/info.md -redirects: +redirects: msin: ./README.md - info: ./SUMMARY.md​ + info: ./SUMMARY.md help: ./user-guide/support.md - start: ./user-guide/getting-started.md \ No newline at end of file + start: ./user-guide/getting-started.md diff --git a/.github/CONTRIBUTING.md b/.github/CONTRIBUTING.md deleted file mode 100644 index b789a1767a6..00000000000 --- a/.github/CONTRIBUTING.md +++ /dev/null @@ -1,92 +0,0 @@ -# Contributing - -When contributing to this repository, please first discuss the change you wish to make via issue, -email, or any other method with the owners of this repository before making a change. - -Please note we have a code of conduct, please follow it in all your interactions with the project. - -## Pull Request Process - -1. Ensure any install or build dependencies are removed before the end of the layer when doing a - build. -2. Update the README.md with details of changes to the interface, this includes new environment - variables, exposed ports, useful file locations and container parameters. -3. Increase the version numbers in any examples files and the README.md to the new version that this - Pull Request would represent. The versioning scheme we use is [SemVer](http://semver.org/). -4. You may merge the Pull Request in once you have the sign-off of two other developers, or if you - do not have permission to do that, you may request the second reviewer to merge it for you. - -## Code of Conduct - -### Our Pledge - -In the interest of fostering an open and welcoming environment, we as -contributors and maintainers pledge to making participation in our project and -our community a harassment-free experience for everyone, regardless of age, body -size, disability, ethnicity, gender identity and expression, level of experience, -nationality, personal appearance, race, religion, or sexual identity and -orientation. - -### Our Standards - -Examples of behavior that contributes to creating a positive environment -include: - -* Using welcoming and inclusive language -* Being respectful of differing viewpoints and experiences -* Gracefully accepting constructive criticism -* Focusing on what is best for the community -* Showing empathy towards other community members - -Examples of unacceptable behavior by participants include: - -* The use of sexualized language or imagery and unwelcome sexual attention or -advances -* Trolling, insulting/derogatory comments, and personal or political attacks -* Public or private harassment -* Publishing others' private information, such as a physical or electronic - address, without explicit permission -* Other conduct which could reasonably be considered inappropriate in a - professional setting - -### Our Responsibilities - -Project maintainers are responsible for clarifying the standards of acceptable -behavior and are expected to take appropriate and fair corrective action in -response to any instances of unacceptable behavior. - -Project maintainers 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, or to ban temporarily or -permanently any contributor for other behaviors that they deem inappropriate, -threatening, offensive, or harmful. - -### Scope - -This Code of Conduct applies both within project spaces and in public spaces -when an individual is representing the project or its community. Examples of -representing a project or community include using an official project e-mail -address, posting via an official social media account, or acting as an appointed -representative at an online or offline event. Representation of a project may be -further defined and clarified by project maintainers. - -### Enforcement - -Instances of abusive, harassing, or otherwise unacceptable behavior may be -reported by contacting the project team at [INSERT EMAIL ADDRESS]. All -complaints will be reviewed and investigated and will result in a response that -is deemed necessary and appropriate to the circumstances. The project team is -obligated to maintain confidentiality with regard to the reporter of an incident. -Further details of specific enforcement policies may be posted separately. - -Project maintainers who do not follow or enforce the Code of Conduct in good -faith may face temporary or permanent repercussions as determined by other -members of the project's leadership. - -### Attribution - -This Code of Conduct is adapted from the [Contributor Covenant][homepage], version 1.4, -available at [http://contributor-covenant.org/version/1/4][version] - -[homepage]: http://contributor-covenant.org -[version]: http://contributor-covenant.org/version/1/4/ diff --git a/.github/CONTRIBUTORS.svg b/.github/CONTRIBUTORS.svg new file mode 100644 index 00000000000..3d26782b831 --- /dev/null +++ b/.github/CONTRIBUTORS.svg @@ -0,0 +1,9 @@ + + + + + + + + + \ No newline at end of file diff --git a/.github/ISSUE_TEMPLATE/bug_report.md b/.github/ISSUE_TEMPLATE/bug_report.md index 25b76d137fb..941dd018f65 100644 --- a/.github/ISSUE_TEMPLATE/bug_report.md +++ b/.github/ISSUE_TEMPLATE/bug_report.md @@ -1,10 +1,37 @@ --- -name: Bug report +name: Bug Report about: Create a report to help us improve title: '' -labels: '' +labels: 'bug' assignees: '' --- -**Which version of Kotest are you using** +Found a bug? Maybe our community can help. + +[![GitHub Community](https://github.githubassets.com/favicons/favicon.svg)](https://github.com/AlexRogalskiy/java-patterns/issues) + +## Describe the Bug +A clear and concise description of what the bug is. + +## Expected Behavior +A clear and concise description of what you expected to happen. + +## Steps to Reproduce +Steps to reproduce the behavior: +1. Go to '...' +2. Run '....' +3. Enter '....' +4. See error + +## Screenshots +If applicable, add screenshots or logs to help explain your problem. + +## Environment (please complete the following information): + +Anything that will help us triage the bug will help. Here are some ideas: + - OS: [e.g. Linux, OSX, WSL, etc] + - Version [e.g. 10.15] + +## Additional Context +Add any other context about the problem here. diff --git a/.github/ISSUE_TEMPLATE/docs.md b/.github/ISSUE_TEMPLATE/docs.md index 4d230b87ca4..521ee21e401 100644 --- a/.github/ISSUE_TEMPLATE/docs.md +++ b/.github/ISSUE_TEMPLATE/docs.md @@ -1,5 +1,5 @@ --- -name: Documentation request +name: Documentation Request about: Suggest an improvement to the documentation title: '' labels: 'documentation' @@ -7,4 +7,4 @@ assignees: '' --- -Please describe here what you would like to see documented. +***Please describe here what you would like to see documented.*** diff --git a/.github/ISSUE_TEMPLATE/feature_request.md b/.github/ISSUE_TEMPLATE/feature_request.md index 514172dac24..5709d72633d 100644 --- a/.github/ISSUE_TEMPLATE/feature_request.md +++ b/.github/ISSUE_TEMPLATE/feature_request.md @@ -1,10 +1,36 @@ --- -name: Feature request +name: Feature Request about: Suggest an idea for this project title: '' -labels: 'enhancement' +labels: 'feature request' assignees: '' --- -**Please describe the feature you'd like to see including any solutions in mind if you have any** +Have a question? Please checkout our community or visit us at [Official Website](https://sensiblemetrics.io). + +[![GitHub Community](https://github.githubassets.com/favicons/favicon.svg)](https://github.com/AlexRogalskiy/java-patterns/issues) + +## Describe the Feature + +A clear and concise description of what the feature is. + +## Expected Behavior + +A clear and concise description of what you expected to happen. + +## Use Case + +Is your feature request related to a problem/challenge you are trying to solve? Please provide some additional context of why this feature or capability will be valuable. + +## Describe Ideal Solution + +A clear and concise description of what you want to happen. If you don't know, that's okay. + +## Alternatives Considered + +Explain what alternative solutions or features you've considered. + +## Additional Context + +Add any other context or screenshots about the feature request here. diff --git a/.github/ISSUE_TEMPLATE/question.md b/.github/ISSUE_TEMPLATE/question.md index c630090e85a..942defad157 100644 --- a/.github/ISSUE_TEMPLATE/question.md +++ b/.github/ISSUE_TEMPLATE/question.md @@ -1,10 +1,10 @@ --- name: Question -about: Questions on kotest usage +about: Questions on usage title: '' labels: '' assignees: '' --- -**Please consider asking your question on our slack channel #kotest or in stack overflow (and tagging with kotest). The github issue tracker is for bugs and feature requests.** +***Please consider asking your question on our community website. The github issue tracker is for bugs and feature requests.*** diff --git a/.github/actions/helm/action.yml b/.github/actions/helm/action.yml new file mode 100644 index 00000000000..ba0c803876d --- /dev/null +++ b/.github/actions/helm/action.yml @@ -0,0 +1,33 @@ +name: Setup Helm CLI +description: A GitHub Action for running Helm commands +author: Stefan Prodan +branding: + color: blue + icon: command +inputs: + version: + description: "Helm version" + required: true +runs: + using: composite + steps: + - name: "Download helm binary to tmp" + shell: bash + run: | + VERSION=${{ inputs.version }} + BIN_URL="https://get.helm.sh/helm-v${VERSION}-linux-amd64.tar.gz" + curl -sL ${BIN_URL} -o /tmp/helm.tar.gz + mkdir -p /tmp/helm + tar -C /tmp/helm/ -zxvf /tmp/helm.tar.gz + - name: "Add helm binary to /usr/local/bin" + shell: bash + run: | + sudo cp /tmp/helm/linux-amd64/helm /usr/local/bin + - name: "Cleanup tmp" + shell: bash + run: | + rm -rf /tmp/helm/ /tmp/helm.tar.gz + - name: "Verify correct installation of binary" + shell: bash + run: | + helm version diff --git a/.github/actions/release-notes/Dockerfile b/.github/actions/release-notes/Dockerfile new file mode 100644 index 00000000000..97429a0fcc6 --- /dev/null +++ b/.github/actions/release-notes/Dockerfile @@ -0,0 +1,6 @@ +FROM stefanprodan/alpine-base:latest + +COPY entrypoint.sh /entrypoint.sh +RUN chmod +x /entrypoint.sh + +ENTRYPOINT ["/entrypoint.sh"] diff --git a/.github/actions/release-notes/action.yml b/.github/actions/release-notes/action.yml new file mode 100644 index 00000000000..305dcccb74d --- /dev/null +++ b/.github/actions/release-notes/action.yml @@ -0,0 +1,9 @@ +name: 'github-release-notes' +description: 'A GitHub Action to run github-release-notes commands' +author: 'Stefan Prodan' +branding: + icon: 'command' + color: 'blue' +runs: + using: 'docker' + image: 'Dockerfile' diff --git a/.github/actions/release-notes/entrypoint.sh b/.github/actions/release-notes/entrypoint.sh new file mode 100644 index 00000000000..55ee6d21879 --- /dev/null +++ b/.github/actions/release-notes/entrypoint.sh @@ -0,0 +1,25 @@ +#!/usr/bin/env bash + +set -o errexit +set -o pipefail + +VERSION=0.2.0 +BIN_DIR="$GITHUB_WORKSPACE/bin" + +main() { + mkdir -p ${BIN_DIR} + tmpDir=$(mktemp -d) + + pushd $tmpDir >& /dev/null + + curl -sSL https://github.com/buchanae/github-release-notes/releases/download/${VERSION}/github-release-notes-linux-amd64-${VERSION}.tar.gz | tar xz + cp github-release-notes ${BIN_DIR}/github-release-notes + + popd >& /dev/null + rm -rf $tmpDir +} + +main + +echo "$BIN_DIR" >> $GITHUB_PATH +echo "$RUNNER_WORKSPACE/$(basename $GITHUB_REPOSITORY)/bin" >> $GITHUB_PATH diff --git a/.github/actions/skip/action.yml b/.github/actions/skip/action.yml new file mode 100644 index 00000000000..053edc15c6e --- /dev/null +++ b/.github/actions/skip/action.yml @@ -0,0 +1,74 @@ +# - name: Set Skip Env Var +# uses: ./.github/actions/skip +# - name: Cache local Maven repository +# if: env.SKIP_CI != 'true' + +name: "Set Skip Env Var" +description: "Action to set the SKIP_CI environment variable indicating that we should skip CI jobs" +inputs: + paths: + description: >- + Set the SKIP_CI environment variable when and only when all the changed files located in one of the path, + the paths is shell-style pattern. + required: false + default: >- + "*.md" + "*.txt" + "skywalking-ui" + ".asf.yaml" + ".dlc.yaml" + ".licenserc.yaml" + "docs/menu.yml" + ".github/actions/skip/action.yml" + ".github/workflows/codeql.yaml" + "dist-material/release-docs" + "test/plugin/*" + "*/component-libraries.yml" + +runs: + using: "composite" + steps: + - name: Check Changed Files And Set Env Var + shell: bash + run: | + if [[ "${{ github.event_name }}" != "pull_request" ]]; then + exit 0 + fi + + BASE_SHA=$(jq -r '.pull_request.base.sha' $GITHUB_EVENT_PATH) + echo "Base sha is $BASE_SHA, head sha is $GITHUB_SHA" + + git fetch --no-tags --progress --recurse-submodules --depth=1 origin ${BASE_SHA}:origin/${BASE_SHA} + BASE_SHA=origin/${BASE_SHA} + echo "Base sha is $BASE_SHA, head sha is $GITHUB_SHA" + + if ! files=$(git --no-pager diff --name-only ${GITHUB_SHA} ${BASE_SHA}); then + exit 1 + fi + + echo "Ignore pattern:" + for pattern in $(echo '${{ inputs.paths }}'); do + echo $pattern + done + + echo "Changed files:" + for file in ${files}; do + echo $file + done + + echo "SKIP_CI=true" >> $GITHUB_ENV + for file in ${files}; do + matched=0 + for pattern in $(echo '${{ inputs.paths }}'); do + pattern=$(echo "$pattern" | sed 's/"//g') + if eval "[[ '$file' == $pattern ]]"; then + matched=1 + break + fi + done + if [[ "$matched" == "0" ]]; then + echo "$file doesn't match pattern $(echo '${{ inputs.paths }}'), stop checking" + echo "SKIP_CI=false" >> $GITHUB_ENV + break + fi + done diff --git a/.github/actions/spelling/README.md b/.github/actions/spelling/README.md new file mode 100644 index 00000000000..71d377ce726 --- /dev/null +++ b/.github/actions/spelling/README.md @@ -0,0 +1,15 @@ +# check-spelling/check-spelling configuration + +File | Purpose | Format | Info +-|-|-|- +[dictionary.txt](dictionary.txt) | Replacement dictionary (creating this file will override the default dictionary) | one word per line | [dictionary](https://github.com/check-spelling/check-spelling/wiki/Configuration#dictionary) +[allow.txt](allow.txt) | Add words to the dictionary | one word per line (only letters and `'`s allowed) | [allow](https://github.com/check-spelling/check-spelling/wiki/Configuration#allow) +[reject.txt](reject.txt) | Remove words from the dictionary (after allow) | grep pattern matching whole dictionary words | [reject](https://github.com/check-spelling/check-spelling/wiki/Configuration-Examples%3A-reject) +[excludes.txt](excludes.txt) | Files to ignore entirely | perl regular expression | [excludes](https://github.com/check-spelling/check-spelling/wiki/Configuration-Examples%3A-excludes) +[only.txt](only.txt) | Only check matching files (applied after excludes) | perl regular expression | [only](https://github.com/check-spelling/check-spelling/wiki/Configuration-Examples%3A-only) +[patterns.txt](patterns.txt) | Patterns to ignore from checked lines | perl regular expression (order matters, first match wins) | [patterns](https://github.com/check-spelling/check-spelling/wiki/Configuration-Examples%3A-patterns) +[expect.txt](expect.txt) | Expected words that aren't in the dictionary | one word per line (sorted, alphabetically) | [expect](https://github.com/check-spelling/check-spelling/wiki/Configuration#expect) +[advice.txt](advice.txt) | Supplement for GitHub comment when unrecognized words are found | GitHub Markdown | [advice](https://github.com/check-spelling/check-spelling/wiki/Configuration-Examples%3A-advice) + +Note: you can replace any of these files with a directory by the same name (minus the `.txt` extension) and +then include multiple files (with a `.txt` extension) inside that directory to merge multiple files together. diff --git a/.github/actions/spelling/advice.md b/.github/actions/spelling/advice.md new file mode 100644 index 00000000000..5cde8ef25cf --- /dev/null +++ b/.github/actions/spelling/advice.md @@ -0,0 +1,28 @@ + + +
If you see a bunch of garbage + +If it relates to a ... +
well-formed pattern + +See if there's a [pattern](https://github.com/check-spelling/check-spelling/wiki/Configuration-Examples:-patterns) that would match it. + +If not, try writing one and adding it to the `patterns.txt` file. + +Patterns are Perl 5 Regular Expressions - you can [test]( +https://www.regexplanet.com/advanced/perl/) yours before committing to verify it will match your lines. + +Note that patterns can't match multiline strings. +
+
binary-ish string + +Please add a file path to the `excludes.txt` file instead of just accepting the garbage. + +File paths are Perl 5 Regular Expressions - you can [test]( +https://www.regexplanet.com/advanced/perl/) yours before committing to verify it will match your files. + +`^` refers to the file's path from the root of the repository, so `^README\.md$` would exclude [README.md]( +../tree/HEAD/README.md) (on whichever branch you're using). +
+ +
diff --git a/.github/actions/spelling/allow.txt b/.github/actions/spelling/allow.txt new file mode 100644 index 00000000000..e69de29bb2d diff --git a/.github/actions/spelling/excludes.txt b/.github/actions/spelling/excludes.txt new file mode 100644 index 00000000000..e5db6127cb7 --- /dev/null +++ b/.github/actions/spelling/excludes.txt @@ -0,0 +1,27 @@ +# See https://github.com/check-spelling/check-spelling/wiki/Configuration-Examples:-excludes + +(?:^|/)(?i)COPYRIGHT +(?:^|/)(?i)LICEN[CS]E +(?:^|/)package(?:-lock|)\.json$ +(?:^|/)vendor/ + +/fonts/ +ignore$ + +\.avi$ +\.eot$ +\.ico$ +\.jpe?g$ +\.lock$ +\.map$ +\.min\. +\.mod$ +\.mp[34]$ +\.png$ +\.svg$ +\.ttf$ +\.wav$ +\.woff$ +\.woff2$ + +^\.github/ diff --git a/.github/actions/spelling/expect.txt b/.github/actions/spelling/expect.txt new file mode 100644 index 00000000000..83c5d112710 --- /dev/null +++ b/.github/actions/spelling/expect.txt @@ -0,0 +1,760 @@ +acl +activesupport +adaoraul +addons +aeiou +AFile +afterall +Alexey +alfredxing +algolia +allowfullscreen +Anatoliy +andreyvit +Ankit +Anning +apps +appveyor +arengu +args +ariejan +arounds +asciinema +asdf +ashmaroli +attr +Autobuild +autocompletion +autogenerated +Autolink +autoload +autoreconf +autosave +awood +aws +awscli +backend +backport +backtick +barcamp +baseurl +bashrc +baz +bbatsov +bdimcheff +bellvat +benbalter +Beney +binstubs +bip +bitbucket +blog +Blogger +blogging +bonafide +Bou +breadcrumbs +briandoll +bridgetown +bridgetownrb +brightbox +brighterplanet +buddyworks +Bugfix +Burela +byparker +cachegrind +calavera +callgraphs +cartera +cavalle +CDNs +cgi +changefreq +changelog +chango +charset +Chayoung +chcp +chdir +Cheatsheet +Checkoway +chmod +chown +Chrononaut +chruby +cibuild +cimg +circleci +CJK +classname +cloudcannon +Cloudinary +cloudsh +CLT +codebase +codeclimate +CODEOWNERS +coderay +codeslinger +coffeescript +colorator +commandline +commonmark +compat +compatibilize +concat +config +configyml +contentblocks +CORS +Cov +CRLFs +cron +crontab +cruft +css +csv +Currin +CVE +CWD +cygwin +daringfireball +Dassonville +datafiles +datetime +DCEU +Debian +debuggability +defunkt +delegators +deployer +deps +dest +Devkit +devops +digitalocean +dirs +disqus +ditaa +dnf +doclist +doctype +doeorg +dommmel +dotfile +Dousse +downcase +downcased +duckduckgo +duritong +Dusseau +dysinger +ecf +editorconfig +eduardoboucas +Elasticsearch +elsif +Emacs +emails +emoji +endcapture +endcomment +endfor +endhighlight +endif +endraw +endrender +endtablerow +Enumerables +EOL +erb +errordocument +Espinaco +eugenebolshakov +evaled +exe +execjs +extensionpack +extname +exts +favicon +Fengyun +ffi +figcaption +filesystem +Finazzo +firstimage +FIXME +flakey +flickr +fnmatch +fontello +forloop +formcake +formcarry +formester +formingo +formkeep +formspark +formspree +formx +Forwardable +frameborder +freenode +frontmatter +fsnotify +ftp +fullstory +Gaudino +gcc +gcnovus +gemfile +gemset +gemspec +getform +getset +getsimpleform +gettalong +gfm +ghp +ghpages +giraffeacademy +github +githubcom +githubusercontent +gitignore +gitlab +gjtorikian +globbed +globbing +google +gotcha +Goulven +gridism +GSo +gsub +gsubbing +Hakiri +hardcode +hashbang +hashmap +helaili +henrik +heredoc +heroku +highlighter +hilighting +Hoizey +homepage +hostman +hostname +href +htaccess +htm +html +htmlproofer +http +httpd +httpdocs +hyperlinks +Iaa +ial +ico +icomoon +iconset +ified +iframe +img +Impl +Inlining +invokables +irc +ivey +ize +jalali +jameshamann +jamstackthemes +jan +javascript +Jax +jayferd +jcon +jdoe +jeffreytse +jeffrydegrande +Jekpack +jekyllbot +jekyllconf +Jekyllers +Jekyllin +Jekylling +jekyllized +jekylllayoutconcept +jekyllrb +jekyllthemes +jemoji +jmcglone +jneen +johnreilly +jpg +jqr +jruby +json +jsonify +juretta +jwarby +Kacper +Kasberg +kbd +Kentico +Kewin +keycdn +kickster +Kinnula +kiwifruit +Kolesky +konklone +kontent +Kotvinsky +kramdown +Kulig +Kwokfu +Lamprecht +laquo +lastmod +launchctl +launchy +laurilehmijoki +ldquo +learnxinyminutes +lexer +LGTM +libcurl +libffi +lifecycle +lightgray +limjh +linenos +linkify +linux +liufengyun +livereload +localheinz +localhost +localtime +Locher +loglevel +Losslessly +lovin +lsi +lsquo +lstrip +lyche +macos +macromates +mademistakes +mailto +Manmeet +markdownify +Maroli +Marsceill +maruku +mathjax +mathml +mattr +Maximiliano +mchung +mdash +memberspace +Memoize +memoized +memoizing +mentoring +mergable +Mertcan +mertkahyaoglu +metadata +microdata +microsoft +mimetype +mingw +minibundle +minifier +minitest +Mittal +mixin +mkasberg +mkd +mkdir +mkdn +mkdown +mmistakes +modernizr +mojombo +moncefbelyamani +moz +mreid +msdn +mswin +MSYS +mtime +multiline +munging +Mvvm +myblog +mycontent +mydata +mydoc +myimage +mypage +myposts +myproject +myrepo +mysite +myvalue +myvar +myvariable +Nadjib +nakanishi +namespace +namespaced +navbar +nbsp +nearlyfreespeech +nethack +netlify +netlifycms +Neue +nginx +ngx +nielsenramon +nior +nodejs +noifniof +nokogiri +notextile +onclick +onebox +oneclick +onschedule +opensource +openssl +Optim +orderofinterpretation +orgs +OSVDB +osx +packagecontrol +pacman +paginator +pandoc +pantulis +params +parkr +parseable +paspagon +passthrough +pathawks +Pathutil +paywall +pdf +Pelykh +permalink +PHP +pinboard +Piwigo +pjhyett +pkill +pkpass +placeholders +planetjekyll +plantuml +plugin +png +podcasts +popen +Porcel +Posterous +postfiles +postlayout +postmodern +preinstalled +prepends +Prioritise +Probot +projectlist +pubstorm +pufuwozu +pwa +pwd +pygments +qrush +Quaid +quickstart +rackup +Rakefile +raquo +razorops +rbenv +rdiscount +rdoc +rdquo +readme +realz +rebund +redcarpet +redcloth +redgreen +redhat +refactor +refactoring +Refheap +regen +regex +regexp +remi +reqs +Responsify +revertable +rfc +rfelix +RHEL +ridk +roadmap +rowspan +rspec +rsquo +rss +rstrip +rsync +rtomayko +Rubo +rubocop +rubychan +rubygem +rubyinstaller +rubyprof +Ruparelia +Rusiczki +rvm +ryanflorence +saas +samplelist +samrayner +sandboxed +Sassc +sassify +schemastore +Schroers +Schwartzian +scp +screenshot +scrollbar +scroller +scss +scssify +sdk +SDKROOT +sectore +semver +seo +serverless +setenv +SFTP +shingo +shopify +shortlog +shoulda +sieversii +sigpipe +simplecov +Singhaniya +siteleaf +sitemap +SITENAME +Slicehost +slugified +slugify +smartforms +smartify +snipcart +socio +somedir +sonnym +Sonomy +sourced +sourcemaps +spam +spotify +src +ssg +ssh +SSL +stackoverflow +standalone +staticfiles +staticman +statictastic +STDERR +stdout +Stickyposts +strftime +stringified +Stringify +styleguide +stylesheet +subdir +subdomain +subfolder +subfolderitems +subnav +subpages +subpath +subpiece +subsubfolderitems +subthing +subvalues +subwidget +sudo +superdirectories +superdirs +SUSE +sverrirs +svg +svn +swfobject +swupd +symlink +symlinking +tablerow +tada +Taillandier +talkyard +tbody +technicalpickles +templating +templatize +Termux +textilize +textpattern +thead +therubyracer +Theunissen +Thornquest +thoughtbot +throughs +Tidelift +timeago +timezone +titleize +TLS +tmm +tmp +toc +tok +tomjoht +toml +tomo +toolset +toshimaru +triaged +triaging +truncatewords +tsv +ttf +Tudou +Tumblr +Tweetsert +txtpen +Tyborska +tzinfo +ubuntu +uby +ujh +ultron +undumpable +unencode +Unescape +unescaping +unicode +uniq +upcase +uppercasing +uri +url +urlset +username +usr +utf +utils +utime +utm +vanpelt +Vasovi +vendored +vercel +versioned +versioning +vertycal +Veyor +vilcans +Vishesh +visualstudio +vnd +vohedge +vps +vscode +vwochnik +Walkthroughs +wdm +We'd +webfont +webhook +webhosting +webmentions +webrick +website +weekdate +whitelist +whitelisting +wiki +wikipedia +wildcards +willcodeforfoo +woff +wordpress +Workaround +workflow +wsl +www +xcode +xcrun +xdg +Xhmikos +xhtml +Xiaoiver +XMinutes +xml +xmlns +xmlschema +yajl +yaml +Yarp +Yashu +Yastreb +yml +Youku +youtube +yunbox +zeropadding +Zlatan +zlib +zoneinfo +zpinter +Zsh +zshrc +zypper +zzot +frontend +prefetching diff --git a/.github/actions/spelling/only.txt b/.github/actions/spelling/only.txt new file mode 100644 index 00000000000..af5f5b1cceb --- /dev/null +++ b/.github/actions/spelling/only.txt @@ -0,0 +1 @@ +^docs/.*\.md$ diff --git a/.github/actions/spelling/patterns.txt b/.github/actions/spelling/patterns.txt new file mode 100644 index 00000000000..341825df898 --- /dev/null +++ b/.github/actions/spelling/patterns.txt @@ -0,0 +1,75 @@ +# See https://github.com/check-spelling/check-spelling/wiki/Configuration-Examples:-patterns + +# data urls +(['"])data:.*?\g{-1} +data:[-a-zA-Z=;:/0-9+]*,\S* + +# YouTube +https?://(?:(?:www\.|)youtube\.com|youtu.be)/(?:channel/|embed/|playlist\?list=|watch\?v=|v/|)[-a-zA-Z0-9?&=_]* +<\s*youtube\s+id=['"][-a-zA-Z0-9?_]*['"] +\bimg\.youtube\.com/vi/[-a-zA-Z0-9?&=_]* +youtube_id:\s*[-a-zA-Z0-9?&=_]* + +# Google Analytics +\bgoogle-analytics\.com/collect.[-0-9a-zA-Z?%=&_.~]* + +# Google APIs +\bgoogleapis\.com/[a-z]+/v\d+/[a-z]+/[@./?=\w]+ +\b[-a-zA-Z0-9.]*\bstorage\d*\.googleapis\.com(?:/\S*|) + +# Google Calendar +\bcalendar\.google\.com/calendar(?:/u/\d+|)/embed\?src=[@./?=\w&%]+ +\w+\@group\.calendar\.google\.com\b + +# Google DataStudio +\bdatastudio\.google\.com/(?:(?:c/|)u/\d+/|)(?:embed/|)(?:open|reporting|datasources|s)/[-0-9a-zA-Z]+(?:/page/[-0-9a-zA-Z]+|) + +# The leading `/` here is as opposed to the `\b` above +# ... a short way to match `https://` or `http://` since most urls have one of those prefixes +# Google Docs +/docs\.google\.com/[a-z]+/d/(?:e/|)[0-9a-zA-Z_-]+/? + +# Google Groups +https://groups\.google\.com/d/topic/[^/]+/[a-zA-Z0-9]+/discussion +https://groups\.google\.com/d/msg/[^/]+/[a-zA-Z0-9]+/[a-zA-Z0-9]+ + +# Google themes +themes\.googleusercontent\.com/static/fonts/[^/]+/v\d+/[^.]+. + +# Google CDN +\bclients2\.google(?:usercontent|)\.com[-0-9a-zA-Z/.]* + +# Goo.gl +/goo\.gl/[a-zA-Z0-9]+ + +# Google Chrome Store +\bchrome\.google\.com/webstore/detail/\w*(?:/\w*|) + +# google_site_verification: +google_site_verification: [-a-zA-Z=;:/0-9+]* + +# Ruby-doc.org +https://ruby-doc\.org/.* + +# Contributors +alphabetical order.*:.* +twitter_handle: .* + +# apiKey +apiKey: '[a-f0-9]+' + +# FontAwesome +/(?:(?i)FontAwesome\.\w+\?\w+) + +# Lorem +(?:\w|\s|[,.])*\b(?i)(?:amet|consectetur|cursus|dolor|eros|ipsum|lacus|libero|ligula|lorem|magna|neque|nulla|suscipit|tempus|ultrices)\b(?:\w|\s|[,.])* + +# URL escaped characters +\%[0-9A-F]{2} +# c99 hex digits (not the full format, just one I've seen) + +# hex digits including css/html color classes: +(?:[\\0][xX]|\\u|[uU]\+|#x?|\%23)[0-9a-fA-FgGrR_]{2,}(?:[uU]?[lL]{0,2}|u\d+)\b + +# ignore long runs of a single character: +\b([A-Za-z])\g{-1}{3,}\b diff --git a/.github/actions/spelling/reject.txt b/.github/actions/spelling/reject.txt new file mode 100644 index 00000000000..a5ba6f6390e --- /dev/null +++ b/.github/actions/spelling/reject.txt @@ -0,0 +1,7 @@ +^attache$ +benefitting +occurence +Sorce +^[Ss]pae +^untill +^wether diff --git a/.github/auto-comment.yml b/.github/auto-comment.yml new file mode 100644 index 00000000000..4107090c477 --- /dev/null +++ b/.github/auto-comment.yml @@ -0,0 +1,12 @@ +issuesOpened: > + Thank you for raising this issue! We will try and get back to you as soon as possible. + Please make sure you format it properly, followed our [code of conduct](https://github.com/AlexRogalskiy/java-patterns/blob/master/.github/CODE_OF_CONDUCT.md) and have given us as much context as possible. + + /cc @AlexRogalskiy + +pullRequestOpened: > + Thank you for raising your pull request. + Please make sure again that you have followed our [contributing guidelines](https://github.com/AlexRogalskiy/java-patterns/blob/master/.github/CONTRIBUTING.md) and the [code of conduct](https://github.com/AlexRogalskiy/java-patterns/blob/master/.github/CODE_OF_CONDUCT.md). + We will review it as soon as possible. + + /cc @AlexRogalskiy diff --git a/.github/auto-label.yml b/.github/auto-label.yml new file mode 100644 index 00000000000..f0e0d6626ce --- /dev/null +++ b/.github/auto-label.yml @@ -0,0 +1,12 @@ +docker: + - Dockerfile + - "*/*.Dockerfile" + +docs: + - docs/** + +github: + - .github/** + +scripts: + - scripts/** diff --git a/.github/codeql/codeql-config.yml b/.github/codeql/codeql-config.yml new file mode 100644 index 00000000000..de726199f67 --- /dev/null +++ b/.github/codeql/codeql-config.yml @@ -0,0 +1,7 @@ +name: "CodeQL config" + +paths-ignore: + - '**/config/**' + - '**/vendor/**' + - '**/reports/**' + - '**/scripts/**' diff --git a/.github/community-code-of-conduct.md b/.github/community-code-of-conduct.md index 8f5445bd347..e48d828d4e3 100644 --- a/.github/community-code-of-conduct.md +++ b/.github/community-code-of-conduct.md @@ -55,4 +55,4 @@ Should incidents arise, upon adjudication those found to be in violation of this ## Policy precedence -This version of the Nullables.io Community Code of Conduct may be a copy included for your convenience, and as such may not be up to date; all versions of the Nullables.io Community Code of Conduct are superseded by the version found in the [repository](https://github.com/AlexRogalskiy/gradle-java-sample), which takes precedence over any prior versions. +This version of the Nullables.io Community Code of Conduct may be a copy included for your convenience, and as such may not be up to date; all versions of the Nullables.io Community Code of Conduct are superseded by the version found in the [repository](https://github.com/AlexRogalskiy/java-patterns), which takes precedence over any prior versions. diff --git a/.github/confidentiality-agreement.md b/.github/confidentiality-agreement.md index 909ea13028c..aa35fba3649 100644 --- a/.github/confidentiality-agreement.md +++ b/.github/confidentiality-agreement.md @@ -1,7 +1,7 @@ # Confidentiality Agreement -By creating an account or using the software or services provided by Nullables.io, Inc., doing business as Nullables.io (the “Corporation”), you (the “Recipient”) expressly accept and agree to be bound by all of the terms and conditions below. If you do not accept these terms, you must not use our software or services. +By creating an account or using the software or services provided by Nullables.io, Inc., doing business as Nullables.io (the “Corporation”), you (the “Recipient”) expressly accept and agree to be bound by all of the terms and conditions below. If you do not accept these terms, you must not use our software or services. ## 1. Background diff --git a/.github/dependabot.yml b/.github/dependabot.yml index c9d9fe4d897..ff4e5a3339e 100644 --- a/.github/dependabot.yml +++ b/.github/dependabot.yml @@ -39,6 +39,17 @@ updates: # for example, `dependabot-npm_and_yarn-next_js-acorn-6.4.1` separator: "-" + - package-ecosystem: gitsubmodule + directory: "/" + schedule: + interval: daily + time: '00:00' + timezone: UTC + open-pull-requests-limit: 10 + commit-message: + prefix: "chore" + include: "scope" + - package-ecosystem: "pip" open-pull-requests-limit: 10 directory: "/" @@ -54,4 +65,4 @@ updates: - dependency-type: "all" # Labels on pull requests for version updates only labels: - - "pip dependencies" \ No newline at end of file + - "pip dependencies" diff --git a/.github/first-timers-issue-template.md b/.github/first-timers-issue-template.md new file mode 100644 index 00000000000..cf9ea9f3926 --- /dev/null +++ b/.github/first-timers-issue-template.md @@ -0,0 +1,42 @@ +### 🆕🐥☝ First Timers Only. + +This issue is reserved for people who never contributed to Open Source before. We know that the process of creating a pull request is the biggest barrier for new contributors. This issue is for you 💝 + +[About First Timers Only](http://www.firsttimersonly.com/). + +### 🤔 What you will need to know. + +Nothing. This issue is meant to welcome you to Open Source :) We are happy to walk you through the process. + +### 📋 Step by Step + +- [ ] 👌 **Join the team**: Add yourself to a support affinity team. + +- [ ] 🙋 **Claim this issue**: Comment below. + + Leave a comment that you have claimed this issue. + +- [ ] 📝 **Update** the file [$FILENAME]($BRANCH_URL) in the `$REPO` repository (press the little pen Icon) and edit the line as shown below. + + +```diff +$DIFF +``` + + +- [ ] 💾 **Commit** your changes + +- [ ] 🔀 **Start a Pull Request**. There are two ways how you can start a pull request: + + 1. If you are familiar with the terminal or would like to learn it, [here is a great tutorial](https://egghead.io/series/how-to-contribute-to-an-open-source-project-on-github) on how to send a pull request using the terminal. + + 2. You can [edit files directly in your browser](https://help.github.com/articles/editing-files-in-your-repository/) + +- [ ] 🏁 **Done** Ask in comments for a review :) + +### 🤔❓ Questions + +Leave a comment below! + + +This issue was created by [First-Timers-Bot](https://github.com/hoodiehq/first-timers-bot). diff --git a/.github/first-timers.yml b/.github/first-timers.yml new file mode 100644 index 00000000000..cc099d0db12 --- /dev/null +++ b/.github/first-timers.yml @@ -0,0 +1,6 @@ +repository: java-patterns +labels: + - good first issue + - help-wanted + - first-time-only +template: .github/first-timers-issue-template.md diff --git a/.github/gitpod.yml b/.github/gitpod.yml new file mode 100644 index 00000000000..d70651faed0 --- /dev/null +++ b/.github/gitpod.yml @@ -0,0 +1,15 @@ +pulls: + # Enable for pull requests + perform: true +# Customize a comment to post on a pull request. Comment out to use the default +# comment: + +issues: + # enable for issues + perform: true + # issues with these labels will be considered. Set to `[]` to disable for issues + labels: + - help wanted + - good first issue +# Customize a comment to post on an issue. Comment out to use the default +# comment: diff --git a/.github/labeler.yml b/.github/labeler.yml new file mode 100644 index 00000000000..3567bfde573 --- /dev/null +++ b/.github/labeler.yml @@ -0,0 +1,14 @@ +# https://github.com/actions/labeler/blob/master/README.md + +src: + - src/* + +repo: + - Dockerfile + - entrypoint.sh + +.github-actions: + - .github + +license: + - ./LICENSE diff --git a/.github/lock.yml b/.github/lock.yml index cd809780a1a..ded304589c8 100644 --- a/.github/lock.yml +++ b/.github/lock.yml @@ -1,36 +1,26 @@ # Configuration for lock-threads - https://github.com/dessant/lock-threads # Number of days of inactivity before a closed issue or pull request is locked -daysUntilLock: 60 +daysUntilLock: 180 # Skip issues and pull requests created before a given timestamp. Timestamp must # follow ISO 8601 (`YYYY-MM-DD`). Set to `false` to disable skipCreatedBefore: false -# Issues and pull requests with these labels will not be locked. Set to `[]` to disable -exemptLabels: - - backlog +# Assign `resolved` as the reason for locking. Set to `false` to disable +setLockReason: true # Label to add before locking, such as `outdated`. Set to `false` to disable lockLabel: 🔒 Locked # Comment to post before locking. Set to `false` to disable lockComment: > - This thread has been automatically locked because it has not had recent - activity. Please open a new issue for related bugs and link to relevant - comments in this thread. - -# Assign `resolved` as the reason for locking. Set to `false` to disable -setLockReason: true + ⚠️This issue has been automatically locked 🔒since there has not been + any recent activity after it was closed. Please open a new 🆕issue for related bugs + and mention this issue. Thanks! 👍 +# Issues or pull requests with these labels will not be locked +exemptLabels: + - help-wanted # Limit to only `issues` or `pulls` only: issues - -# Optionally, specify configuration settings just for `issues` or `pulls` -# issues: -# exemptLabels: -# - help-wanted -# lockLabel: outdated - -# pulls: -# daysUntilLock: 30 diff --git a/.github/no-response.yml b/.github/no-response.yml new file mode 100644 index 00000000000..1c8799d1351 --- /dev/null +++ b/.github/no-response.yml @@ -0,0 +1,15 @@ +# Configuration for probot-no-response - https://github.com/probot/no-response + +# Number of days of inactivity before an issue is closed for lack of response +daysUntilClose: 28 + +# Label requiring a response +responseRequiredLabel: more-information-needed + +# Comment to post when closing an issue for lack of response. Set to `false` to disable. +closeComment: > + This issue has been automatically closed because there has been no response + to our request for more information from the original author. With only the + information that is currently in the issue, we don't have enough information + to take action. Please reach out if you have or find the answers we need so + that we can investigate further. diff --git a/.github/privacy-policy.md b/.github/privacy-policy.md index 8c6fc7d64e6..7d67633f99f 100644 --- a/.github/privacy-policy.md +++ b/.github/privacy-policy.md @@ -2,19 +2,19 @@ # Introduction -We are committed to protecting your privacy and we encourage you to read and learn more about the terms of our privacy policy (“Privacy Policy”). +We are committed to protecting your privacy and we encourage you to read and learn more about the terms of our privacy policy (“Privacy Policy”). When we refer to “Nullables.io”, “our”, “us”, “we”, or similar self-referential language, we are referring to Nullables.io Inc. When we use the terms “you”, “your”, “yours”, “user”, “users”, “customer”, “customers”, etc., we are referring to any and all users of Nullables.io current and future Products and Services. Nullables.io provides a variety of Products and Services to our customers, which refers to and includes our website and web applications, mobile applications, integrations for other Third Party Services (such as Slack, Facebook, etc.), and platform, as well as any future applications, products, and services. By visiting, using, or submitting information to any of our Products and Services, you acknowledge that you accept the practices and policies outlined in this Privacy Policy. -Terms not defined herein shall have the meaning as provided in our Terms of Service (the “Agreement”), and incorporated herein. +Terms not defined herein shall have the meaning as provided in our Terms of Service (the “Agreement”), and incorporated herein. # Data Covered in this Policy This Privacy Policy covers our treatment of Customer Data (as defined herein) and General Data (defined herein) that we gather when you are accessing or using our Products and Services. This Privacy Policy also covers our treatment of any Customer Data that our business partners share with Nullables.io (for example, via integration with Third Party Services). -This Privacy Policy does not apply to the practices of companies that Nullables.io does not own or control, or to individuals that we do not employ or manage. In addition, this Privacy Policy does not cover how other organizations, including Third Party Services, will treat your information. If integrating our Products and Services with any Third Party Services, please refer to such Third Party Services’ privacy policy. +This Privacy Policy does not apply to the practices of companies that Nullables.io does not own or control, or to individuals that we do not employ or manage. In addition, this Privacy Policy does not cover how other organizations, including Third Party Services, will treat your information. If integrating our Products and Services with any Third Party Services, please refer to such Third Party Services’ privacy policy. ## Customer Data @@ -22,7 +22,7 @@ All content and information that you submit through use of our Products and Serv To create an account, integrate with Third Party Services, or receive information from us about future Products and Services, we may collect such Customer Data as your name and email address. In order to process billing, we may collect such Customer Data as your home or work address, telephone number, and/or credit card information. -However, this information is on an “opt-in” basis only and we will only collect such Customer Data if you specifically and expressly provide the information to us. +However, this information is on an “opt-in” basis only and we will only collect such Customer Data if you specifically and expressly provide the information to us. ## General Data @@ -31,7 +31,7 @@ In addition to the Customer Data, we may collect the following general informati - demographic information; - information from publicly accessible sources, such as blogs and comments from other users; your visit to the Site, such as pages viewed, links clicked and other similar navigation action in connection with the Site; -- standard browser information, such as your browser type, IP address, access times, and App usage data; +- standard browser information, such as your browser type, IP address, access times, and App usage data; - location data, which may be available or derived from our App, Site, or your IP address; and - information about the device on which you are accessing or using the Services. @@ -86,13 +86,13 @@ We do not sell, rent, lease, or disclose your Data. Except as described in this We may hire other companies to provide limited administrative and communication services on our behalf, such as web hosting services, the processing and delivery of mailing documents, customer support, or credit card processing services. We have the right to disclose your Data to these third party companies for the purpose of administering and maintaining the features, functions, and operations of our Products and Services. -Those companies will be permitted to obtain only such Data as is absolutely necessary for them to deliver their respective services, and we do not authorize these companies to use your Data except for the sole purpose of providing those services requested by us. +Those companies will be permitted to obtain only such Data as is absolutely necessary for them to deliver their respective services, and we do not authorize these companies to use your Data except for the sole purpose of providing those services requested by us. ## Integration with Third Party Services In order to access and/or use our Products and Services, you may be required to integrate them with your existing Third Party Services. While we do not store your passwords for these Third Party Services, we may store revokable tokens, enabling Services to communicate with each other. -If you integrate our Products and Services with a Third Party Service, we are not responsible for how such a service would use, collect, and share your Data. We very much encourage you to review privacy policy of any such Third Party Services. +If you integrate our Products and Services with a Third Party Service, we are not responsible for how such a service would use, collect, and share your Data. We very much encourage you to review privacy policy of any such Third Party Services. ## Disclosure of Customer Data @@ -103,13 +103,13 @@ You understand and agree that we may access and/or disclose Data about you witho - enforce the terms of the Agreement and Privacy Policy; - operate or conduct maintenance and repair of the Site, the App or equipment as authorized by law; - act in urgent circumstances to protect the personal safety of our users or members of the public; or -- comply with a bankruptcy, merger, acquisition, transfer of control, joint venture of other business combination. +- comply with a bankruptcy, merger, acquisition, transfer of control, joint venture of other business combination. -While we are not required to question or contest the validity of any search warrant, subpoena or other similar governmental request that we receive, we will use reasonable efforts to ensure the privacy of our users, and safeguard against overreach. +While we are not required to question or contest the validity of any search warrant, subpoena or other similar governmental request that we receive, we will use reasonable efforts to ensure the privacy of our users, and safeguard against overreach. ## Disclosure of Data in Certain Transactions -In some cases, we may choose to sell our assets. In these types of transactions, user information is typically one of the business assets that is transferred. You acknowledge that such transfers may occur, and that any acquirer of Nullables.io may continue to use your Data as set forth in this Privacy Policy. +In some cases, we may choose to sell our assets. In these types of transactions, user information is typically one of the business assets that is transferred. You acknowledge that such transfers may occur, and that any acquirer of Nullables.io may continue to use your Data as set forth in this Privacy Policy. # Security of Customer Data diff --git a/.github/scripts/close-pending.sh b/.github/scripts/close-pending.sh index 9b60563f3cc..8d4b1dd72ba 100644 --- a/.github/scripts/close-pending.sh +++ b/.github/scripts/close-pending.sh @@ -6,7 +6,7 @@ SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" >/dev/null 2>&1 && pwd)" MESSAGE=$(cat "$SCRIPT_DIR"/closing-message.txt) while IFS= read -r number && - IFS= read -r title; do +IFS= read -r title; do echo "Closing PR ($number): $title" curl -s -o /dev/null \ -X POST \ @@ -21,7 +21,7 @@ while IFS= read -r number && --header "authorization: Bearer $GITHUB_TOKEN" \ --header 'content-type: application/json' \ "https://api.github.com/repos/AlexRogalskiy/object-mappers-playground/pulls/$number" -done < <(curl -H "Content-Type: application/json" \ - --header "authorization: Bearer $GITHUB_TOKEN" \ - "https://api.github.com/search/issues?q=repo:AlexRogalskiy/object-mappers-playground+type:pr+updated:<$(date -d "-21 days" +%Y-%m-%d)+label:pending+is:open" | - jq -r '.items[] | (.number,.title)') + done < <(curl -H "Content-Type: application/json" \ + --header "authorization: Bearer $GITHUB_TOKEN" \ + "https://api.github.com/search/issues?q=repo:AlexRogalskiy/object-mappers-playground+type:pr+updated:<$(date -d "-21 days" +%Y-%m-%d)+label:pending+is:open" | +jq -r '.items[] | (.number,.title)') diff --git a/.github/scripts/comment-commands/ready.sh b/.github/scripts/comment-commands/ready.sh index c0100216f72..8a8592de7ae 100644 --- a/.github/scripts/comment-commands/ready.sh +++ b/.github/scripts/comment-commands/ready.sh @@ -5,14 +5,14 @@ MESSAGE="Blocking review request is removed." URL="$(jq -r '.issue.pull_request.url' "$GITHUB_EVENT_PATH")/reviews" set +x #GITHUB_TOKEN curl -s "$URL" | - jq -r '.[] | [.user.login, .id] | @tsv' | - grep github-actions | - awk '{print $2}' | - xargs -n1 -IISSUE_ID curl -s -o /dev/null \ - -X PUT \ - --data "$(jq --arg message "$MESSAGE" -n '{message: $message}')" \ - --header "authorization: Bearer $GITHUB_TOKEN" \ - "$URL"/ISSUE_ID/dismissals +jq -r '.[] | [.user.login, .id] | @tsv' | +grep github-actions | +awk '{print $2}' | +xargs -n1 -IISSUE_ID curl -s -o /dev/null \ + -X PUT \ + --data "$(jq --arg message "$MESSAGE" -n '{message: $message}')" \ + --header "authorization: Bearer $GITHUB_TOKEN" \ + "$URL"/ISSUE_ID/dismissals curl -s -o /dev/null \ -X DELETE \ diff --git a/.github/scripts/comment-commands/retest.sh b/.github/scripts/comment-commands/retest.sh index eed76ee5efc..0760f94f555 100644 --- a/.github/scripts/comment-commands/retest.sh +++ b/.github/scripts/comment-commands/retest.sh @@ -31,11 +31,11 @@ git push ${code} EOF -# member AND modification allowed by PR author -# OR -# repo owner -# => -# include steps to fetch branch + # member AND modification allowed by PR author + # OR + # repo owner + # => + # include steps to fetch branch elif [[ "${maintainer_can_modify}" == "true" ]] && [[ "${assoc}" == "MEMBER" ]] || [[ "${assoc}" == "OWNER" ]]; then cat <<-EOF To re-run CI checks, please follow these steps: @@ -47,9 +47,9 @@ git push "${source_repo}" HEAD:"${branch}" ${code} EOF -# other folks -# => -# ping author + # other folks + # => + # ping author else cat <<-EOF @${pr_owner} please trigger new CI check by following these steps: diff --git a/.github/scripts/generate_checksum.py b/.github/scripts/generate_checksum.py new file mode 100644 index 00000000000..5cc1dd79751 --- /dev/null +++ b/.github/scripts/generate_checksum.py @@ -0,0 +1,400 @@ +# -*- coding: utf-8 -*- +import argparse +import hashlib +import json +import os + +# Supports two types of qualifications: +# 1. Minimal Qualification - Validation that the vendor did not modify any +# of 1st party tests. +# 2. Complete Qualification - Validation that vendor did not modify anything +# other than their port layer. +# +# To support the above two type of qualification source files are divided in two +# sets: +# 1. Minimal +# 2. Exhaustive +# +# Minimal Qualification only verifies that Minimal files are intact while +# Complete Qualification verifies that both Minimal and Exhaustive files are +# intact. + +# Checksums are calculated for the following files: +# +# Required: +# demos - 1st party code. +# +# Optional: +# distribution - 1st party code. + +ALL_REQUIRED_COMPONENTS = ["docs"] + +ALL_OPTIONAL_COMPONENTS = [os.path.join("distribution")] + +MINIMAL_REQUIRED_COMPONENTS = [ + "docs", +] + +MINIMAL_OPTIONAL_COMPONENTS = [] + +# Current checksum schema version. +CURRENT_SCHEMA = 3 + +WINDOWS_LINE_ENDING = b"\r\n" +UNIX_LINE_ENDING = b"\n" + + +def generate_checksum_for_files(afr_path, list_of_files): + """ + Generate SHA1 checksums for the given files. + Parameters + ---------- + afr_path + The location of the AFR code. + list_of_files + List of file paths for which to calculate SHA1. The paths are relative + to AFR root. + Returns + ------- + dict + A dictionary with keys as file paths and values as SHA1 checksums: + { + "file_1": "checksum_1", + "file_2": "checksum_2" + } + """ + checksums = {} + for file in list_of_files: + print("Generating checksum for {}...".format(file)) + file_abs_path = os.path.join(afr_path, file) + if not os.path.exists(file_abs_path): + continue + + sha256 = hashlib.sha256() + with open(file_abs_path, "rb") as f: + content = f.read() + # This ensures that the calculated checksum is same whether the file + # is on a Windows machine or on a Unix machine. + content = content.replace(WINDOWS_LINE_ENDING, UNIX_LINE_ENDING) + sha256.update(content) + + # JSON file should have forward slashes in the pathname regardless of + # which OS the script is run on. + file = file.replace("\\", "/") + checksums[file] = sha256.hexdigest() + return checksums + + +def get_list_of_files(afr_path, search_path, include_portable): + """ + Returns a list of files for which we want to calculate SHA1 checksums. + It excludes hidden files. + Parameters + ---------- + afr_path + The location of the AFR code. + search_path + Path relative to the AFR root which needs to be searched for files. + include_portable + Whether or not to include the subfolders named 'portable'. + Returns + ------- + list + List of file paths relative to AFR root. + """ + list_of_files = [] + search_path = os.path.join(afr_path, search_path) + + for root, dirs, files in os.walk(search_path, topdown=True): + # Do not search portable folder if the caller says so + if include_portable == False: + dirs[:] = [d for d in dirs if d not in ["portable"]] + + # Do not include hidden files and folders. + dirs[:] = [d for d in dirs if not d[0] == "."] + files = [f for f in files if not f[0] == "."] + + for f in files: + list_of_files.append(os.path.join(os.path.relpath(root, afr_path), f)) + + return list_of_files + + +def get_required_files(afr_path, search_path): + """ + Returns a list of required files at search_path for which we want to + calculate SHA1 checksums. + It excludes hidden files. + Parameters + ---------- + afr_path + The location of the AFR code. + search_path + Path relative to the AFR root which needs to be searched for files. + Returns + ------- + list + List of file paths relative to AFR root. + """ + return get_list_of_files(afr_path, search_path, False) + + +def get_optional_files(afr_path, search_path): + """ + Returns a list of optional files at search_path for which we want to + calculate SHA1 checksums. + It excludes hidden files. + Parameters + ---------- + afr_path + The location of the AFR code. + search_path + Path relative to the AFR root which needs to be searched for files. + Returns + ------- + list + List of file paths relative to AFR root. + """ + return get_list_of_files(afr_path, search_path, True) + + +def generate_checksums_file_schema_v1(required_files, afr_path, output_file_path): + """ + Generates the checksum file for version 1 schema. + Parameters + ---------- + required_files + List of files which must be present and un-modifed. + afr_path + The location of the AFR code. + output_file_path + Path where to generate the checksum file. + """ + # Calculate checksums for all the required files. + checksums = generate_checksum_for_files(afr_path, required_files) + + # Write calculated checksums to JSON. + with open(output_file_path, "w") as out: + json.dump(checksums, out, sort_keys=True, indent=4) + + +def generate_checksums_file_schema_v2(required_files, optional_components, afr_path, output_file_path): + """ + Generates the checksum file for version 2 schema. + https://w.amazon.com/bin/view/AWS/IoTDevicesEcosystem/design/checksum_schema_enhancements + Parameters + ---------- + required_files + List of files which must be present and un-modifed. + optional_components + Components which can be missing but if present, must not be modified. + It is a dict of the following format: + { + "component1_location" : [file1, file2], + "component2_location" : [file3, file4] + } + afr_path + The location of the AFR code. + output_file_path + Path where to generate the checksum file. + """ + checksums = {} + + # Calculate checksums for all the required files. + checksums_required_files = generate_checksum_for_files(afr_path, required_files) + checksums["required_files"] = checksums_required_files + + # Calculate checksums for all the optional components. + checksums["optional_components"] = [] + for optional_component_location in optional_components: + optional_component_checksum = {} + optional_component_checksum["location"] = optional_component_location + optional_component_checksum["checksums"] = generate_checksum_for_files( + afr_path, optional_components[optional_component_location] + ) + checksums["optional_components"].append(optional_component_checksum) + + # Write calculated checksums to JSON. + with open(output_file_path, "w") as out: + json.dump(checksums, out, sort_keys=True, indent=4) + + +def generate_checksums_file_schema_v3( + exhaustive_required_files, + exhaustive_optional_components, + minimal_required_files, + minimal_optional_components, + afr_path, + output_file_path, +): + """ + Generates the checksum file for version 3 schema. + Parameters + ---------- + exhaustive_required_files + List of files which must be present and un-modifed for exhaustive check. + exhaustive_optional_components + Components which can be missing but if present, must not be modified for + exhaustive check. + It is a dict of the following format: + { + "component1_location" : [file1, file2], + "component2_location" : [file3, file4] + } + minimal_required_files + List of files which must be present and un-modifed for minimal check. + minimal_optional_components + Components which can be missing but if present, must not be modified for + minimal check. + It is a dict of the following format: + { + "component1_location" : [file1, file2], + "component2_location" : [file3, file4] + } + afr_path + The location of the AFR code. + output_file_path + Path where to generate the checksum file. + """ + checksums = {} + checksums["exhaustive"] = {} + checksums["minimal"] = {} + + # Calculate checksums for exhaustive required files. + checksums_exhaustive_required_files = generate_checksum_for_files(afr_path, exhaustive_required_files) + checksums["exhaustive"]["required_files"] = checksums_exhaustive_required_files + + # Calculate checksums for exhaustive optional components. + checksums["exhaustive"]["optional_components"] = [] + for optional_component_location in exhaustive_optional_components: + optional_component_checksum = {} + optional_component_checksum["location"] = optional_component_location + optional_component_checksum["checksums"] = generate_checksum_for_files( + afr_path, exhaustive_optional_components[optional_component_location] + ) + checksums["exhaustive"]["optional_components"].append(optional_component_checksum) + + # Calculate checksums for minimal required files. + checksums_minimal_required_files = generate_checksum_for_files(afr_path, minimal_required_files) + checksums["minimal"]["required_files"] = checksums_minimal_required_files + + # Calculate checksums for minimal optional components. + checksums["minimal"]["optional_components"] = [] + for optional_component_location in minimal_optional_components: + optional_component_checksum = {} + optional_component_checksum["location"] = optional_component_location + optional_component_checksum["checksums"] = generate_checksum_for_files( + afr_path, minimal_optional_components[optional_component_location] + ) + checksums["minimal"]["optional_components"].append(optional_component_checksum) + + # Write calculated checksums to JSON. + with open(output_file_path, "w") as out: + json.dump(checksums, out, sort_keys=True, indent=4) + + +def parse_arguments(): + """ + Parses the command line arguments. + """ + parser = argparse.ArgumentParser(description="Checksum Generator") + + parser.add_argument("--root", required=True, help="Location of the root directory.") + parser.add_argument("--out", default="checksums.json", help="Name of the output JSON file.") + parser.add_argument("--schema", default=CURRENT_SCHEMA, type=int, help="Schema of checksums.json to generate.") + + args = parser.parse_args() + return vars(args) + + +def main(): + """ + Main entry point. + """ + args = parse_arguments() + + afr_path = args["root"] + schema_version = args["schema"] + output_file_name = args["out"] + output_file_path = os.path.join(afr_path, output_file_name) + + print("AFR Code: {}".format(afr_path)) + print("Output File: {}".format(output_file_path)) + print("Schema Version: {}".format(schema_version)) + + # Get all the required files for which we need to generate checksum. + all_required_files = [] + for required_component in ALL_REQUIRED_COMPONENTS: + all_required_files.extend(get_required_files(afr_path, required_component)) + + # Get the required file for minimal set. + minimal_required_files = [] + for required_component in MINIMAL_REQUIRED_COMPONENTS: + minimal_required_files.extend(get_required_files(afr_path, required_component)) + + # Exhaustive = All - Required. + exhaustive_required_files = [ + required_file for required_file in all_required_files if required_file not in minimal_required_files + ] + + # Get minimal optional components for which we need to generate checksum. + # Dict of form: + # { + # "component1_location" : [file1, file2], + # "component2_location" : [file3, file4] + # } + minimal_optional_components = {} + minimal_optional_files = [] + for optional_component_location in MINIMAL_OPTIONAL_COMPONENTS: + files_in_optional_component = get_optional_files(afr_path, optional_component_location) + minimal_optional_files.extend(files_in_optional_component) + optional_component_location = optional_component_location.replace("\\", "/") + minimal_optional_components[optional_component_location] = files_in_optional_component + + # Get all the optional components for which we need to generate checksum. + # Dict of form: + # { + # "component1_location" : [file1, file2], + # "component2_location" : [file3, file4] + # } + all_optional_components = {} + exhaustive_optional_components = {} + for optional_component_location in ALL_OPTIONAL_COMPONENTS: + files_in_optional_component = get_optional_files(afr_path, optional_component_location) + # If a file is included in minimal_optional_components it won't be in + # exhaustive_optional_components. + files_in_exhaustive_optional_component = [ + optional_component_file + for optional_component_file in files_in_optional_component + if optional_component_file not in minimal_optional_files + ] + + optional_component_location = optional_component_location.replace("\\", "/") + all_optional_components[optional_component_location] = files_in_optional_component + if len(files_in_exhaustive_optional_component) > 0: + exhaustive_optional_components[optional_component_location] = files_in_exhaustive_optional_component + + if schema_version == 1: + # Schema version 1 only contains all required files. + generate_checksums_file_schema_v1(all_required_files, afr_path, output_file_path) + elif schema_version == 2: + # Schema version 2 contains all required files and all optional files. + generate_checksums_file_schema_v2(all_required_files, all_optional_components, afr_path, output_file_path) + elif schema_version == 3: + # Schema version 3 contains exhaustive and minimal files separately. + generate_checksums_file_schema_v3( + exhaustive_required_files, + exhaustive_optional_components, + minimal_required_files, + minimal_optional_components, + afr_path, + output_file_path, + ) + else: + raise ValueError("Incorrect schema version number!!") + + print("Generated {}.".format(output_file_path)) + + +if __name__ == "__main__": + main() diff --git a/.github/scripts/process-comment.sh b/.github/scripts/process-comment.sh index c77d0a3ca0e..ff45d930a6d 100644 --- a/.github/scripts/process-comment.sh +++ b/.github/scripts/process-comment.sh @@ -17,11 +17,11 @@ if [ "$LINES" == "0" ]; then # shellcheck disable=SC2124 RESPONSE="> $BODY -Script execution has been failed with exit code $EXIT_CODE. Please check the output of the github action run to get more information. -\`\`\` -$RESPONSE -\`\`\` -" + Script execution has been failed with exit code $EXIT_CODE. Please check the output of the github action run to get more information. + \`\`\` + $RESPONSE + \`\`\` + " fi else RESPONSE="No such command. \`$COMMAND\` $("$SCRIPT_DIR/comment-commands/help.sh")" diff --git a/.github/stale.yml b/.github/stale.yml index 9b20137ebec..9cbd2eb8673 100644 --- a/.github/stale.yml +++ b/.github/stale.yml @@ -1,70 +1,34 @@ # Configuration for probot-stale - https://github.com/probot/stale -# Number of days of inactivity before an issue becomes stale -daysUntilStale: 60 -# Number of days of inactivity before a stale issue is closed -daysUntilClose: 7 -# Issues with these labels will never be considered stale -exemptLabels: - - pinned - - security -# Label to use when marking an issue as stale -staleLabel: wontfix -# Comment to post when marking an issue as stale. Set to `false` to disable -markComment: > - This issue has been automatically marked as stale because it has not had - recent activity. It will be closed if no further activity occurs. Thank you - for your contributions. -# Comment to post when closing a stale issue. Set to `false` to disable -closeComment: false - -# Comment to be posted to on first time issues -newIssueWelcomeComment: | - 👋 Thanks for opening your first issue! If you're reporting a 🐞 bug, please make sure - you include steps to reproduce it. If you're requesting a feature 🎁, please provide real - use cases that would benefit. 👪 +# Number of days of inactivity before an Issue or Pull Request becomes stale +daysUntilStale: 365 - To help make this a smooth process, please be sure you have first read the - [contributing guidelines](https://github.com/AlexRogalskiy/java-patterns/blob/master/.github/CONTRIBUTING.md). +# Number of days of inactivity before a stale Issue or Pull Request is closed +daysUntilClose: 14 -# Comment to be posted to on PRs from first time contributors in your repository -newPRWelcomeComment: | - 💖 Thanks for opening this pull request! 💖 +# Issues or Pull Requests with these labels will never be considered stale +# exemptLabels: - To help make this a smooth process, please be sure you have first read the - [contributing guidelines](https://github.com/AlexRogalskiy/java-patterns/blob/master/.github/CONTRIBUTING.md). +# Label to use when marking as stale +staleLabel: Stale +# Comment to post when marking as stale. Set to `false` to disable +markComment: > + 👏 Thanks for your contribution! + ⚠️This issue has been automatically marked as stale because it has not had + recent activity. Because the team treats their issues + [as their backlog](https://en.wikipedia.org/wiki/Scrum_(software_development)#Product_backlog), stale issues + are closed. 📕 If you would like this issue to remain open: + 1. Verify that you can still reproduce the issue in the latest version of Atom + 1. Comment that the issue is still reproducible and include: + * What version of Atom you reproduced the issue on + * What OS and version you reproduced the issue on + * What steps you followed to reproduce the issue + Thank you! 👍 +# Comment to post when removing the stale label. Set to `false` to disable +unmarkComment: true -# Comment to be posted to on pull requests merged by a first time user -firstPRMergeComment: > - Congrats on merging your first pull request! 🎉🎉🎉 You're helping make Insomnia awesome! 🙌 +# Comment to post when closing a stale Issue or Pull Request. Set to `false` to disable +closeComment: true -# Comment to post when marking as stale. Set to `false` to disable. -issues: - daysUntilStale: 90 - daysUntilClose: 7 - exemptLabels: - - confirmed - markComment: > - Thank you for taking the time to raise this issue. However, it has - not had any activity on it in the past 180 days and will be closed in - 90 days if no updates occur. - Please check if the master branch has already resolved the issue - since it was raised. If you believe the issue is still valid and you - would like input from the maintainers then please comment to ask for - it to be reviewed. - closeComment: > - This issue has been automatically closed due to inactivity. Please re-open - if this still requires investigation. -pulls: - daysUntilStale: 90 - daysUntilClose: 30 - markComment: > - Thank you for your contribution! However, this pull request has not - had any activity in the past 180 days and will be closed in 90 days if - no updates occur. - If you believe the changes are still valid then please verify your - branch has no conflicts with master and rebase if needed. If you - are awaiting a (re-)review then please let us know. - closeComment: > - This pull request has been automatically closed due to inactivity. Please re-open - if these changes are still required. +# Limit to only `issues` or `pulls` +only: issues diff --git a/.github/workflows/action-devto.yml b/.github/workflows/action-devto.yml index ab860a9c43a..cb32f414aea 100644 --- a/.github/workflows/action-devto.yml +++ b/.github/workflows/action-devto.yml @@ -17,4 +17,4 @@ jobs: with: api-key: ${{ secrets.DEVTO_API_KEY }} directory: ./docs/articles - ignore: default.md.tpl \ No newline at end of file + ignore: default.md.tpl diff --git a/.github/workflows/auto-approve.yml b/.github/workflows/auto-approve.yml new file mode 100644 index 00000000000..df73b5d1218 --- /dev/null +++ b/.github/workflows/auto-approve.yml @@ -0,0 +1,12 @@ +name: Auto approve + +on: pull_request_target + +jobs: + auto-approve: + runs-on: ubuntu-latest + steps: + - uses: hmarr/auto-approve-action@v2.1.0 + if: github.actor == 'dependabot[bot]' || github.actor == 'dependabot-preview[bot]' + with: + github-token: '${{ secrets.GITHUB_TOKEN }}' diff --git a/.github/workflows/auto-assign-issues.yml b/.github/workflows/auto-assign-issues.yml new file mode 100644 index 00000000000..7fce9941044 --- /dev/null +++ b/.github/workflows/auto-assign-issues.yml @@ -0,0 +1,15 @@ +name: Issue assignment + +on: + issues: + types: [opened] + +jobs: + auto-assign: + runs-on: ubuntu-latest + steps: + - name: 'Auto-assign issue' + uses: pozil/auto-assign-issue@v1.4.0 + with: + assignees: AlexRogalskiy + numOfAssignee: 1 diff --git a/.github/workflows/auto-tag.yml b/.github/workflows/auto-tag.yml new file mode 100644 index 00000000000..7a39ca377bd --- /dev/null +++ b/.github/workflows/auto-tag.yml @@ -0,0 +1,16 @@ +name: Create Tag + +on: + push: + branches: + - master + +jobs: + build: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v2 + - uses: butlerlogic/action-autotag@stable + with: + GITHUB_TOKEN: "${{ secrets.GITHUB_TOKEN }}" + strategy: package diff --git a/.github/workflows/automerge-dependabot.yml b/.github/workflows/automerge-dependabot.yml new file mode 100644 index 00000000000..733696688fc --- /dev/null +++ b/.github/workflows/automerge-dependabot.yml @@ -0,0 +1,63 @@ +--- +####################################### +####################################### +## Dependabot automerge dependencies ## +####################################### +####################################### + +# +# Documentation: +# https://medium.com/@toufik.airane/automerge-github-dependabot-alerts-with-github-actions-7cd6f5763750 +# + +###################### +# name of the action # +###################### +name: automerge on pull request + +############### +# When to run # +############### +on: [ pull_request ] + +################# +# Start the job # +################# +jobs: + automerge: + name: automerge dependabot + runs-on: ubuntu-latest + if: github.actor == 'dependabot[bot]' && github.repository == 'megalinter/megalinter' + steps: + - name: Wait for CI/CT/CD to succeed + uses: fountainhead/action-wait-for-check@v1.0.0 + id: wait-for-build + with: + token: ${{ secrets.GITHUB_TOKEN }} + checkName: Tests + Deploy Docker Image - DEV + ref: ${{ github.event.pull_request.head.sha || github.sha }} + + - name: Wait for CI/CT/CD to succeed pt2 + uses: fountainhead/action-wait-for-check@v1.0.0 + id: wait-for-ci + with: + token: ${{ secrets.GITHUB_TOKEN }} + checkName: MegaLinter + ref: ${{ github.event.pull_request.head.sha || github.sha }} + + - name: merge + if: steps.wait-for-build.outputs.conclusion == 'success' || steps.wait-for-build.outputs.conclusion == 'skipped' && steps.wait-for-ci.outputs.conclusion == 'success' + uses: actions/github-script@v6 + with: + script: | + github.pulls.createReview({ + owner: context.payload.repository.owner.login, + repo: context.payload.repository.name, + pull_number: context.payload.pull_request.number, + event: 'APPROVE' + }) + github.pulls.merge({ + owner: context.payload.repository.owner.login, + repo: context.payload.repository.name, + pull_number: context.payload.pull_request.number + }) diff --git a/.github/workflows/automerge.yml b/.github/workflows/automerge.yml new file mode 100644 index 00000000000..7f54ba2ba80 --- /dev/null +++ b/.github/workflows/automerge.yml @@ -0,0 +1,33 @@ +name: automerge + +on: + pull_request: + types: + - labeled + - unlabeled + - synchronize + - opened + - edited + - ready_for_review + - reopened + - unlocked + pull_request_review: + types: + - submitted + check_suite: + types: + - completed + status: { } + +jobs: + automerge: + runs-on: ubuntu-latest + if: github.repository == 'AlexRogalskiy/java-patterns' + steps: + - name: automerge + env: + GITHUB_TOKEN: "${{ secrets.GITHUB_TOKEN }}" + MERGE_COMMIT_MESSAGE: "pull-request-description" + MERGE_FORKS: "false" + if: env.GITHUB_TOKEN != null + uses: "pascalgn/automerge-action@v0.15.2" diff --git a/.github/workflows/blogpost-workflow.yml b/.github/workflows/blogpost-workflow.yml index 543b15c00c5..fcf098d1052 100644 --- a/.github/workflows/blogpost-workflow.yml +++ b/.github/workflows/blogpost-workflow.yml @@ -76,4 +76,4 @@ jobs: with: max_post_count: "10" comment_tag_name: "DEVCASES-POST-LIST" - feed_list: "https://devcases.com/feed/" \ No newline at end of file + feed_list: "https://devcases.com/feed/" diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml new file mode 100644 index 00000000000..da9a56f1592 --- /dev/null +++ b/.github/workflows/build.yml @@ -0,0 +1,74 @@ +name: CI + +on: + pull_request: + branches: + - master + push: + branches: + - master + - 'releases/*' + +jobs: + cloc: + runs-on: ubuntu-latest + steps: + - name: Checkout repo + uses: actions/checkout@v2 + + - name: Print environment + run: | + whoami + node --version + npm --version + + echo "GitHub ref: $GITHUB_REF" + echo "GitHub event: $GITHUB_EVENT" + env: + GITHUB_REF: ${{ github.ref }} + GITHUB_EVENT: ${{ github.event_name }} + + - name: Set up cloc + run: | + sudo apt update + sudo apt -y install cloc + - name: Print lines of code + run: cloc --include-lang TypeScript,JavaScript,HTML,Sass,CSS --vcs git + + build: + runs-on: ubuntu-latest + timeout-minutes: 30 + strategy: + max-parallel: 2 + matrix: + node-version: + - 10.x + - 11.x + - 12.x + - 14.x + + steps: + - uses: actions/checkout@v2 + with: + ref: ${{ github.head_ref }} + + - name: Use Node.js ${{ matrix.node-version }} + uses: actions/setup-node@v1 + with: + node-version: ${{ matrix.node-version }} + + - name: Setup PNPM + uses: pnpm/action-setup@v1.2.1 + with: + version: 4.11.1 + + - name: Install Dependencies + run: pnpm i + + - name: Lint & Format + run: | + pnpm run all --if-present + + - name: Check + run: | + pnpm run check:all --if-present diff --git a/.github/workflows/changelog.yml b/.github/workflows/changelog.yml index 89b58d0f26c..b9146f71af1 100644 --- a/.github/workflows/changelog.yml +++ b/.github/workflows/changelog.yml @@ -3,11 +3,11 @@ name: Changelog on: workflow_dispatch: - release: - types: [ created ] - push: - branches: - - master +# release: +# types: [ created ] +# push: +# branches: +# - master jobs: build: @@ -20,7 +20,7 @@ jobs: uses: ruby/setup-ruby@v1 with: ruby-version: 3.0 - - uses: actions/cache@v2 + - uses: actions/cache@v2.1.4 with: path: vendor/bundle key: ${{ runner.os }}-changelog-gem @@ -38,4 +38,4 @@ jobs: uses: ad-m/github-push-action@master with: github_token: ${{ secrets.GITHUB_TOKEN }} - branch: ${{ github.ref }} \ No newline at end of file + branch: ${{ github.ref }} diff --git a/.github/workflows/chart-release.yaml b/.github/workflows/chart-release.yaml new file mode 100644 index 00000000000..321494d2aea --- /dev/null +++ b/.github/workflows/chart-release.yaml @@ -0,0 +1,52 @@ +name: Release Charts + +on: + push: + branches: + - master + +jobs: + release: + runs-on: ubuntu-latest + steps: + - name: Checkout + uses: actions/checkout@v2 + with: + fetch-depth: 0 + + - name: Configure Git + run: | + git config user.name "$GITHUB_ACTOR" + git config user.email "$GITHUB_ACTOR@users.noreply.github.com" + + - name: Install Helm + uses: azure/setup-helm@v1 + with: + version: v3.4.1 + +# # Optional step if GPG signing is used +# - name: Prepare GPG key +# run: | +# gpg_dir=.cr-gpg +# mkdir "$gpg_dir" +# keyring="$gpg_dir/secring.gpg" +# base64 -d <<< "$GPG_KEYRING_BASE64" > "$keyring" +# passphrase_file="$gpg_dir/passphrase" +# echo "$GPG_PASSPHRASE" > "$passphrase_file" +# echo "CR_PASSPHRASE_FILE=$passphrase_file" >> "$GITHUB_ENV" +# echo "CR_KEYRING=$keyring" >> "$GITHUB_ENV" +# env: +# GPG_KEYRING_BASE64: "${{ secrets.GPG_KEYRING_BASE64 }}" +# GPG_PASSPHRASE: "${{ secrets.GPG_PASSPHRASE }}" + +# - name: Add dependency chart repos +# run: | +# helm repo add bitnami https://charts.bitnami.com/bitnami + + - name: Run chart-releaser + uses: helm/chart-releaser-action@v1.1.0 + with: + charts_dir: charts + config: cr.yaml + env: + CR_TOKEN: "${{ secrets.GITHUB_TOKEN }}" diff --git a/.github/workflows/check-changelog.yml b/.github/workflows/check-changelog.yml new file mode 100644 index 00000000000..ece496812ba --- /dev/null +++ b/.github/workflows/check-changelog.yml @@ -0,0 +1,36 @@ +name: changelog + +on: [label, pull_request] + +jobs: + check: + runs-on: ubuntu-latest + steps: + - uses: actions/github-script@0.9.0 + with: + script: | + const labels = await github.issues.listLabelsOnIssue({ + owner: context.repo.owner, + repo: context.repo.repo, + issue_number: context.payload.pull_request.number, + }); + for (const label of labels.data) { + if (label.name === 'no-changelog-required') { + return; + } + } + const files = await github.pulls.listFiles({ + owner: context.repo.owner, + repo: context.repo.repo, + pull_number: context.payload.pull_request.number, + }); + let changeLogPresent = false; + for (const file of files.data) { + if (file.filename === 'CHANGELOG.md') { + changeLogPresent = true; + break; + } + } + if (!changeLogPresent) { + core.setFailed('changelog is required'); + } diff --git a/.github/workflows/checklist.yml b/.github/workflows/checklist.yml new file mode 100644 index 00000000000..e99b3b69082 --- /dev/null +++ b/.github/workflows/checklist.yml @@ -0,0 +1,15 @@ +name: Review checklist + +on: [pull_request_target] + +jobs: + checklist_job: + runs-on: ubuntu-latest + name: Checklist job + steps: + - name: Checkout + uses: actions/checkout@v1 + - name: Checklist + uses: wyozi/contextual-qa-checklist-action@master + with: + gh-token: ${{ secrets.GITHUB_TOKEN }} diff --git a/.github/workflows/cla.yml b/.github/workflows/cla.yml new file mode 100644 index 00000000000..6b6941d7cd0 --- /dev/null +++ b/.github/workflows/cla.yml @@ -0,0 +1,24 @@ +name: "CLA Assistant" + +on: + issue_comment: + types: [created] + pull_request_target: + types: [opened,closed,synchronize] + +jobs: + CLAssistant: + runs-on: ubuntu-latest + steps: + - name: "CLA Assistant" + if: (github.event.comment.body == 'recheck' || github.event.comment.body == 'I have read the CLA Document and I hereby sign the CLA') || github.event_name == 'pull_request_target' + uses: cla-assistant/github-action@v2.1.3-beta + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + PERSONAL_ACCESS_TOKEN: ${{ secrets.PERSONAL_ACCESS_TOKEN }} + with: + path-to-signatures: 'cla/signatures.json' + path-to-document: 'https://github.com/AlexRogalskiy/java-patterns/blob/master/cla/README.md' + # branch should not be protected + branch: 'master' + allowlist: imgbot,dependabot* diff --git a/.github/workflows/clean.yml b/.github/workflows/clean.yml new file mode 100644 index 00000000000..04ae9677b0e --- /dev/null +++ b/.github/workflows/clean.yml @@ -0,0 +1,30 @@ +name: Clear cache + +on: + workflow_dispatch: + +permissions: + actions: write + +jobs: + clear-ccache: + runs-on: ubuntu-latest + steps: + - name: Clear cache + uses: actions/github-script@v6 + with: + script: | + console.log("About to clear") + const caches = await github.rest.actions.getActionsCacheList({ + owner: context.repo.owner, + repo: context.repo.repo, + }) + for (const cache of caches.data.actions_caches) { + console.log(cache) + github.rest.actions.deleteActionsCacheById({ + owner: context.repo.owner, + repo: context.repo.repo, + cache_id: cache.id, + }) + } + console.log("Clear completed") diff --git a/.github/workflows/closed-issue-message.yml b/.github/workflows/closed-issue-message.yml new file mode 100644 index 00000000000..0f4c5879777 --- /dev/null +++ b/.github/workflows/closed-issue-message.yml @@ -0,0 +1,19 @@ +name: Closed Issue Message + +on: + issues: + types: [closed] + +jobs: + auto_comment: + runs-on: ubuntu-latest + steps: + - uses: aws-actions/closed-issue-message@v1 + with: + # These inputs are both required + repo-token: "${{ secrets.GITHUB_TOKEN }}" + message: | + ### ⚠️COMMENT VISIBILITY WARNING⚠️ + Comments on closed issues are hard for our team to see. + If you need more assistance, please either tag a team member or open a new issue that references this one. + If you wish to keep having a conversation with other community members under this issue feel free to do so. diff --git a/.github/workflows/codeball.yml b/.github/workflows/codeball.yml new file mode 100644 index 00000000000..6c217698700 --- /dev/null +++ b/.github/workflows/codeball.yml @@ -0,0 +1,20 @@ +name: Codeball + +on: + pull_request: { } + pull_request_review_comment: + types: [ created, edited ] + +jobs: + codeball_job: + runs-on: ubuntu-latest + name: Codeball + steps: + - name: Codeball + uses: sturdy-dev/codeball-action@v2 + with: + # For all configuration options see https://github.com/sturdy-dev/codeball-action/blob/v2/action.yml + approvePullRequests: "true" + labelPullRequestsWhenApproved: "true" + labelPullRequestsWhenReviewNeeded: "false" + failJobsWhenReviewNeeded: "false" diff --git a/.github/workflows/codeql-analysis.yml b/.github/workflows/codeql-analysis.yml new file mode 100644 index 00000000000..013c6a7a2e9 --- /dev/null +++ b/.github/workflows/codeql-analysis.yml @@ -0,0 +1,34 @@ +name: "CodeQL" + +on: + push: + branches: [ master ] + pull_request: + branches: [ master ] + schedule: + - cron: '43 1 * * 2' + +jobs: + analyze: + name: Analyze + runs-on: ubuntu-latest + timeout-minutes: 10 + strategy: + fail-fast: false + matrix: + language: [ 'javascript' ] + + steps: + - name: Checkout repository + uses: actions/checkout@v2 + + - name: Initialize CodeQL + uses: github/codeql-action/init@v1 + with: + languages: ${{ matrix.language }} + config-file: ./.github/codeql/codeql-config.yml + queries: security-extended + setup-python-dependencies: false + + - name: Perform CodeQL Analysis + uses: github/codeql-action/analyze@v1 diff --git a/.github/workflows/codesee-arch-diagram.yml b/.github/workflows/codesee-arch-diagram.yml new file mode 100644 index 00000000000..ef979e93d8f --- /dev/null +++ b/.github/workflows/codesee-arch-diagram.yml @@ -0,0 +1,90 @@ +# This workflow was added by CodeSee. Learn more at https://codesee.io/ +on: + push: + branches: + - master + pull_request_target: + types: [opened, synchronize, reopened] + +name: CodeSee Map + +permissions: read-all + +jobs: + test_map_action: + runs-on: ubuntu-latest + continue-on-error: true + name: Run CodeSee Map Analysis + steps: + - name: checkout + id: checkout + uses: actions/checkout@v2 + with: + repository: ${{ github.event.pull_request.head.repo.full_name }} + ref: ${{ github.event.pull_request.head.ref }} + fetch-depth: 0 + + # codesee-detect-languages has an output with id languages. + - name: Detect Languages + id: detect-languages + uses: Codesee-io/codesee-detect-languages-action@latest + + - name: Configure JDK 16 + uses: actions/setup-java@v3 + if: ${{ fromJSON(steps.detect-languages.outputs.languages).java }} + with: + java-version: '16' + distribution: 'zulu' + + # CodeSee Maps Go support uses a static binary so there's no setup step required. + + - name: Configure Node.js 14 + uses: actions/setup-node@v3 + if: ${{ fromJSON(steps.detect-languages.outputs.languages).javascript }} + with: + node-version: '14' + + - name: Configure Python 3.x + uses: actions/setup-python@v2 + if: ${{ fromJSON(steps.detect-languages.outputs.languages).python }} + with: + python-version: '3.10' + architecture: 'x64' + + - name: Configure Ruby '3.x' + uses: ruby/setup-ruby@v1 + if: ${{ fromJSON(steps.detect-languages.outputs.languages).ruby }} + with: + ruby-version: '3.0' + + # We need the rust toolchain because it uses rustc and cargo to inspect the package + - name: Configure Rust 1.x stable + uses: actions-rs/toolchain@v1 + if: ${{ fromJSON(steps.detect-languages.outputs.languages).rust }} + with: + toolchain: stable + + - name: Generate Map + id: generate-map + uses: Codesee-io/codesee-map-action@latest + with: + step: map + api_token: ${{ secrets.CODESEE_ARCH_DIAG_API_TOKEN }} + github_ref: ${{ github.ref }} + languages: ${{ steps.detect-languages.outputs.languages }} + + - name: Upload Map + id: upload-map + uses: Codesee-io/codesee-map-action@latest + with: + step: mapUpload + api_token: ${{ secrets.CODESEE_ARCH_DIAG_API_TOKEN }} + github_ref: ${{ github.ref }} + + - name: Insights + id: insights + uses: Codesee-io/codesee-map-action@latest + with: + step: insights + api_token: ${{ secrets.CODESEE_ARCH_DIAG_API_TOKEN }} + github_ref: ${{ github.ref }} diff --git a/.github/workflows/color-check.yml b/.github/workflows/color-check.yml new file mode 100644 index 00000000000..33a977cced0 --- /dev/null +++ b/.github/workflows/color-check.yml @@ -0,0 +1,22 @@ +name: Check SVG icon colors + +on: + pull_request: + paths: + - 'docs/overrides/.icons/*.svg' + +jobs: + color-check: + name: SVG Color Check + runs-on: ubuntu-latest + env: + TARGET_BRANCH: ${{ github.event.pull_request.base.ref }} + steps: + - name: Checkout 🛎️ + uses: actions/checkout@v2 + with: + fetch-depth: 0 + - name: Check colors 🎨 + run: | + svgFiles=$(git diff origin/${{ env.TARGET_BRANCH }} --name-only | grep '.svg$') + npx svg-color-linter --colors material-colors.yml ${svgFiles} diff --git a/.github/workflows/commitlint.yml b/.github/workflows/commitlint.yml index 38b30bef83d..252e75a55e4 100644 --- a/.github/workflows/commitlint.yml +++ b/.github/workflows/commitlint.yml @@ -11,7 +11,7 @@ jobs: - uses: actions/checkout@v2 with: fetch-depth: 0 - - uses: wagoid/commitlint-github-action@v2.2.0 + - uses: wagoid/commitlint-github-action@v2.2.5 with: configFile: './.github/workflows/lint/.commitlintrc.json' helpURL: https://rook.io/docs/rook/master/development-flow.html#commit-structure diff --git a/.github/workflows/cve-scan.yml b/.github/workflows/cve-scan.yml new file mode 100644 index 00000000000..0f79f77d064 --- /dev/null +++ b/.github/workflows/cve-scan.yml @@ -0,0 +1,24 @@ +name: cve-scan + +on: + push: + branches: + - 'master' + +jobs: + trivy: + runs-on: ubuntu-latest + steps: + - name: Checkout + uses: actions/checkout@v2 + - name: Build image + id: build + run: | + IMAGE=java-patterns:${GITHUB_SHA} + DOCKER_TAG=ci + docker build -t ${IMAGE} ./distribution/docker-images/${DOCKER_TAG}.Dockerfile + echo "::set-output name=image::$IMAGE" + - name: Scan image + uses: docker://docker.io/aquasec/trivy:latest + with: + args: --cache-dir /var/lib/trivy --no-progress --exit-code 1 --severity MEDIUM,HIGH,CRITICAL ${{ steps.build.outputs.image }} diff --git a/.github/workflows/dead-link-checker.yaml b/.github/workflows/dead-link-checker.yaml new file mode 100644 index 00000000000..5cbcfb70b84 --- /dev/null +++ b/.github/workflows/dead-link-checker.yaml @@ -0,0 +1,20 @@ +name: Dead Link Checker + +on: + pull_request: + +concurrency: + group: dlc-${{ github.event.pull_request.number || github.ref }} + cancel-in-progress: true + +jobs: + CheckDeadLinks: + runs-on: ubuntu-latest + timeout-minutes: 30 + steps: + - uses: actions/checkout@v2 + - run: sudo npm install -g markdown-link-check + - run: | + for file in $(find . -name "*.md"); do + markdown-link-check -c .dlc.json -q "$file" + done diff --git a/.github/workflows/delete-workflow-runs.yml b/.github/workflows/delete-workflow-runs.yml new file mode 100644 index 00000000000..a66b6aae119 --- /dev/null +++ b/.github/workflows/delete-workflow-runs.yml @@ -0,0 +1,30 @@ +name: delete-workflow-runs + +on: + workflow_dispatch: + inputs: + days: + description: 'no. of days' + required: true + default: 30 + minimum_runs: + description: 'minimum runs to keep (per workflow)' + required: true + default: 6 + +# push: +# branches: [ develop ] + +jobs: + del_runs: + runs-on: ubuntu-latest + steps: + - name: Delete workflow runs + uses: Mattraks/delete-workflow-runs@v2 + with: + token: ${{ github.token }} + repository: ${{ github.repository }} + retain_days: ${{ github.event.inputs.days }} + # retain_days: 30 + keep_minimum_runs: ${{ github.event.inputs.minimum_runs }} + # keep_minimum_runs: 6 diff --git a/.github/workflows/docker.yaml b/.github/workflows/docker.yaml new file mode 100644 index 00000000000..cf5866ea0c1 --- /dev/null +++ b/.github/workflows/docker.yaml @@ -0,0 +1,39 @@ +name: Docker build and container scan + +on: + push: + branches: + - '**' + +jobs: + build: + runs-on: ubuntu-latest + steps: + - name: Checkout + uses: actions/checkout@v2 + + - name: Docker build + run: | + docker build . --file ./distribution/docker-images/ci.Dockerfile --tag containerscanner:${{ github.sha }} + + - name: Anchore scan + uses: anchore/scan-action@1.0.6 + with: + image-reference: containerscanner:${{ github.sha }} + dockerfile-path: ./distribution/docker-images/dev.Dockerfile + include-app-packages: true + fail-build: true # no idea why it doesn't work + + - name: Show Anchore results + run: for j in `ls ./anchore-reports/*.json`; do echo "---- ${j} ----"; cat ${j}; echo; done + if: ${{ always() }} + + - name: Upload Anchore results + uses: actions/upload-artifact@v2 + with: + name: anchore-reports + path: ./anchore-reports/ + if: ${{ always() }} + + - name: Fail on any vulnerability + run: jq -e '.vulnerabilities | any( . ) | not' anchore-reports/vulnerabilities.json diff --git a/.github/workflows/download-link-check-deploy.yml b/.github/workflows/download-link-check-deploy.yml new file mode 100644 index 00000000000..4cdfec82eee --- /dev/null +++ b/.github/workflows/download-link-check-deploy.yml @@ -0,0 +1,29 @@ +name: Download Link Check + +on: + deployment_status: + +jobs: + run: + name: Initialize + runs-on: ubuntu-latest + if: + github.event.deployment.ref != 'master' && + github.event.deployment_status.state == 'success' + steps: + - uses: actions/checkout@v2 + - name: Download Link Checker + uses: lycheeverse/lychee-action@v1.0.8 + with: + args: + --verbose "${{ github.event.deployment.payload.web_url }}" --base + "${{ github.event.deployment.payload.web_url }}" --include + /download/ + + env: + GITHUB_TOKEN: ${{secrets.GITHUB_TOKEN}} + - name: Check for Error Report + if: hashFiles('./lychee/out.md') != '' + run: | + echo 'Errors were reported while checking download links.' + exit 1 diff --git a/.github/workflows/enforce-changelog.yml b/.github/workflows/enforce-changelog.yml new file mode 100644 index 00000000000..07732cd7bef --- /dev/null +++ b/.github/workflows/enforce-changelog.yml @@ -0,0 +1,20 @@ +# This workflow enforces the update of a changelog file on every pull request + +name: "Enforce Changelog" + +on: + pull_request: + types: [opened, synchronize, reopened, ready_for_review, labeled, unlabeled] + +jobs: + check: + runs-on: ubuntu-latest + timeout-minutes: 10 + steps: + - name: Checkout code + uses: actions/checkout@v2 + - name: Enforce changelog️ + uses: dangoslen/changelog-enforcer@v2 + with: + changeLogPath: "CHANGELOG.md" + skipLabels: "Skip Changelog" diff --git a/.github/workflows/enforce-labels.yml b/.github/workflows/enforce-labels.yml new file mode 100644 index 00000000000..654bd92e6ce --- /dev/null +++ b/.github/workflows/enforce-labels.yml @@ -0,0 +1,14 @@ +name: Enforce PR labels for release drafter + +on: + pull_request: + types: [ labeled, unlabeled, opened, edited, synchronize ] + +jobs: + enforce-label: + runs-on: ubuntu-latest + steps: + - uses: yogevbd/enforce-label-action@2.2.1 + with: + REQUIRED_LABELS_ANY: "bug,enhancement,internal,no-changelog,sync" + REQUIRED_LABELS_ANY_DESCRIPTION: "Select at least one label ['bug','enhancement','internal','no-changelog'] for the PR" diff --git a/.github/workflows/fossa.yml b/.github/workflows/fossa.yml new file mode 100644 index 00000000000..5b75663b6e3 --- /dev/null +++ b/.github/workflows/fossa.yml @@ -0,0 +1,32 @@ +name: FOSSA + +on: + workflow_dispatch: +# push: +# branches: [master] +# pull_request: +# branches: [master] + +jobs: + build: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v2 + - uses: actions/setup-go@v2 + with: + go-version: "^1.14.x" + - run: go version + # Runs a set of commands to initialize and analyze with FOSSA + - name: run FOSSA analysis + shell: bash + env: + # FOSSA Push-Only API Token + FOSSA_API_KEY: '5ee8bf422db1471e0bcf2bcb289185de' + run: | + export GOPATH=$HOME/go + export PATH=$PATH:$(go env GOPATH)/bin + + sudo curl -H 'Cache-Control: no-cache' https://raw.githubusercontent.com/fossas/fossa-cli/master/install.sh | bash + + sudo fossa init + sudo fossa analyze diff --git a/.github/workflows/generate-chart-readme.yml b/.github/workflows/generate-chart-readme.yml new file mode 100644 index 00000000000..59fcdfccaa7 --- /dev/null +++ b/.github/workflows/generate-chart-readme.yml @@ -0,0 +1,58 @@ +name: Generate Chart Readme + +on: + workflow_dispatch: +# pull_request: +# branches: +# - master +# paths: +# - 'bitnami/**/values.yaml' + +jobs: + generate-chart-readme: + runs-on: ubuntu-latest + + steps: + - name: Checkout bitnami-labs/readme-generator-for-helm + uses: actions/checkout@v2 + with: + repository: 'bitnami-labs/readme-generator-for-helm' + ref: '55cab5dd2191c4ffa7245cfefa428d4d9bb12730' + path: readme-generator-for-helm + + - name: Cache node modules + uses: actions/cache@v2 + env: + cache-name: cache-node-modules + with: + # npm cache files are stored in `~/.npm` on Linux/macOS + path: ~/.npm + key: ${{ runner.os }}-build-${{ env.cache-name }}-${{ hashFiles('readme-generator-for-helm/package-lock.json') }} + restore-keys: | + ${{ runner.os }}-build-${{ env.cache-name }}- + + - name: Install readme-generator-for-helm dependencies + run: cd readme-generator-for-helm && npm install + + - name: Checkout bitnami/charts + uses: actions/checkout@v2 + with: + path: charts + + - name: Get list of files with changes in Pull Request + id: pr-file-changes + uses: trilom/file-changes-action@v1.2.4 + with: + fileOutput: ' ' + + - name: Prepare readme-generator-for-helm inputs + run: | + cat $HOME/files.txt | tr " " "\n" | grep values\\.yaml > raw-inputs + cat raw-inputs | sed 's/values.yaml/README.md/' >> raw-inputs + cat raw-inputs | sed 's/AlexRogalskiy/charts/' > prepared-inputs + + - name: Execute readme-generator-for-helm + run: readme-generator-for-helm/bin/index.js -r $(cat prepared-inputs | grep README) -v $(cat prepared-inputs | grep values) + + - name: Output generated README.md + run: cat $(cat prepared-inputs | grep README) diff --git a/.github/workflows/gh-pages.yml b/.github/workflows/gh-pages.yml index c210d712b76..5dfaa5e2129 100644 --- a/.github/workflows/gh-pages.yml +++ b/.github/workflows/gh-pages.yml @@ -1,4 +1,4 @@ -name: Labels +name: GitHub pages on: workflow_dispatch: @@ -22,8 +22,8 @@ jobs: working-directory: docs/ - name: Deploy Github Pages - uses: JamesIves/github-pages-deploy-action@3.7.1 + uses: JamesIves/github-pages-deploy-action@4.1.4 with: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} BRANCH: gh-pages - FOLDER: docs/ \ No newline at end of file + FOLDER: docs/ diff --git a/.github/workflows/github.yml b/.github/workflows/github.yml new file mode 100644 index 00000000000..017899cc9e4 --- /dev/null +++ b/.github/workflows/github.yml @@ -0,0 +1,20 @@ +name: Sync labels + +on: + push: + branches: + - master + paths: + - .github/labels.yml + +jobs: + build: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v2 + - uses: micnncim/action-label-syncer@v1 + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + with: + manifest: .github/labels.yml + prune: false diff --git a/.github/workflows/gitleaks.yml b/.github/workflows/gitleaks.yml new file mode 100644 index 00000000000..4770797d356 --- /dev/null +++ b/.github/workflows/gitleaks.yml @@ -0,0 +1,15 @@ +name: gitleaks + +on: [pull_request, push, workflow_dispatch] + +jobs: + scan: + name: gitleaks + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v3 + with: + fetch-depth: 0 + - uses: gitleaks/gitleaks-action@v2 + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} diff --git a/.github/workflows/greetings.yml b/.github/workflows/greetings.yml new file mode 100644 index 00000000000..2944334a6c9 --- /dev/null +++ b/.github/workflows/greetings.yml @@ -0,0 +1,19 @@ +name: Greetings + +on: [ pull_request, issues ] + +jobs: + greeting: + runs-on: ubuntu-latest + steps: + - uses: actions/first-interaction@v1 + with: + repo-token: ${{ secrets.GITHUB_TOKEN }} + issue-message: |- + Thank you for reporting the issue! If you haven't already [joined our github community](https://github.com/AlexRogalskiy/java-patterns/issues), then we invite you to do so. + This is a great place to get help and ask questions from our AMAZING community. + [![GitHub Community](https://github.githubassets.com/favicons/favicon.svg)](https://github.com/AlexRogalskiy/java-patterns/issues) + pr-message: |- + Thank you for submitting this PR! If you haven't already [joined our github community](https://github.com/AlexRogalskiy/java-patterns/issues), then we invite you to do so. + We receive an overwhelming number of contributions. By joining our community, we'll be able to review your PR faster. + [![GitHub Community](https://github.githubassets.com/favicons/favicon.svg)](https://github.com/AlexRogalskiy/java-patterns/issues) diff --git a/.github/workflows/hash-gen.yml b/.github/workflows/hash-gen.yml new file mode 100644 index 00000000000..9dfc67a717b --- /dev/null +++ b/.github/workflows/hash-gen.yml @@ -0,0 +1,23 @@ +name: Generate sha256 hashes for release files + +on: + release: + types: [published] + +jobs: + build: + runs-on: ubuntu-latest + steps: + - name: Generate Hashes + uses: MCJack123/ghaction-generate-release-hashes@v1 + with: + hash-type: sha256 + file-name: hashes.txt + - name: Upload Hashes to release + uses: svenstaro/upload-release-action@v2 + with: + repo_token: ${{ secrets.GITHUB_TOKEN }} + file: hashes.txt + overwrite: true + asset_name: Files-SHA256-Hashes.txt + tag: ${{ github.ref }} diff --git a/.github/workflows/helm.yml b/.github/workflows/helm.yml new file mode 100644 index 00000000000..b8b3aec3331 --- /dev/null +++ b/.github/workflows/helm.yml @@ -0,0 +1,74 @@ +name: release +on: + push: + tags: + - 'v*' + +jobs: + build-push: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v2 + - name: Prepare + id: prep + run: | + VERSION=$(grep 'version' package.json | awk '{ print $4 }' | tr -d '"') + CHANGELOG="https://github.com/AlexRogalskiy/java-patterns/blob/main/CHANGELOG.md#$(echo $VERSION | tr -d '.')" + echo ::set-output name=BUILD_DATE::$(date -u +'%Y-%m-%dT%H:%M:%SZ') + echo ::set-output name=VERSION::${VERSION} + echo ::set-output name=CHANGELOG::${CHANGELOG} + - name: Setup QEMU + uses: docker/setup-qemu-action@v1 + with: + platforms: all + - name: Setup Docker Buildx + id: buildx + uses: docker/setup-buildx-action@v1 + with: + buildkitd-flags: "--debug" + - name: Login to GitHub Container Registry + uses: docker/login-action@v1 + with: + registry: ghcr.io + username: AlexRogalskiy + password: ${{ secrets.GITHUB_TOKEN }} + - name: Publish image + uses: docker/build-push-action@v2 + with: + push: true + builder: ${{ steps.buildx.outputs.name }} + context: . + file: ./distribution/docker-images/release.Dockerfile + platforms: linux/amd64,linux/arm64,linux/arm/v7 + build-args: | + REVISON=${{ github.sha }} + tags: | + ghcr.io/AlexRogalskiy/java-patterns:${{ steps.prep.outputs.VERSION }} + labels: | + org.opencontainers.image.title=${{ github.event.repository.name }} + org.opencontainers.image.description=${{ github.event.repository.description }} + org.opencontainers.image.url=${{ github.event.repository.html_url }} + org.opencontainers.image.source=${{ github.event.repository.html_url }} + org.opencontainers.image.revision=${{ github.sha }} + org.opencontainers.image.version=${{ steps.prep.outputs.VERSION }} + org.opencontainers.image.created=${{ steps.prep.outputs.BUILD_DATE }} + - name: Check images + run: | + docker buildx imagetools inspect ghcr.io/AlexRogalskiy/java-patterns:${{ steps.prep.outputs.VERSION }} + - name: Publish Helm charts + uses: stefanprodan/helm-gh-pages@v1.3.0 + with: + token: ${{ secrets.GITHUB_TOKEN }} + charts_url: ./charts + linting: off + - name: Create release + uses: actions/create-release@latest + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + with: + tag_name: ${{ github.ref }} + release_name: ${{ github.ref }} + draft: false + prerelease: false + body: | + [CHANGELOG](${{ steps.prep.outputs.CHANGELOG }}) diff --git a/.github/workflows/insert-contributors.yml b/.github/workflows/insert-contributors.yml new file mode 100644 index 00000000000..667cf993f95 --- /dev/null +++ b/.github/workflows/insert-contributors.yml @@ -0,0 +1,53 @@ +# Inserts list of contributors and community members into ./ATTRIBUTIONS.md +# Also generates an SVG showing all contributors, which is embedded into readme +name: 💓 Generate Contributor & SponsorCredits +on: + workflow_dispatch: # Manual dispatch + schedule: + - cron: '0 1 * * 0' # At 01:00 on Sunday. + +jobs: + # Job #1 - Generate an embedded SVG asset, showing all contributors + generate-contributors: + runs-on: ubuntu-latest + steps: + - name: Generate contributor SVG 💓 + uses: bubkoo/contributors-list@v1 + with: + GITHUB_TOKEN: ${{ secrets.BOT_GITHUB_TOKEN || secrets.GITHUB_TOKEN }} + svgPath: .github/CONTRIBUTORS.svg + affiliation: all + includeBots: false + avatarSize: 96 + userNameHeight: 20 + svgWidth: 1024 + commitMessage: '💓 Updates contributor SVG' + + # Job #2 - Fetches sponsors and inserts table into attributions page + insert-sponsors: + runs-on: ubuntu-latest + steps: + - name: Checkout 🛎️ + uses: actions/checkout@v2 + - name: Generate Sponsors in Credits 💓 + uses: JamesIves/github-sponsors-readme-action@1.0.5 + with: + token: ${{ secrets.BOT_GITHUB_TOKEN || secrets.GITHUB_TOKEN }} + file: 'ATTRIBUTIONS.md' + + # Job #3 - Fetches contributors and inserts table into attributions page + insert-credits: + runs-on: ubuntu-latest + name: Inserts contributors into ATTRIBUTIONS.md + steps: + - name: Contribute List - Attributions Page + uses: akhilmhdh/contributors-readme-action@v2.3.4 + env: + GITHUB_TOKEN: ${{ secrets.BOT_GITHUB_TOKEN || secrets.GITHUB_TOKEN }} + with: + image_size: 80 + readme_path: ATTRIBUTIONS.md + columns_per_row: 6 + commit_message: '💓 Updates contributors list' + committer_username: liss-bot + committer_email: liss-bot@d0h.co diff --git a/.github/workflows/issue-manager.yml b/.github/workflows/issue-manager.yml new file mode 100644 index 00000000000..fa084ec04c3 --- /dev/null +++ b/.github/workflows/issue-manager.yml @@ -0,0 +1,26 @@ +name: Issue Manager + +on: + schedule: + - cron: "0 0 * * *" + issue_comment: + types: + - created + - edited + issues: + types: + - labeled + +jobs: + issue-manager: + runs-on: ubuntu-latest + steps: + - uses: tiangolo/issue-manager@0.3.0 + with: + token: ${{ secrets.GITHUB_TOKEN }} + config: > + { + "answered": { + "message": "Assuming the original issue was solved, it will be automatically closed now. But feel free to add more comments or create new issues." + } + } diff --git a/.github/workflows/issue-triage.yml b/.github/workflows/issue-triage.yml new file mode 100644 index 00000000000..b1b9e0cdde0 --- /dev/null +++ b/.github/workflows/issue-triage.yml @@ -0,0 +1,22 @@ +name: Triage New Issues + +on: + issues: + types: [opened] + +jobs: + triage: + name: Triage New Issues + runs-on: ubuntu-latest + steps: + - name: Add "needs/triage" label + uses: actions/github-script@v3 + with: + github-token: ${{ secrets.GITHUB_TOKEN }} + script: | + github.issues.addLabels({ + owner: context.repo.owner, + repo: context.repo.repo, + issue_number: context.issue.number, + labels: ['needs/triage'] + }) diff --git a/.github/workflows/k8s.yml b/.github/workflows/k8s.yml new file mode 100644 index 00000000000..38a862804a5 --- /dev/null +++ b/.github/workflows/k8s.yml @@ -0,0 +1,63 @@ +name: k8s + +on: + push: + branches: + - 'master' + pull_request: + branches: + - 'master' + +jobs: + build: + runs-on: ubuntu-latest + timeout-minutes: 30 + steps: + - name: checkout + uses: actions/checkout@v2 + with: + fetch-depth: 0 + + - name: Run ShellCheck + uses: ludeeus/action-shellcheck@master + env: + SHELLCHECK_OPTS: -e SC2059 -e SC2034 -e SC1090 + with: + ignore: scripts + severity: error + + - uses: azure/setup-helm@v1 + with: + version: v3.6.3 + + - name: Install tools + run: | + echo "Installing kubectl..." + curl -LO https://storage.googleapis.com/kubernetes-release/release/$(curl -s https://storage.googleapis.com/kubernetes-release/release/stable.txt)/bin/linux/amd64/kubectl + chmod +x ./kubectl + sudo mv ./kubectl /usr/local/bin/kubectl + + echo "Installing kind..." + curl -fsSLo kind "https://github.com/kubernetes-sigs/kind/releases/download/v0.11.1/kind-linux-amd64" + chmod +x kind + sudo mv kind /usr/local/bin/kind + + - name: List directories + shell: bash + run: | + echo "Listing of directory..." + ls -la scripts + + - name: Build + shell: bash + run: | + echo "Running build command..." + chmod +x ./scripts/docker-build.sh + sudo ./scripts/docker-build.sh ci + + - name: Test + shell: bash + run: | + echo "Running test command..." + chmod +x ./scripts/e2e-kind.sh + sudo ./scripts/e2e-kind.sh diff --git a/.github/workflows/label.yml b/.github/workflows/label.yml new file mode 100644 index 00000000000..a5c9d2ac995 --- /dev/null +++ b/.github/workflows/label.yml @@ -0,0 +1,13 @@ +name: Labeler + +on: [ pull_request ] + +jobs: + label: + runs-on: ubuntu-latest + steps: + - uses: actions/labeler@v3 + with: + repo-token: "${{ secrets.GITHUB_TOKEN }}" + configuration-path: '.github/auto-label.yml' + sync-labels: true diff --git a/.github/workflows/license-eyes.yml b/.github/workflows/license-eyes.yml new file mode 100644 index 00000000000..0b74e799576 --- /dev/null +++ b/.github/workflows/license-eyes.yml @@ -0,0 +1,20 @@ +name: License Check + +on: + pull_request: + push: + branches: + - master + - main + +jobs: + license-check: + name: "License Check" + runs-on: ubuntu-latest + steps: + - name: "Checkout ${{ github.ref }} ( ${{ github.sha }} )" + uses: actions/checkout@v2 + - name: Check License + uses: apache/skywalking-eyes@v0.2.0 + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} diff --git a/.github/workflows/link-check-all.yml b/.github/workflows/link-check-all.yml new file mode 100644 index 00000000000..2e447ee83cc --- /dev/null +++ b/.github/workflows/link-check-all.yml @@ -0,0 +1,22 @@ +name: Check all links in the repository + +on: + workflow_dispatch: + schedule: + - cron: '0 0 * * *' + +jobs: + run: + name: Link Check All + runs-on: ubuntu-latest + env: + NODE_OPTIONS: '--max-http-header-size=65536' + + steps: + - uses: actions/checkout@v2 + + - name: Run Link Check + uses: 'iterative/link-check.action@v0.7' + with: + configFile: './config/config.yml' + output: consoleLog diff --git a/.github/workflows/link-check-deploy.yml b/.github/workflows/link-check-deploy.yml new file mode 100644 index 00000000000..aa1d42c6aa6 --- /dev/null +++ b/.github/workflows/link-check-deploy.yml @@ -0,0 +1,51 @@ +name: Check new links against deployment + +# This workflow "triggers" and skips on deployment because GitHub Actions / +# Checks refuses to show the check on deployment_status +on: + - deployment + - deployment_status + +jobs: + run: + name: Initialize + runs-on: ubuntu-latest + if: github.event.deployment.ref != 'master' && github.event.deployment_status.state == 'success' + + steps: + - uses: actions/checkout@v2 + + - id: build_check + uses: LouisBrunner/checks-action@v1.0.0 + with: + token: ${{ secrets.GITHUB_TOKEN }} + name: Report + status: queued + + - name: Run Link Check + id: check + uses: 'iterative/link-check.action@v0.7' + with: + diff: true + configFile: './config/config.yml' + rootURL: '${{ github.event.deployment.payload.web_url }}' + output: checksAction + + - uses: LouisBrunner/checks-action@v1.0.0 + if: ${{ success() }} + with: + token: ${{ secrets.GITHUB_TOKEN }} + check_id: ${{ steps.build_check.outputs.check_id }} + status: completed + conclusion: ${{ steps.check.outputs.conclusion }} + output: ${{ steps.check.outputs.output }} + + - uses: LouisBrunner/checks-action@v1.0.0 + if: ${{ failure() }} + with: + token: ${{ secrets.GITHUB_TOKEN }} + check_id: ${{ steps.build_check.outputs.check_id }} + status: completed + conclusion: failure + output: >- + {"summary": "The Link Check script had an error!"} diff --git a/.github/workflows/lint-md.yml b/.github/workflows/lint-md.yml new file mode 100644 index 00000000000..61dec5e6ec0 --- /dev/null +++ b/.github/workflows/lint-md.yml @@ -0,0 +1,14 @@ +name: Check Markdown links + +on: + pull_request: + paths: + - '**.md' + +jobs: + lint-md: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v3 + - run: npm install + - run: npx remark --use validate-links --frail . .github diff --git a/.github/workflows/lint-pr.yml b/.github/workflows/lint-pr.yml new file mode 100644 index 00000000000..13ca0e1f8fd --- /dev/null +++ b/.github/workflows/lint-pr.yml @@ -0,0 +1,16 @@ +name: Lint PR + +on: + pull_request: + types: [ labeled, unlabeled, opened, edited ] + +jobs: + lint-pr: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@master + with: + ref: ${{ secrets.GITHUB_REF }} + - uses: yogevbd/pr-lint-action@master + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} diff --git a/.github/workflows/lint-test.yaml b/.github/workflows/lint-test.yaml new file mode 100644 index 00000000000..b37afb39405 --- /dev/null +++ b/.github/workflows/lint-test.yaml @@ -0,0 +1,79 @@ +name: Lint and Test Charts + +on: + pull_request: + types: [ labeled, unlabeled, opened, edited ] + +jobs: + lint-test: + runs-on: ubuntu-latest + steps: + - name: Checkout + uses: actions/checkout@v2 + with: + fetch-depth: 0 + + - name: Set up Helm + uses: azure/setup-helm@v1 + with: + version: v3.4.1 + + # Python is required because `ct lint` runs Yamale (https://github.com/23andMe/Yamale) and + # yamllint (https://github.com/adrienverge/yamllint) which require Python + - name: Set up Python + uses: actions/setup-python@v2 + with: + python-version: 3.7 + + - name: Set up chart-testing + uses: helm/chart-testing-action@v2.0.1 + with: + version: v3.3.0 + + - name: Run chart-testing (list-changed) + id: list-changed + run: | + changed=$(ct list-changed --config ct.yaml) + if [[ -n "$changed" ]]; then + echo "::set-output name=changed::true" + fi + + - name: Run chart-testing (lint) + run: ct lint --config ct-lint.yaml + + - name: Create kind cluster + uses: helm/kind-action@v1.1.0 + if: steps.list-changed.outputs.changed == 'true' + + - name: Run chart-testing (install) + run: ct install --config ct.yaml + + test: + runs-on: ubuntu-latest + steps: + - name: Checkout + uses: actions/checkout@v2 + + - name: Fetch history + run: git fetch --prune --unshallow + + - name: Set up chart-testing + uses: helm/chart-testing-action@v2.1.0 + + - name: Create kind cluster + uses: helm/kind-action@v1.2.0 + + - name: Run chart-testing (install) + run: ct install --config ct.yaml + + check-categories: + runs-on: ubuntu-latest + steps: + - name: Checkout + uses: actions/checkout@v2 + + - name: Fetch history + run: git fetch --prune --unshallow + + - name: Check categories + uses: bitnami/chart-categories-action@master diff --git a/.github/workflows/lint.yml b/.github/workflows/lint.yml new file mode 100644 index 00000000000..9e351326a01 --- /dev/null +++ b/.github/workflows/lint.yml @@ -0,0 +1,36 @@ +name: Run linters + +on: + workflow_dispatch: + push: + +env: + MAX_LINE_LENGTH: 110 + +jobs: + lint: + runs-on: ubuntu-20.04 + steps: + - uses: actions/checkout@v2 + with: + submodules: true + fetch-depth: 1 + + - name: Set up Python + uses: actions/setup-python@v1 + with: + python-version: 3.9 + architecture: x64 + + - name: Install flake8 + run: | + pip install flake8 pycodestyle + + - name: Lint with flake8 + run: | + # one pass for show-stopper syntax errors or undefined names + flake8 . --count --show-source --statistics + # flake8 . --count --select=E9,F63,F7,F82 --show-source --statistics --exclude ./ckan/include/rjsmin.py,./contrib/cookiecutter/* + # one pass for small stylistic things + flake8 . --count --max-line-length="$MAX_LINE_LENGTH" --statistics + # flake8 . --count --exit-zero --max-complexity=10 --max-line-length=127 --statistics diff --git a/.github/workflows/linter.yml b/.github/workflows/linter.yml index ced9bb16981..1b73ef3ae35 100644 --- a/.github/workflows/linter.yml +++ b/.github/workflows/linter.yml @@ -10,13 +10,14 @@ name: Lint Code Base ############################# on: push: - branches: [ master ] + branches: [ master, main ] # Remove the line above to run when pushing to master pull_request: - branches: [ master ] + branches: [ master, main ] env: - FILTER_REGEX_EXCLUDE: .gh-md-toc + FILTER_REGEX_INCLUDE: .*docs/.* + ############### # Set the Job # ############### @@ -26,13 +27,25 @@ jobs: name: Lint Code Base # Set the agent to run on runs-on: ubuntu-latest + + ################## + # Load all steps # + ################## steps: + ########################## + # Checkout the code base # + ########################## - name: Checkout Code - uses: actions/checkout@v2 + uses: actions/checkout@v3 with: + # Full git history is needed to get a proper list of changed files within `super-linter` fetch-depth: 0 + + ################################ + # Run Linter against code base # + ################################ - name: Lint Code Base - uses: github/super-linter@v3 + uses: github/super-linter/slim@v4 env: VALIDATE_ALL_CODEBASE: false DEFAULT_BRANCH: master diff --git a/.github/workflows/lychee-cron.yaml b/.github/workflows/lychee-cron.yaml new file mode 100644 index 00000000000..93f29f090b9 --- /dev/null +++ b/.github/workflows/lychee-cron.yaml @@ -0,0 +1,31 @@ +name: lychee link Checker cronjob + +on: + repository_dispatch: + workflow_dispatch: + schedule: + - cron: "00 18 * * *" + +jobs: + linkChecker: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v2 + with: + fetch-depth: 0 + + - name: Use Node.js ${{ matrix.node-version }} + uses: actions/setup-node@v1 + with: + node-version: 12.x + + - name: Install prerequisites + run: | + npm install + + - name: Link Checker + uses: lycheeverse/lychee-action@v1.0.8 + with: + args: --verbose --no-progress --exclude-all-private **/*.md + env: + GITHUB_TOKEN: ${{secrets.GITHUB_TOKEN}} diff --git a/.github/workflows/lychee-pr.yaml b/.github/workflows/lychee-pr.yaml new file mode 100644 index 00000000000..3c3fb2201d1 --- /dev/null +++ b/.github/workflows/lychee-pr.yaml @@ -0,0 +1,43 @@ +on: pull_request + +name: lychee link Checker + +jobs: + linkChecker: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v2 + with: + fetch-depth: 0 + + - name: Use Node.js ${{ matrix.node-version }} + uses: actions/setup-node@v1 + with: + node-version: 12.x + + - name: Install prerequisites + run: | + npm install + + - name: get changed files + id: getfile + run: | + echo "::set-output name=ts::$(git diff --name-only --diff-filter=ACMRT origin/main... | grep .md | xargs)" + + - name: echo the changed files + run: | + for i in ${{ steps.getfile.outputs.ts }} + do + echo $i + done + + - name: lychee Link Checker + id: lychee + uses: lycheeverse/lychee-action@v1.0.8 + with: + args: --verbose --no-progress --exclude-all-private ${{ steps.getfile.outputs.ts }} + env: + GITHUB_TOKEN: ${{secrets.GITHUB_TOKEN}} + + - name: Fail if there were link errors + run: exit ${{ steps.lychee.outputs.exit_code }} diff --git a/.github/workflows/merge_master_to_dev.yml b/.github/workflows/merge_master_to_dev.yml new file mode 100644 index 00000000000..edc52e04970 --- /dev/null +++ b/.github/workflows/merge_master_to_dev.yml @@ -0,0 +1,19 @@ +name: Merge master to develop + +on: + push: + branches: + - master + +jobs: + merge_master_to_dev: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v2 + - name: Merge master -> develop + uses: devmasx/merge-branch@v1.3.1 + with: + type: now + head_to_merge: master + target_branch: develop + github_token: ${{ secrets.GITHUB_TOKEN }} diff --git a/.github/workflows/mkdocs.yml b/.github/workflows/mkdocs.yml new file mode 100644 index 00000000000..3690084db22 --- /dev/null +++ b/.github/workflows/mkdocs.yml @@ -0,0 +1,64 @@ +name: Publish docs via GitHub Pages + +on: + push: + branches: + - master + +env: + PYTHONIOENCODING: utf-8 + PYTHONUNBUFFERED: 1 + PYTHONLEGACYWINDOWSSTDIO: utf-8 + USE_COLOR: False + +jobs: + deploy: + runs-on: ubuntu-18.04 + steps: + - uses: actions/checkout@v2 + with: + submodules: true + fetch-depth: 1 + + - name: Setup Python 3.9 + uses: actions/setup-python@v2 + with: + python-version: '3.9' + architecture: x64 + + - name: Upgrade pip + run: | + # install pip=>20.1 to use "pip cache dir" + python3 -m pip install --upgrade pip --quiet + + - name: Get pip cache dir + id: pip-cache + run: | + echo "::set-output name=dir::$(pip cache dir)" + + - name: Cache dependencies + uses: actions/cache@v2 + with: + path: ${{ steps.pip-cache.outputs.dir }} + key: ${{ runner.os }}-pip-${{ hashFiles('**/docs/requirements.txt') }} + restore-keys: | + ${{ runner.os }}-pip- + + - name: Install dependencies + run: | + python3 -m pip install -r ./docs/requirements.txt --quiet + + - name: Build mkdocs + run: | + python3 -m mkdocs build --clean --config-file mkdocs.yml + + - name: Directory listing for debugging + run: | + pwd + ls + + - name: Deploy + uses: peaceiris/actions-gh-pages@v3 + with: + github_token: ${{ secrets.GITHUB_TOKEN }} + publish_dir: ./site diff --git a/.github/workflows/no-response.yml b/.github/workflows/no-response.yml new file mode 100644 index 00000000000..dbe89e96ab3 --- /dev/null +++ b/.github/workflows/no-response.yml @@ -0,0 +1,22 @@ +# Automatically closes issues if a response was not received for requested information +# https://github.com/lee-dohm/no-response + +name: no-response + +# Both `issue_comment` and `scheduled` event types are required for this Action +# to work properly. +on: + issue_comment: + types: [created] + schedule: + # Once a day, at 12:15 UTC + - cron: '15 12 * * *' + +jobs: + noResponse: + runs-on: ubuntu-20.04 + steps: + - uses: lee-dohm/no-response@v0.5.0 + with: + token: ${{ secrets.GITHUB_TOKEN }} + responseRequiredLabel: "status: waiting-for-feedback" diff --git a/.github/workflows/pagespeed.yml b/.github/workflows/pagespeed.yml index f1fa4c11d24..e4f75723f70 100644 --- a/.github/workflows/pagespeed.yml +++ b/.github/workflows/pagespeed.yml @@ -41,4 +41,4 @@ jobs: commit_options: '--no-verify --signoff' commit_user_name: GitHub Bot commit_user_email: github-actions@nullables.io - commit_author: GitHub Bot \ No newline at end of file + commit_author: GitHub Bot diff --git a/.github/workflows/performance-comparison-label.yml b/.github/workflows/performance-comparison-label.yml new file mode 100644 index 00000000000..a7e63ce6cf6 --- /dev/null +++ b/.github/workflows/performance-comparison-label.yml @@ -0,0 +1,44 @@ +name: Run Performance Comparison + +on: + pull_request: + types: [ labeled ] + +permissions: + pull-requests: write + issues: write + +concurrency: + group: build-${{ github.event.pull_request.number || github.ref }}-${{github.workflow}} + cancel-in-progress: true + +jobs: + build: + if: ${{ github.event.label.name == 'help:run-comparisonstats' }} + runs-on: ubuntu-latest + + steps: + - name: Remove run-performance-comparison label + uses: actions-ecosystem/action-remove-labels@v1 + with: + github_token: ${{ secrets.GITHUB_TOKEN }} + labels: help:run-comparisonstats + + - name: Check out code into the Go module directory + uses: actions/checkout@v3 + + - name: Parse comment template into gh output + id: parse-comment-template-into-gh-output + working-directory: ./scripts/template + run: | + body=$(cat comment.txt) + body="${body//'%'/'%25'}" + body="${body//$'\n'/'%0A'}" + body="${body//$'\r'/'%0D'}" + echo ::set-output name=body::$body + + - name: Create comment + uses: peter-evans/create-or-update-comment@c9fcb64660bc90ec1cc535646af190c992007c32 + with: + issue-number: ${{ github.event.pull_request.number }} + body: "${{ steps.parse-comment-template-into-gh-output.outputs.body }}" diff --git a/.github/workflows/pr-helper.yml b/.github/workflows/pr-helper.yml new file mode 100644 index 00000000000..9964b8be177 --- /dev/null +++ b/.github/workflows/pr-helper.yml @@ -0,0 +1,35 @@ +name: PR Merge on Schedule + +on: + schedule: + - cron: '* 5 * * *' + +jobs: + prhelper_schedule: + runs-on: ubuntu-latest + steps: + - name: Run PR Helper on Schedule + id: runprhelperonschedule + uses: Matticusau/pr-helper@v1.3.0 + with: + repo-token: ${{ secrets.GHACTION_PAT }} + enable-prmerge-automation: true + enable-prcomment-automation: false + enable-prlabel-automation: true + enable-prreviewer-frontmatter: true + enable-welcomemessage: false + prmerge-requireallchecks: true + prmerge-requirereviewcount: 1 + prmerge-method: 'merge' + prmerge-deletebranch: 'true' + prmerge-deletebranch-config: '' + prmerge-pathcheck: true + prmerge-allowpaths: '{"any":["articles/**"]}' + prreviewer-authorkey: 'author' + prreviewer-githubuserfromauthorfile: true + prreviewer-authorfilepath: '_data/authors.yaml' + prlabel-default: 'pr-onhold' + prlabel-ready: 'pr-ready' + prlabel-onhold: 'pr-onhold' + prlabel-reviewrequired: 'review-required' + prlabel-automerge: 'auto-merge' diff --git a/.github/workflows/pr.yml b/.github/workflows/pr.yml new file mode 100644 index 00000000000..c52c75b6c20 --- /dev/null +++ b/.github/workflows/pr.yml @@ -0,0 +1,20 @@ +on: [ pull_request, workflow_dispatch ] + +jobs: + shellcheck: + name: shellcheck + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v1 + - uses: ludeeus/action-shellcheck@master + with: + severity: style + + shellspec: + name: shellspec + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v1 + - run: | + curl -fsSL https://git.io/shellspec | sh -s -- --yes + ${HOME}/.local/bin/shellspec diff --git a/.github/workflows/rebase.yml b/.github/workflows/rebase.yml new file mode 100644 index 00000000000..479905721bf --- /dev/null +++ b/.github/workflows/rebase.yml @@ -0,0 +1,29 @@ +name: Automatic Rebase + +on: + issue_comment: + types: [ created ] + +#concurrency: +# group: "new-issue-${{ github.event.number }}" +# cancel-in-progress: true + +permissions: + contents: read + +jobs: + rebase: + name: Rebase + if: github.event.issue.pull_request != '' && contains(github.event.comment.body, '/rebase') + runs-on: ubuntu-latest + steps: + - name: Checkout the latest code + uses: actions/checkout@v2 + with: + persist-credentials: false + token: ${{ secrets.GITHUB_TOKEN }} + fetch-depth: 0 # otherwise, you will fail to push refs to dest repo + - name: Automatic Rebase + uses: cirrus-actions/rebase@1.4 + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} diff --git a/.github/workflows/rebase_dispatch.yml b/.github/workflows/rebase_dispatch.yml new file mode 100644 index 00000000000..42fa687d8bd --- /dev/null +++ b/.github/workflows/rebase_dispatch.yml @@ -0,0 +1,43 @@ +name: Rebase Pull Request + +on: + repository_dispatch: + types: [ rebase-command ] + +#concurrency: +# group: "rebase-${{ github.event.number }}" +# cancel-in-progress: true + +permissions: + contents: read + +jobs: + rebase_pull_request: + name: Rebase Pull Request + runs-on: ubuntu-latest + steps: + - name: Rebase Pull Request + uses: peter-evans/rebase@08cedbbd4eabcd913bf091844614eceddaea4a5d + id: rebase + with: + persist-credentials: false + token: ${{ secrets.GITHUB_TOKEN }} + head: ${{ github.event.client_payload.pull_request.head.label }} + + - name: Add 👍 Reaction + if: always() && steps.rebase.outputs.rebased-count == 1 + uses: peter-evans/create-or-update-comment@c9fcb64660bc90ec1cc535646af190c992007c32 + with: + token: ${{ secrets.GITHUB_TOKEN }} + repository: ${{ github.event.client_payload.github.payload.repository.full_name }} + comment-id: ${{ github.event.client_payload.github.payload.comment.id }} + reaction-type: '+1' + + - name: Add 👎 Reaction + if: always() && steps.rebase.outputs.rebased-count != 1 + uses: peter-evans/create-or-update-comment@c9fcb64660bc90ec1cc535646af190c992007c32 + with: + token: ${{ secrets.GITHUB_TOKEN }} + repository: ${{ github.event.client_payload.github.payload.repository.full_name }} + comment-id: ${{ github.event.client_payload.github.payload.comment.id }} + reaction-type: '-1' diff --git a/.github/workflows/release-changelog.yml b/.github/workflows/release-changelog.yml index 2d98ae61284..fe5d3840385 100644 --- a/.github/workflows/release-changelog.yml +++ b/.github/workflows/release-changelog.yml @@ -15,7 +15,7 @@ jobs: run: | echo ::set-output name=current_version::${GITHUB_REF#refs/tags/v} shell: bash - + - name: Build Changelog id: github_release uses: mikepenz/release-changelog-builder-action@main diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index e8b7f8a8106..cf703480794 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -56,4 +56,4 @@ jobs: steps: - uses: actions/checkout@v2 - name: Post bumpr status comment - uses: haya14busa/action-bumpr@v1 \ No newline at end of file + uses: haya14busa/action-bumpr@v1 diff --git a/.github/workflows/remove-labels.yml b/.github/workflows/remove-labels.yml index ba74dcce8a7..93b6f4f5d8a 100644 --- a/.github/workflows/remove-labels.yml +++ b/.github/workflows/remove-labels.yml @@ -14,7 +14,7 @@ jobs: if: github.event.pull_request.merged runs-on: ubuntu-latest steps: - - uses: mondeja/remove-labels-gh-action@v1.0.0 + - uses: mondeja/remove-labels-gh-action@v1 with: token: ${{ secrets.GITHUB_TOKEN }} labels: | @@ -32,7 +32,7 @@ jobs: if: github.event_name == 'pull_request_target' && (! github.event.pull_request.merged) runs-on: ubuntu-latest steps: - - uses: mondeja/remove-labels-gh-action@v1.0.0 + - uses: mondeja/remove-labels-gh-action@v1 with: token: ${{ secrets.GITHUB_TOKEN }} labels: | @@ -44,7 +44,7 @@ jobs: if: github.event.issue.state == 'closed' runs-on: ubuntu-latest steps: - - uses: mondeja/remove-labels-gh-action@v1.0.0 + - uses: mondeja/remove-labels-gh-action@v1 with: token: ${{ secrets.GITHUB_TOKEN }} labels: | diff --git a/.github/workflows/remove-old-artifacts.yml b/.github/workflows/remove-old-artifacts.yml index 6ad0067a1ca..822fff04f44 100644 --- a/.github/workflows/remove-old-artifacts.yml +++ b/.github/workflows/remove-old-artifacts.yml @@ -15,4 +15,4 @@ jobs: uses: c-hive/gha-remove-artifacts@v1 with: age: '7 days' - skip-tags: false \ No newline at end of file + skip-tags: false diff --git a/.github/workflows/remove-stale.yml b/.github/workflows/remove-stale.yml new file mode 100644 index 00000000000..9a69801a514 --- /dev/null +++ b/.github/workflows/remove-stale.yml @@ -0,0 +1,23 @@ +# This workflow removes the stale label from PRs and issues when a new comment is created +# +name: Remove stale label + +on: + issue_comment: + types: [created] + +jobs: + remove_stale: + if: contains(github.event.issue.labels.*.name, 'stale') + runs-on: ubuntu-latest + permissions: + issues: write + pull-requests: write + + steps: + - name: Remove stale label + run: gh issue edit $ISSUE --remove-label $LABEL + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + ISSUE: ${{ github.event.issue.number }} + LABEL: 'stale' diff --git a/.github/workflows/renovate.yml b/.github/workflows/renovate.yml new file mode 100644 index 00000000000..363feecf6eb --- /dev/null +++ b/.github/workflows/renovate.yml @@ -0,0 +1,19 @@ +name: Renovate + +on: + schedule: + - cron: '0 14 * * 5' # At 14:00 on Friday. + workflow_dispatch: + +jobs: + renovate: + runs-on: ubuntu-latest + steps: + - name: Renovate Automatic Branch + uses: bodinsamuel/renovate-automatic-branch@v1 + with: + github-token: ${{ secrets.GITHUB_TOKEN }} + repo-owner: AlexRogalskiy + repo-name: java-patterns + branch-base: next + pull-request-title: 'chore(deps): dependencies' diff --git a/.github/workflows/repo-traffic.yml b/.github/workflows/repo-traffic.yml new file mode 100644 index 00000000000..c9ff50025a9 --- /dev/null +++ b/.github/workflows/repo-traffic.yml @@ -0,0 +1,35 @@ +name: Repository Traffic + +on: + workflow_dispatch: + schedule: + # runs once a week on sunday + - cron: "55 23 * * 0" + +jobs: + # This workflow contains a single job called "traffic" + traffic: + # The type of runner that the job will run on + runs-on: ubuntu-latest + + # Steps represent a sequence of tasks that will be executed as part of the job + steps: + # Checks-out your repository under $GITHUB_WORKSPACE, so your job can access it + - uses: actions/checkout@v2 + with: + ref: "master" + + # Calculates traffic and clones and stores in CSV file + - name: GitHub traffic + uses: sangonzal/repository-traffic-action@v0.1.4 + env: + TRAFFIC_ACTION_TOKEN: ${{ secrets.TRAFFIC_ACTION_TOKEN }} + + # Commits files to repository + - name: Commit changes + uses: EndBug/add-and-commit@v4 + with: + author_name: AccTextBot + message: "GitHub traffic" + add: "./traffic/*" + ref: "master" diff --git a/.github/workflows/semgrep.yml b/.github/workflows/semgrep.yml new file mode 100644 index 00000000000..c1ba233e021 --- /dev/null +++ b/.github/workflows/semgrep.yml @@ -0,0 +1,18 @@ +name: Semgrep + +on: + pull_request: { } + push: + branches: + - main + - master + +jobs: + semgrep: + name: Scan + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v2 + - uses: returntocorp/semgrep-action@v1 + with: + publishToken: ${{ secrets.SEMGREP_APP_TOKEN }} diff --git a/.github/workflows/shiftleft-analysis.yml b/.github/workflows/shiftleft-analysis.yml new file mode 100644 index 00000000000..5a97689c6fe --- /dev/null +++ b/.github/workflows/shiftleft-analysis.yml @@ -0,0 +1,36 @@ +# This workflow integrates Scan with GitHub's code scanning feature +# Scan is a free open-source security tool for modern DevOps teams from ShiftLeft +# Visit https://slscan.io/en/latest/integrations/code-scan for help +name: SL Scan + +# This section configures the trigger for the workflow. Feel free to customize depending on your convention +on: push + +jobs: + Scan-Build: + # Scan runs on ubuntu, mac and windows + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v1 + # Instructions + # 1. Setup JDK, Node.js, Python etc depending on your project type + # 2. Compile or build the project before invoking scan + # Example: mvn compile, or npm install or pip install goes here + # 3. Invoke Scan with the github token. Leave the workspace empty to use relative url + + - name: Perform Scan + uses: ShiftLeftSecurity/scan-action@master + env: + WORKSPACE: "" + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + SCAN_AUTO_BUILD: true + with: + output: reports + # Scan auto-detects the languages in your project. To override uncomment the below variable and set the type + # type: credscan,java + # type: python + + - name: Upload report + uses: github/codeql-action/upload-sarif@v1 + with: + sarif_file: reports diff --git a/.github/workflows/size-limit.yml b/.github/workflows/size-limit.yml new file mode 100644 index 00000000000..6ab4b362e41 --- /dev/null +++ b/.github/workflows/size-limit.yml @@ -0,0 +1,17 @@ +name: 'size' + +on: + pull_request: + branches: + - main + +jobs: + size: + runs-on: ubuntu-latest + env: + CI_JOB_NUMBER: 1 + steps: + - uses: actions/checkout@v2 + - uses: andresz1/size-limit-action@v1 + with: + github_token: ${{ secrets.GITHUB_TOKEN }} diff --git a/.github/workflows/spelling.yml b/.github/workflows/spelling.yml new file mode 100644 index 00000000000..c1281b47875 --- /dev/null +++ b/.github/workflows/spelling.yml @@ -0,0 +1,24 @@ +name: Spell Check + +on: + push: + branches: + - master + - "*-stable" + # Switch from `pull_request_target` event to reduce distraction from comments + # regarding errors reported in unmodified files. + pull_request: + branches: + - master + - "*-stable" + +jobs: + build: + name: Spell Check + runs-on: "ubuntu-latest" + timeout-minutes: 10 + steps: + - name: Checkout Repository + uses: actions/checkout@v2 + - name: Check Spellings + uses: check-spelling/check-spelling@v0.0.19 diff --git a/.github/workflows/stale.yml b/.github/workflows/stale.yml index 7cfc32b6a90..1a31c491369 100644 --- a/.github/workflows/stale.yml +++ b/.github/workflows/stale.yml @@ -7,6 +7,9 @@ on: jobs: stale: runs-on: ubuntu-latest + permissions: + issues: write + pull-requests: write steps: - uses: actions/stale@v3 with: @@ -15,6 +18,8 @@ jobs: stale-issue-message: 'This issue is stale because it has been open 30 days with no activity. Remove stale label or comment or this will be closed in 5 days' close-issue-message: "This issue was automatically closed because of being stale. Feel free to open a new one if you still experience this problem." close-pr-message: "This PR was automatically closed because of being stale." + days-before-issue-stale: 90 + days-before-pr-stale: -1 days-before-stale: 30 days-before-close: 5 operations-per-run: 1500 diff --git a/.github/workflows/stale_issue.yml b/.github/workflows/stale_issue.yml new file mode 100644 index 00000000000..3f9f545a868 --- /dev/null +++ b/.github/workflows/stale_issue.yml @@ -0,0 +1,46 @@ +name: "Close stale issues" + +# Controls when the action will run. +on: + schedule: + - cron: "*/60 * * * *" + +jobs: + cleanup: + runs-on: ubuntu-latest + name: Stale issue job + steps: + - uses: aws-actions/stale-issue-cleanup@v3 + with: + # Setting messages to an empty string will cause the automation to skip + # that category + ancient-issue-message: Greetings! Sorry to say but this is a very old issue that is probably not getting as much attention as it deservers. We encourage you to check if this is still an issue in the latest release and if you find that this is still a problem, please feel free to open a new one. + stale-issue-message: Greetings! It looks like this issue hasn’t been active in longer than a week. We encourage you to check if this is still an issue in the latest release. Because it has been longer than a week since the last update on this, and in the absence of more information, we will be closing this issue soon. If you find that this is still a problem, please feel free to provide a comment or add an upvote to prevent automatic closure, or if the issue is already closed, please feel free to open a new one. + stale-pr-message: Greetings! It looks like this PR hasn’t been active in longer than a week, add a comment or an upvote to prevent automatic closure, or if the issue is already closed, please feel free to open a new one. + + # These labels are required + stale-issue-label: closing-soon + exempt-issue-label: investigating, automation-exempt + stale-pr-label: closing-soon + exempt-pr-label: pr/needs-review + response-requested-label: response-requested + + # Don't set closed-for-staleness label to skip closing very old issues + # regardless of label + closed-for-staleness-label: closed-for-staleness + + # Issue timing + days-before-stale: 2 + days-before-close: 5 + days-before-ancient: 365 + + # If you don't want to mark a issue as being ancient based on a + # threshold of "upvotes", you can set this here. An "upvote" is + # the total number of +1, heart, hooray, and rocket reactions + # on an issue. + minimum-upvotes-to-exempt: 1 + + repo-token: ${{ secrets.GITHUB_TOKEN }} + loglevel: DEBUG + # Set dry-run to true to not perform label or close actions. + # dry-run: true diff --git a/.github/workflows/support-window.yml b/.github/workflows/support-window.yml new file mode 100644 index 00000000000..aebf594a1db --- /dev/null +++ b/.github/workflows/support-window.yml @@ -0,0 +1,47 @@ +name: Update support window diagram + +on: + # When our dependencies change + push: + paths: + - .github/workflows/support-window.yml + - package.json + - scripts/support-window.ts + # Manually, when TypeScript is released + # https://docs.github.com/en/actions/managing-workflow-runs/manually-running-a-workflow + workflow_dispatch: + +jobs: + support-window: + if: github.repository == 'AlexRogalskiy/java-patterns' + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v3 + - uses: actions/setup-node@v3 + #with: + # cache: npm + - run: npm install + - name: Fetch TypeScript versions and release dates from npm + run: | + npm view --json typescript time | + jq ' + to_entries + # Earliest non-pre-release . + | map( + (.key |= capture("^(?[0-9]+\\.[0-9]+)\\.[0-9]+$").version) + | select(.key) + ) + | unique_by(.key) + | from_entries + ' > docs/support-window.json + - name: Make SVG diagram + run: node --experimental-json-modules scripts/support-window > docs/support-window.svg + - run: git add docs/support-window.json docs/support-window.svg + - run: git config user.name .github/workflows/support-window.yml + - run: git config user.email bot@typescriptlang.org + - run: | + git diff --quiet --cached || + git commit \ + --message "[README] 🤖 Update support window diagram" \ + --message "$GITHUB_SERVER_URL/$GITHUB_REPOSITORY/actions/runs/$GITHUB_RUN_ID" \ + - run: git push diff --git a/.github/workflows/update-checksum.yml b/.github/workflows/update-checksum.yml new file mode 100644 index 00000000000..a15abee0b43 --- /dev/null +++ b/.github/workflows/update-checksum.yml @@ -0,0 +1,48 @@ +name: File Checksum Updater + +on: + workflow_dispatch: + inputs: + branch: + description: 'Target branch to raise PR' + required: true + +jobs: + generate-checksum: + name: Update checksums.json file. + runs-on: ubuntu-latest + steps: + # Setup Python + - name: Install Python3 + uses: actions/setup-python@v2 + with: + python-version: 3.7.10 + architecture: x64 + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + + - name: Checkout code + uses: actions/checkout@v2 + with: + ref: ${{ github.event.inputs.branch }} + + - name: Run checksum generator + run: python3 .github/scripts/generate_checksum.py --root ./ + + - name: Raise Pull Request if checksums.json file changed + run: | + if ! (git diff --quiet checksums.json); then + git config --global user.name "Checksum Updater" + git checkout -b job/update-checksum-file + export COMMIT=$(git rev-parse HEAD) + git commit -am 'Generate new checksums.json file for commit $COMMIT' + git push --set-upstream origin job/update-checksum-file + export GITHUB_TOKEN=${{ secrets.GITHUB_TOKEN }} + sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-key C99B11DEB97541F0 + sudo apt-add-repository https://cli.github.com/packages + sudo apt update + sudo apt-get install gh + gh pr create --base ${{ github.event.inputs.branch }} --title 'Update checksums.json file' --body 'Checksum Updater Job: PR to update checksums.json file for commit $COMMIT' + else + echo 'checksums.json file did not change after running script. Not creating a Pull-Request.' + fi diff --git a/.github/workflows/validate-codeowners.yml b/.github/workflows/validate-codeowners.yml new file mode 100644 index 00000000000..83c04322408 --- /dev/null +++ b/.github/workflows/validate-codeowners.yml @@ -0,0 +1,31 @@ +name: Validate Codeowners + +on: + workflow_dispatch: + + pull_request: + paths: + - '**/CODEOWNERS' + - '.github/workflows/validate-codeowners.yml' + +jobs: + validate-codeowners: + runs-on: ubuntu-latest + steps: + - name: "Checkout source code at current commit" + uses: actions/checkout@v3 + - uses: mszostok/codeowners-validator@v0.5.0 + if: github.event.pull_request.head.repo.full_name == github.repository + name: "Full check of CODEOWNERS" + with: + # For now, remove "files" check to allow CODEOWNERS to specify non-existent + # files so we can use the same CODEOWNERS file for Terraform and non-Terraform repos + # checks: "files,syntax,owners,duppatterns" + checks: "syntax,owners,duppatterns" + # GitHub access token is required only if the `owners` check is enabled + github_access_token: "${{ secrets.GITHUB_TOKEN }}" + - uses: mszostok/codeowners-validator@v0.5.0 + if: github.event.pull_request.head.repo.full_name != github.repository + name: "Syntax check of CODEOWNERS" + with: + checks: "syntax,duppatterns" diff --git a/.github/workflows/versioning.yml b/.github/workflows/versioning.yml new file mode 100644 index 00000000000..f78c5ce993d --- /dev/null +++ b/.github/workflows/versioning.yml @@ -0,0 +1,44 @@ +--- +######################### +######################### +## Version GitHub Tags ## +######################### +######################### + +# +# Documentation: +# https://help.github.com/en/articles/workflow-syntax-for-github-actions +# + +########################## +# Name of the action job # +########################## +name: Keep GitHub tag versions up-to-date + +##################################################### +# Run the job when a release is published or edited # +##################################################### +on: + release: + types: [ published, edited ] + +################# +# Start the job # +################# +jobs: + actions-tagger: + runs-on: windows-latest + steps: + ############################# + # Check out the latest code # + ############################# + - uses: actions/checkout@v3.0.1 + + ###################### + # Run the tag action # + ###################### + - uses: Actions-R-Us/actions-tagger@v2.0.2 + with: + publish_latest_tag: true + env: + GITHUB_TOKEN: "${{secrets.GITHUB_TOKEN}}" diff --git a/.github/workflows/yaml-lint.yml b/.github/workflows/yaml-lint.yml new file mode 100644 index 00000000000..f02bd6bc262 --- /dev/null +++ b/.github/workflows/yaml-lint.yml @@ -0,0 +1,18 @@ +name: YAML Lint + +on: + push: + paths: + - '**.yml' + +jobs: + lint: + name: Lint + timeout-minutes: 3 + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v2.3.4 + - uses: ibiqlik/action-yamllint@v3.0.2 + with: + config_file: .yaml-lint.yml + strict: false diff --git a/.github/yarn-run/action.js b/.github/yarn-run/action.js new file mode 100644 index 00000000000..d3b51d52fa0 --- /dev/null +++ b/.github/yarn-run/action.js @@ -0,0 +1,17 @@ +// - name: Pack +// uses: ./.github/actions/yarn-run +// with: +// command: pack + +const run = require('execa')( + 'yarn', + ['run', process.env.INPUT_COMMAND], + {cwd: process.cwd(),} +); + +run.stdout.pipe(process.stdout); +run.stderr.pipe(process.stderr); + +run + .then(result => process.exit(result.exitCode)) + .catch(error => process.exit(error.exitCode || -1)); diff --git a/.github/yarn-run/action.yml b/.github/yarn-run/action.yml new file mode 100644 index 00000000000..f4b432eac40 --- /dev/null +++ b/.github/yarn-run/action.yml @@ -0,0 +1,9 @@ +name: 'Run a Yarn command' +description: 'Locally run a forked Yarn command as an action.' +inputs: + command: + description: 'Command' + default: 'help' +runs: + using: 'node12' + main: 'action.js' diff --git a/.gitignore b/.gitignore index 6a78d462173..667b99f7436 100644 --- a/.gitignore +++ b/.gitignore @@ -1,16 +1,23 @@ -# Compiled class file -*.class - -# Log file +# Log files *.log +logs +npm-debug.log* +yarn-debug.log* +yarn-error.log* +lerna-debug.log* # BlueJ files *.ctxt +*.iml -# Mobile Tools for Java (J2ME) -.mtj.tmp/ +# Cache files +.npm +.eslintcache +lunr-index.json +build.txt +.ghpages-tmp -# Package Files # +# Package files *.jar *.war *.nar @@ -18,18 +25,47 @@ *.zip *.tar.gz *.rar +*.tgz +**/.DS_Store + +# License files +licenses.json # virtual machine crash logs, see http://www.java.com/en/download/help/error_hotspot.xml hs_err_pid* +pids +*.pid +*.seed +*.pid.lock + +# Yarn Integrity file +.yarn-integrity + +# TypeScript cache +*.tsbuildinfo + +# Optional REPL history +.node_repl_history # Build and temp folders .settings/ .idea/ +.cache/ .reporting/ bin/ tmp/ build/* -packages/ +coverage/ target/ log/ -site/ \ No newline at end of file +site/ +dist/ +.cache +node_modules +venv + +# Env files +.env + +# Crowdin files +.crowdin diff --git a/.gitlint b/.gitlint new file mode 100644 index 00000000000..ac31273a9ae --- /dev/null +++ b/.gitlint @@ -0,0 +1,818 @@ +# http://jorisroovers.github.io/gitlint/configuration/ +[general] +ignore=body-is-missing,body-max-line-length + +[title-max-length] +line-length=72 + +[title-must-not-contain-word] +words= + abused,abusing, + accepted,accepting, + accessed,accessing, + accorded,according, + accounted,accounting, + accused,accusing, + achieved,achieving, + acquired,acquiring, + acted,acting, + adapted,adapting, + added,adding, + addressed,addressing, + adjusted,adjusting, + admired,admiring, + admitted,admitting, + adopted,adopting, + advanced,advancing, + affected,affecting, + afforded,affording, + aged,aging, + agreed,agreeing, + aired,airing, + alarmed,alarming, + allowed,allowing, + amazed,amazing + amounted,amounting, + angered,angering, + angled,angling, + announced,announcing, + answered,answering, + anticipated,anticipating, + apologized,apologizing, + appealed,appealing, + appeared,appearing, + applied,applying, + appreciated,appreciating, + approached,approaching, + appropriated,appropriating, + approved,approving, + argued,arguing, + armed,arming, + arose,arising, + arrived,arriving, + asked,asking, + assisted,assisting, + associated,associating, + assumed,assuming, + assured,assuring, + ate,eating, + attached,attaching, + attacked,attacking, + attempted,attempting, + attended,attending, + attracted,attracting, + authored,authoring, + automated,automating, + averaged,averaging, + avoided,avoiding, + avoided,avoiding, + awarded,awarding, + babied,babying, + bagged,bagging, + baked,baking, + balanced,balancing, + balled,balling, + banded,banding, + banked,banking, + barred,barring, + based,basing, + batted,batting, + battled,battling, + beached,beaching, + beating, + became,becoming, + bedded,bedding, + been + begun,began,beginning, + behaved,behaving, + believed,believing, + belonged,belonging, + belted,belting, + benched,benching, + benefitted,benefitting, + bent,bending, + betting, + bicycled,bicycling, + bidding, + biked,biking, + billed,billing, + birthed,birthing, + bit,biting, + blamed,blaming, + blanked,blanking, + blew,blowing, + blinded,blinding, + blocked,blocking, + boarded,boarding, + booked,booking, + booted,booting, + bore,bearing, + born, + borrowed,borrowing, + bossed,bossing, + bothered,bothering, + bottled,bottling, + bottomed,bottoming, + bought,buying, + bowled,bowling, + boxed,boxing, + branched,branching, + bricked,bricking, + bridged,bridging, + broke,breaking, + brought,bringing, + brushed,brushing, + bugged,bugging, + built,building + built,building, + bumped,bumping, + burned,burning, + bussed,bussing, + buttoned,buttoning, + cabled,cabling, + calculated,calculating, + called,calling, + came,coming, + campaigned,campaigning, + camped,camping, + cancelled,cancelling,canceled, + candied, + capped,capping, + carded,carding, + cared,caring, + carpeted, + carried,carrying, + cashed,cashing, + caught,catching + caused,causing, + celebrated,celebrating, + chained,chaining, + chaired,chairing, + challenged,challenging, + championed,championing, + changed,changing, + channelled,channelling,channeled, + charged,charging, + charted,charting, + checked,checking, + chipped,chipping, + chose,choosing, + claimed,claiming, + cleaned,cleaning, + clicked,clicking, + clocked,clocking, + closed,closing, + closed,closing, + clubbed,clubbing, + coached,coaching, + coasted,coasting, + coated,coating, + coded,coding, + collared,collaring, + collected,collecting, + combined,combining, + comforted,comforting, + commanded,commanding, + commented,commenting, + commissioned,commissioning, + committed,committing, + communicated,communicating, + compared,comparing, + competed,competing, + complained,complaining, + completed,completing, + complicated,complicating, + concentrated,concentrating, + concerned,concerning, + conditioned, + configured,configuring, + confined,confining, + confirmed,confirming, + connected,connecting, + considered,considering, + consisted,consisting, + consulted,consulting, + contacted,contacting, + contained,containing, + contested,contesting, + continued,continuing, + contributed,contributing, + converted,converting, + convinced,convincing, + cooked,cooking, + copied,copying, + corrected,correcting, + corrected,correcting, + could, + counted,counting, + countered,countering, + coursed,coursing, + courted,courting, + covered,covering, + cracked,cracking, + crafted,crafting, + crashed,crashing, + creamed,creaming, + created,creating, + created,creating, + credited,crediting, + crewed,crewing, + cried,crying, + criticized,criticizing, + crossed,crossing, + cupped,cupping, + customized,customizing, + cutting, + cycled,cycling, + damaged,damaging, + dared,daring, + dated,dating, + deactivated,decativating, + dealt,dealing, + debated,debating, + debugging, + decided,deciding, + decomissioned,decomissioning, + decommissioned,decommisioning, + defaulted,defaulting, + defined,defining, + delayed,delaying, + deleted,deleting, + delivered,delivering, + demanded,demanding, + demonstrated,demonstrating, + depended,depending, + deployed,deploying, + deposited,depositing, + deprecated,deprecating, + described,describing, + described,describing, + deserved,deserving, + designed,designing, + desired,desiring, + destroyed,destroying, + detailed,detailing, + detected,detecting, + determined,determining, + developed,developing, + did,doing, + died,dying, + differed,differing, + disabled,disabling, + disagreed,disagreeing, + disappointed,disapponting, + discounted,discounting, + discovered,discovering, + discussed,discussing, + displayed,displaying, + displayed,displaying, + distributed,distributing, + divided,dividing, + doctored,doctoring, + documented,documenting, + documented,documenting, + dogged,dogging, + dotted,dotting, + doubted,doubting, + downgraded,downgrading, + drafted,drafting, + dragged,dragging, + drank,drunk,drinking, + dreamed,dreaming, + drew,drawing, + dried,drying, + dried,drying, + dropped,dropping, + drove,driving, + dug,digging, + dumped,dumping, + dusted,dusting, + earned,earning, + edited,editing, + effected,effecting, + eliminated,eliminating, + emphasized,emphasizing, + employed,employing, + emptied,emptying, + enabled,enabling, + encouraged,encouraging, + ended,ending, + engaged,engaging, + engineered,engineering + enhanced,enhancing, + enjoyed,enjoying, + ensured,ensuring, + ensured,ensuring, + entered,entering, + escaped,escaping, + established,establing, + estimated,estimating, + exacted,exacting, + examined,examining, + exchanged,exchanging, + excused,excusing, + exercised,exercising, + exited,exiting, + expanded,expanding, + expected,expecting, + experienced,experiencing, + explained,explaining, + explored,exploring, + exposed,exposing, + exposed,exposing, + expressed,expressing, + extended,extending, + extended,extending, + eyed,eyeing, + faced,facing, + factored,factoring, + failed,failing, + faulted,faulting, + feared,fearing, + featured,featuring, + fed,feeding, + fell,falling, + felt,feeling, + fielded,fielding, + figured,figuring, + filed,filing, + filled,filling, + filmed,filming, + financed,financing, + fingered,fingering, + finished,finishing, + fired,firing, + fished,fishing, + fitted,fitting, + fixed,fixing, + fixed,fixing, + flew,flying, + flowed,flowing, + focused,focusing, + folded,folding, + followed,following, + forced,forcing, + forgot,forgetting, + formed,forming, + fought,fighting, + found,finding, + framed,framing, + frequented,frequenting, + friended,friending, + fueled,fueling, + functioned,functioning, + gained,gaining, + gapped,gapping, + gassed,gassing, + gathered,gathering, + gave,giving, + geared,gearing, + generated,generating + generated,generating, + gifted,gifting, + got,getting, + grabbed,grabbing, + graded,grading, + grew,growing, + grounded,grounding, + grouped,grouping, + guaranteed,guaranteeing, + guarded,guarding, + guessed,guessing, + guided,guiding, + had,having, + handed,handing, + handled,handling, + hanged,hung,hanging, + happened,happening, + harmed,harming, + hated,hating, + heard,hearing, + heated,heating, + held,holding, + helped,helping, + hesitated,hesitating, + hid,hiding, + highlighted,highlighting, + hired,hiring, + hit,hitting, + hooked,hooking, + hope,hoped,hoping, + hosted,hosting, + hunted,hunting, + hurried,hurrying, + hurting, + identified,identifying, + ignored,ignoring, + ignored,ignoring, + illustrated,illustrating, + imaged,imaging, + imagined,imagining, + impacted,impacting, + implemented,implementing, + implied,implying, + impressed,impressing, + improved,improving, + improved,improving, + included,including, + included,including, + incorporated,incorporating, + increased,increasing, + increased,increasing, + indicated,indicating, + influenced,influencing, + informed,informing, + insisted,insisting, + installed,installing, + intended,intending, + interviewed,interviewing, + introduced,introducing, + invested,investing, + investigated,investigating, + invited,inviting, + involved,involving, + ironed,ironing, + issued,issuing, + joined,joining, + joked,joking, + judged,judging, + juiced,juicing, + jumped,jumping, + justified,justifying, + kept,keeping, + kicked,kicking, + killed,killing, + kissed,kissing, + knew,knowing, + lacked,lacking, + laughed,laughing, + layered,layering, + learned,learning, + led,leading, + left,leaving, + letting, + lifted,lifting, + liked,liking, + limited,limiting, + lined,lining, + linked,linking, + listed,listing, + listened,listening, + lit,lighting, + lived,living, + loaded,loading, + loaned,loaning, + locked,locking, + logged,logging, + looked,looking, + lost,losing, + machined,machining, + made,making, + mailed,mailing, + maintained,maintaining, + managed,managing, + manufactured,manufacturing + marched,marching, + marked,marking, + married,marrying, + matched,matching, + mated,mating, + meant, + mentioned,mentioning, + merge,merged,merging, + messed,messing, + met, + milked,milking, + mirrored,mirroring, + missed,missing, + mixed,mixing, + modeled,modelled,modelling, + modified,modifying, + monitored,monitoring, + moved,moving, + moved,moving, + nailed,nailing, + named,naming, + needed,needing, + negotiated,negotiating, + networked, + noted,noting, + noticed,noticing, + numbered,numbering, + nursed,nursing, + objected,objecting, + obtained,obtaining, + occurred,occurring, + offered,offering, + opened,opening, + operated,operating, + optimized,optimizing, + ordered,ordering, + organized,organizing, + overcame,overcoming, + owned,owning, + packaged,packaging, + packed,packing, + paged,paging, + paid,paying, + painted,painting, + paired,pairing, + parked,parking, + participated,participating, + passed,passing, + paused,pausing, + perfected,perfecting, + performed,performing, + permitted,permitting, + persuaded,persuading, + phased,phasing, + picked,picking, + pictured,picturing, + pinned,pinning, + piped,piping, + pitched,pitching, + placed,placing, + planned,planning, + planted,planting, + played,playing, + pointed,pointing, + pooled,pooling, + popped,popping, + positioned,positioning, + possessed,possessing, + posted,posting, + potted,potting, + pounded,pounding, + poured,pouring, + practiced,practicing, + prayed,praying, + preferred,preferring, + prepared,preparing, + pressed,pressing, + pressured,pressuring, + pretended,pretending, + prevented,preventing, + priced,pricing, + printed,printing, + processed,processing, + produced,producing, + profiled,profiling, + programmed,programming, + progressed,progressing, + projected,projecting, + promised,promising, + prompted,prompting, + proposed,proposing, + protected,protecting, + proved,proving, + provided,providing, + provided,providing, + pulled,pulling, + punched,punching, + purchased,purchasing, + pursued,pursuing, + pushed,pushing, + putting, + qualified,qualifying, + quitting, + quoted,quoting, + raced,racing, + raised,raising, + ran,running, + ranged,ranging, + rated,rating, + reached,reaching, + reacted,reacting, + reading, + realized,realizing, + rebuilt,rebuilding, + received,receiving, + recognized,recognizing, + recommended,recommending, + recorded,recording, + recovered,recovering, + reduced,reducing, + refactored,refactoring, + referenced,referencing, + referred,referring, + reflected,reflecting, + refreshed,refreshing, + refused,refusing, + registered,registering, + regretted,regretting, + reinstated,reinstating, + related,relating, + relaxed,relaxing, + released,releasing, + relied,relying, + relieved,relieving, + remained,remaining + remembered,remembering, + reminded,reminding, + removed,removing, + removed,removing, + renamed,renaming, + rented,renting, + repaired,reparing, + repeated,repeating, + replaced,replacing, + replaced,replacing, + replied,replying, + reported,reporting, + represented,representing, + reprovisioned,reprovisioning, + requested,requesting, + required,requiring, + researched,researching, + reserved,reserving, + resisted,resisting, + resolved,resolving, + resolved,resolving, + resorted,resorting, + respected,respecting, + responded,responding, + resulted,resulting, + retained,retaining, + retired,retiring, + returned,returning, + revealed,revealing, + reverted,reverting, + reviewed,reviewing, + rewarded,rewarding, + ripped,ripping, + risked,risking, + rocked,rocking, + rolled,rolling, + roofed,roofing, + roped,roping, + rowed,rowing, + rubbed,rubbing, + ruined,ruining, + ruled,ruling, + rushed,rushing, + said,saying, + sailed,sailing, + saved,saving, + saw,seeing, + scaled,scaling, + scheduled,scheduling, + scored,scoring, + scratched,scratching, + screened,screening, + screwed,screwing, + scripted,scripting, + searched,searching, + sectioned,sectioning, + secured,securing, + seemed,seeming, + selected,selecting, + sensed,sensing, + sent,sending, + separated,separating, + served,serving, + serviced,servicing, + settled,settling, + shamed,shaming, + shaped,shaping, + shared,sharing, + sharpened,sharpening, + sheltered,sheltering, + shifted,shifting, + shipped,shipping, + shocked,shocking, + shone,shining, + shook,shaking, + shopped,shopping, + shot,shooting, + should, + showed,showing, + showered,showering, + shutting, + signed,signing, + simplified,simplifying, + sized,sizing, + skinned,skinning, + skirted,skirting, + slept,sleeping, + sliced,slicing, + slid,sliding, + slipped,slipping, + smoked,smoking, + sold,selling, + solved,solving, + sorted,sorting, + sought,seeking, + sourced,sourcing, + spaced,spacing, + specified,specifying, + spelled, + spent,spending, + splitting, + spoke,speaking, + spotted,spotting, + sprayed,spraying, + staged,staging, + starred,starring, + started,starting, + stated,stating, + stationed, + stayed,staying, + stepped,stepping, + stole,stealing, + stopped,stopping, + stored,storing, + stormed,storming, + strained,straining, + stressed,stressing, + stretched,stretching, + stripped,stripping, + stroked,stroking, + structured,structuring, + struggled,struggling, + strung,stringing, + stuck,sticking, + studied,studying, + stuffed,stuffing, + styled,styling, + submitted,submitting, + succeeded,succeeding, + suffered,suffering, + suggested,suggesting, + sunk,sinking, + supplied,supplying, + supported,supporting, + supposed,supposing, + surprised,surprising, + surveyed,surveying, + survived,surviving, + suspected,suspecting, + switched,switching, + switched,switching, + swung,swinging, + tackled,tackling, + tapped,tapping, + targeted,targeting, + tasked,tasking, + tasted,tasting, + taught,teaching, + taxed,taxing, + teamed,teaming, + tended,tending, + tested,testing, + texted,texting, + thanked,thanking, + thought,thinking, + threw,throwing, + ticketed,ticketing, + tied,tying, + tipped,tipping, + titled, + told,telling, + took,taking, + tore,tearing, + touched,touching, + toured,touring, + tracked,tracking, + traded,trading, + trained,training, + transitioned,transitioning, + translated,translating, + trashed,trashing, + traveled,travelled,travelling, + treated,treating, + tried,trying + tripped,tripping, + trusted,trusting, + tuned,tuning, + turned,turning, + twisted,twisting, + updated,updating, + upgraded,upgrading, + used,using, + used,using, + varied,varying, + viewed,viewing, + visited,visiting, + voiced,voicing, + waited,waiting, + walked,walking, + wanted,wanting, + warmed,warming, + warned,warning, + was, + washed,washing, + wasted,wasting, + watched,watching, + waved,waving, + went,going, + were, + were,being, + wish,wished,wishing, + woke,waking, + wondered,wondering, + wore,wearing, + worried,worrying, + would, + wrapped,wrapping, + wrote,writing, + zoned,zoning, diff --git a/.gitpod.Dockerfile b/.gitpod.Dockerfile new file mode 100644 index 00000000000..ff7861f6449 --- /dev/null +++ b/.gitpod.Dockerfile @@ -0,0 +1,57 @@ +#!/bin/echo docker build . -f +# -*- coding: utf-8 -*- + +FROM gitpod/workspace-full:latest + +ARG BUILD_DATE="$(git rev-parse --short HEAD)" +ARG VCS_REF="$(date -u +\"%Y-%m-%dT%H:%M:%SZ\")" +ARG VERSION="1.0.0" +ARG HOME_DIR="/home/gitpod" + +LABEL maintainer="Alexander Rogalskiy " +LABEL organization="sensiblemetrics.io" +LABEL io.sensiblemetrics.gitpod.build-date=$BUILD_DATE +LABEL io.sensiblemetrics.gitpod.name="java-patterns" +LABEL io.sensiblemetrics.gitpod.description="Java Design Patterns Docs" +LABEL io.sensiblemetrics.gitpod.url="https://sensiblemetrics.io/" +LABEL io.sensiblemetrics.gitpod.vcs-ref=$VCS_REF +LABEL io.sensiblemetrics.gitpod.vcs-url="https://github.com/AlexRogalskiy/java-patterns" +LABEL io.sensiblemetrics.gitpod.vendor="Sensiblemetrics.io" +LABEL io.sensiblemetrics.gitpod.version=$VERSION + +ENV LC_ALL en_US.UTF-8 +ENV LANG $LC_ALL +ENV HOME $HOME_DIR + +USER root +RUN sudo echo '%sudo ALL=(ALL) NOPASSWD:ALL' >> /etc/sudoers + +## Disable coredump +RUN sudo /bin/su -c "echo 'Set disable_coredump false' >> /etc/sudo.conf" + +RUN sudo apt-get update && \ + sudo apt-get -y install \ + libgtkextra-dev \ + libgconf2-dev \ + libnss3 \ + libasound2 \ + libxtst-dev \ + libxss1 \ + libxss-dev \ + software-properties-common \ + build-essential \ + xvfb \ + curl \ + libgtk-3-0 \ + unzip + +RUN sudo curl -sS https://dl.yarnpkg.com/debian/pubkey.gpg | apt-key add - +RUN sudo echo "deb https://dl.yarnpkg.com/debian/ stable main" | tee /etc/apt/sources.list.d/yarn.list + +RUN sudo curl -sL https://deb.nodesource.com/setup_14.x | bash - + +RUN sudo apt-get update && apt-get -y install yarn nodejs + +USER gitpod + +WORKDIR $HOME diff --git a/.gitpod.yml b/.gitpod.yml new file mode 100644 index 00000000000..2c0c7e81668 --- /dev/null +++ b/.gitpod.yml @@ -0,0 +1,38 @@ +github: + prebuilds: + # enable for the master/default branch (defaults to true) + master: true + # enable for all branches in this repo (defaults to false) + branches: true + # add a "Review in Gitpod" button as a comment to pull requests (defaults to false) + addComment: false + # add a "Review in Gitpod" button to the pull request's description (defaults to false) + addBadge: false + # add a label once the prebuild is ready to pull requests (defaults to false) + addLabel: false + # enable for pull requests coming from this repo (defaults to true) + pullRequests: true + # enable for pull requests coming from forks (defaults to false) + pullRequestsFromForks: true + # add a check to pull requests (defaults to true) + addCheck: true + +image: + file: .gitpod.Dockerfile + +ports: + - port: 8000 + visibility: public + onOpen: open-preview +# onOpen: open-browser +tasks: + - init: npm install && npm run all + command: > + npm run lerna:dist && printf "\nWelcome to Java Design Patterns Docs\nTo + rebuild the app, simply run './scripts/build-docs.sh' and reload + index.html.\n\n" && chmod +x ./scripts/build-docs.sh && + ./scripts/build-docs.sh 2>/dev/null + +vscode: + extensions: + - ms-azuretools.vscode-docker diff --git a/.htmllintrc b/.htmllintrc new file mode 100644 index 00000000000..1ab933490de --- /dev/null +++ b/.htmllintrc @@ -0,0 +1,19 @@ +{ + "indent-style": "tabs", + "line-end-style": false, + "attr-quote-style": "double", + "spec-char-escape": false, + "attr-bans": [ + "align", + "background", + "bgcolor", + "border", + "frameborder", + "longdesc", + "marginwidth", + "marginheight", + "scrolling" + ], + "tag-bans": [ "b", "i" ], + "id-class-style": false +} diff --git a/.htmltest.external.yml b/.htmltest.external.yml new file mode 100644 index 00000000000..78dd9305626 --- /dev/null +++ b/.htmltest.external.yml @@ -0,0 +1,4 @@ +DirectoryPath: docs +IgnoreDirectoryMissingTrailingSlash: true +IgnoreAltMissing: true +CheckDoctype: false diff --git a/.htmltest.yml b/.htmltest.yml new file mode 100644 index 00000000000..4203af51560 --- /dev/null +++ b/.htmltest.yml @@ -0,0 +1,5 @@ +DirectoryPath: docs +IgnoreDirectoryMissingTrailingSlash: true +CheckExternal: false +IgnoreAltMissing: true +CheckDoctype: false diff --git a/.husky/.gitignore b/.husky/.gitignore new file mode 100644 index 00000000000..31354ec1389 --- /dev/null +++ b/.husky/.gitignore @@ -0,0 +1 @@ +_ diff --git a/.husky/post-checkout b/.husky/post-checkout new file mode 100644 index 00000000000..87899e9f891 --- /dev/null +++ b/.husky/post-checkout @@ -0,0 +1,15 @@ +#!/bin/sh + +FILE_NAME="$(dirname "$0")/_/husky.sh" + +# Conditionally invoke so as to avoid running npm commands if this is a clean checkout (ie before installing npm modules) +if [ -f "$FILE_NAME" ]; then + # shellcheck source=./_/husky.sh + . "$FILE_NAME" + + command -v git-lfs >/dev/null 2>&1 || { + echo >&2 "\nThis repository is configured for Git LFS but 'git-lfs' was not found on your path. If you no longer wish to use Git LFS, remove this hook by deleting .git/hooks/post-commit.\n" + exit 2 + } + git lfs post-checkout "$@" +fi diff --git a/.husky/post-commit b/.husky/post-commit new file mode 100644 index 00000000000..d3d7abd6d41 --- /dev/null +++ b/.husky/post-commit @@ -0,0 +1,17 @@ +#!/bin/sh + +FILE_NAME="$(dirname "$0")/_/husky.sh" + +# Conditionally invoke so as to avoid running npm commands if this is a clean checkout (ie before installing npm modules) +if [ -f "$FILE_NAME" ]; then + # shellcheck source=./_/husky.sh + . "$FILE_NAME" + + command -v git-lfs >/dev/null 2>&1 || { + echo >&2 "\nThis repository is configured for Git LFS but 'git-lfs' was not found on your path. If you no longer wish to use Git LFS, remove this hook by deleting .git/hooks/post-commit.\n" + exit 2 + } + git lfs post-commit "$@" + + npm run validate:commit +fi diff --git a/.husky/post-merge b/.husky/post-merge new file mode 100644 index 00000000000..f8f59f5a6fe --- /dev/null +++ b/.husky/post-merge @@ -0,0 +1,15 @@ +#!/bin/sh + +FILE_NAME="$(dirname "$0")/_/husky.sh" + +# Conditionally invoke so as to avoid running npm commands if this is a clean checkout (ie before installing npm modules) +if [ -f "$FILE_NAME" ]; then + # shellcheck source=./_/husky.sh + . "$FILE_NAME" + + command -v git-lfs >/dev/null 2>&1 || { + echo >&2 "\nThis repository is configured for Git LFS but 'git-lfs' was not found on your path. If you no longer wish to use Git LFS, remove this hook by deleting .git/hooks/post-commit.\n" + exit 2 + } + git lfs post-merge "$@" +fi diff --git a/.husky/pre-commit b/.husky/pre-commit new file mode 100644 index 00000000000..c34b294fb70 --- /dev/null +++ b/.husky/pre-commit @@ -0,0 +1,20 @@ +#!/bin/sh + +FILE_NAME="$(dirname "$0")/_/husky.sh" + +# Conditionally invoke so as to avoid running npm commands if this is a clean checkout (ie before installing npm modules) +if [ -f "$FILE_NAME" ]; then + # shellcheck source=./_/husky.sh + . "$FILE_NAME" + + npm run lint:staged + npm run all + npm run changelog:simple + npm run script:changelog + npm run check:commit + + git add docs/ + + git add README.md + git add CHANGELOG.md +fi diff --git a/.husky/pre-push b/.husky/pre-push new file mode 100644 index 00000000000..54353e427d3 --- /dev/null +++ b/.husky/pre-push @@ -0,0 +1,17 @@ +#!/bin/sh + +FILE_NAME="$(dirname "$0")/_/husky.sh" + +# Conditionally invoke so as to avoid running npm commands if this is a clean checkout (ie before installing npm modules) +if [ -f "$FILE_NAME" ]; then + # shellcheck source=./_/husky.sh + . "$FILE_NAME" + + command -v git-lfs >/dev/null 2>&1 || { + echo >&2 "\nThis repository is configured for Git LFS but 'git-lfs' was not found on your path. If you no longer wish to use Git LFS, remove this hook by deleting .git/hooks/post-commit.\n" + exit 2 + } + git lfs pre-push "$@" + + npm run check:all +fi diff --git a/.husky/prepare-commit-msg b/.husky/prepare-commit-msg new file mode 100644 index 00000000000..c5eae980330 --- /dev/null +++ b/.husky/prepare-commit-msg @@ -0,0 +1,11 @@ +#!/bin/sh + +FILE_NAME="$(dirname "$0")/_/husky.sh" + +# Conditionally invoke so as to avoid running npm commands if this is a clean checkout (ie before installing npm modules) +if [ -f "$FILE_NAME" ]; then + # shellcheck source=./_/husky.sh + . "$FILE_NAME" + +# (exec < /dev/tty && git-cz --hook --non-interactive --type=feat --subject="added new features") || true +fi diff --git a/.imgbotconfig b/.imgbotconfig new file mode 100644 index 00000000000..40c6b71c437 --- /dev/null +++ b/.imgbotconfig @@ -0,0 +1,3 @@ +{ + "ignoredFiles": ["docs/assets/**/*.{svg,png,ico}"] +} diff --git a/.jsbeautifyrc b/.jsbeautifyrc new file mode 100644 index 00000000000..de6d6573c86 --- /dev/null +++ b/.jsbeautifyrc @@ -0,0 +1,29 @@ +{ + "js": { + "brace_style": "collapse", + "break_chained_methods": true, + "e4x": false, + "eval_code": false, + "indent_level": 0, + "indent_with_tabs": false, + "indent_size": 4, + "indent_char": " ", + "jslint_happy": true, + "keep_array_indentation": true, + "keep_function_indentation": false, + "max_preserve_newlines": 3, + "preserve_newlines": true, + "space_before_conditional": true, + "space-after-anon-function": true, + "end_with_newline": true, + "space_in_paren": false, + "unescape_strings": true, + "wrap_line_length": 120, + "unformatted": ["a", "abbr", "area", "audio", "b", "bdi", "bdo", "br", "button", "canvas", "cite", "code", "data", + "datalist", "del", "dfn", "em", "embed", "i", "iframe", "img", "input", "ins", "kbd", "keygen", "label", "map", + "mark", "math", "meter", "noscript", "object", "output", "progress", "q", "ruby", "s", "samp", "select", "small", + "span", "strong", "sub", "sup", "template", "textarea", "time", "u", "var", "video", "wbr", "text", "acronym", + "address", "big", "dt", "ins", "small", "strike", "tt", "pre", "h1", "h2", "h3", "h4", "h5", "h6"] + "allowed_file_extensions": ["js", "json", "jshintrc", "jsbeautifyrc"] + } +} diff --git a/.jscsrc b/.jscsrc new file mode 100644 index 00000000000..3522f7fe6e4 --- /dev/null +++ b/.jscsrc @@ -0,0 +1,115 @@ +{ + "requireCurlyBraces": [ + "if", + "else", + "for", + "while", + "do", + "try", + "catch" + ], + "requireSpaceAfterKeywords": [ + "if", + "else", + "for", + "while", + "do", + "switch", + "return", + "try", + "catch" + ], + "requireSemicolons": true, + "requireSpacesInForStatement": true, + "requireSpaceBeforeBlockStatements": true, + "requireParenthesesAroundIIFE": true, + "requireSpacesInConditionalExpression": true, + "requireSpacesInAnonymousFunctionExpression": { + "beforeOpeningCurlyBrace": true + }, + "requireSpacesInNamedFunctionExpression": { + "beforeOpeningCurlyBrace": true + }, + "requireBlocksOnNewline": true, + "disallowEmptyBlocks": false, + "disallowSpacesInsideObjectBrackets": true, + "disallowSpacesInsideArrayBrackets": true, + "disallowSpacesInsideParentheses": true, + "requireSpaceAfterComma": true, + "disallowSpaceAfterPrefixUnaryOperators": [ + "++", + "--", + "+", + "-", + "~", + "!" + ], + "disallowSpaceBeforePostfixUnaryOperators": [ + "++", + "--" + ], + "requireSpaceBeforeBinaryOperators": [ + "=", + "+=", + "-=", + "*=", + "/=", + "%=", + "<<=", + ">>=", + ">>>=", + "&=", + "|=", + "^=", + "+", + "-", + "*", + "/", + "%", + "<<", + ">>", + ">>>", + "&", + "|", + "^", + "&&", + "||", + "===", + "==", + ">=", + "<=", + "<", + ">", + "!=", + "!==" + ], + "requireSpaceAfterBinaryOperators": true, + "requireCamelCaseOrUpperCaseIdentifiers": { + "ignoreProperties": true + }, + "disallowKeywords": [ + "with" + ], + "disallowMultipleLineStrings": true, + "validateLineBreaks": "LF", + "validateIndentation": 2, + "disallowTrailingComma": false, + "requireLineFeedAtFileEnd": true, + "requireCapitalizedComments": true, + "requireSpaceAfterLineComment": { + "allExcept": [ + "//////////////////////////////////////////////////" + ] + }, + "jsDoc": { + "checkAnnotations": true, + "checkRedundantAccess": true, + "checkTypes": "capitalizedNativeCase", + "requireNewlineAfterDescription": true, + "checkParamExistence": true, + "checkParamNames": true, + "requireParamTypes": true, + "checkRedundantParams": true, + "requireReturnTypes": true + } +} diff --git a/.jshintrc b/.jshintrc new file mode 100644 index 00000000000..1a5e7d93793 --- /dev/null +++ b/.jshintrc @@ -0,0 +1,171 @@ +{ + // JSHint Default Configuration File (as on JSHint website) + // See http://jshint.com/docs/ for more details + + "esversion": 8, + // {int} Default ES version + + "maxerr": 50, + // {int} Maximum error before stopping + + // Enforcing + "bitwise": true, + // true: Prohibit bitwise operators (&, |, ^, etc.) + "camelcase": false, + // true: Identifiers must be in camelCase + "curly": true, + // true: Require {} for every new block or scope + "eqeqeq": true, + // true: Require triple equals (===) for comparison + "forin": true, + // true: Require filtering for..in loops with obj.hasOwnProperty() + "freeze": true, + // true: prohibits overwriting prototypes of native objects such as Array, Date etc. + "immed": false, + // true: Require immediate invocations to be wrapped in parens e.g. `(function () { } ());` + "indent": 4, + // {int} Number of spaces to use for indentation + "latedef": false, + // true: Require variables/functions to be defined before being used + "newcap": false, + // true: Require capitalization of all constructor functions e.g. `new F()` + "noarg": true, + // true: Prohibit use of `arguments.caller` and `arguments.callee` + "noempty": true, + // true: Prohibit use of empty blocks + "nonbsp": true, + // true: Prohibit "non-breaking whitespace" characters. + "nonew": false, + // true: Prohibit use of constructors for side-effects (without assignment) + "plusplus": false, + // true: Prohibit use of `++` & `--` + "quotmark": false, + // Quotation mark consistency: + // false : do nothing (default) + // true : ensure whatever is used is consistent + // "single" : require single quotes + // "double" : require double quotes + "undef": true, + // true: Require all non-global variables to be declared (prevents global leaks) + "unused": "vars", + // Unused variables: + // true : all variables, last function parameter + // "vars" : all variables only + // "strict" : all variables, all function parameters + "strict": false, + // true: Requires all functions run in ES5 Strict Mode + "maxparams": false, + // {int} Max number of formal params allowed per function + "maxdepth": false, + // {int} Max depth of nested blocks (within functions) + "maxstatements": false, + // {int} Max number statements per function + "maxcomplexity": false, + // {int} Max cyclomatic complexity per function + "maxlen": false, + // {int} Max number of characters per line + "varstmt": false, + // true: Disallow any var statements. Only `let` and `const` are allowed. + + // Relaxing + "asi": false, + // true: Tolerate Automatic Semicolon Insertion (no semicolons) + "boss": false, + // true: Tolerate assignments where comparisons would be expected + "debug": false, + // true: Allow debugger statements e.g. browser breakpoints. + "eqnull": false, + // true: Tolerate use of `== null` + "es5": false, + // true: Allow ES5 syntax (ex: getters and setters) + "esnext": false, + // true: Allow ES.next (ES6) syntax (ex: `const`) + "moz": false, + // true: Allow Mozilla specific syntax (extends and overrides esnext features) + // (ex: `for each`, multiple try/catch, function expression…) + "evil": false, + // true: Tolerate use of `eval` and `new Function()` + "expr": false, + // true: Tolerate `ExpressionStatement` as Programs + "funcscope": false, + // true: Tolerate defining variables inside control statements + "globalstrict": false, + // true: Allow global "use strict" (also enables 'strict') + "iterator": false, + // true: Tolerate using the `__iterator__` property + "lastsemic": false, + // true: Tolerate omitting a semicolon for the last statement of a 1-line block + "laxbreak": false, + // true: Tolerate possibly unsafe line breakings + "laxcomma": false, + // true: Tolerate comma-first style coding + "loopfunc": false, + // true: Tolerate functions being defined in loops + "multistr": false, + // true: Tolerate multi-line strings + "noyield": false, + // true: Tolerate generator functions with no yield statement in them. + "notypeof": false, + // true: Tolerate invalid typeof operator values + "proto": false, + // true: Tolerate using the `__proto__` property + "scripturl": false, + // true: Tolerate script-targeted URLs + "shadow": false, + // true: Allows re-define variables later in code e.g. `var x=1; x=2;` + "sub": false, + // true: Tolerate using `[]` notation when it can still be expressed in dot notation + "supernew": false, + // true: Tolerate `new function () { ... };` and `new Object;` + "validthis": false, + // true: Tolerate using this in a non-constructor function + + // Environments + "browser": true, + // Web Browser (window, document, etc) + "browserify": true, + // Browserify (node.js code in the browser) + "couch": false, + // CouchDB + "devel": true, + // Development/debugging (alert, confirm, etc) + "dojo": false, + // Dojo Toolkit + "jasmine": false, + // Jasmine + "jquery": false, + // jQuery + "mocha": true, + // Mocha + "mootools": false, + // MooTools + "node": false, + // Node.js + "nonstandard": false, + // Widely adopted globals (escape, unescape, etc) + "phantom": false, + // PhantomJS + "prototypejs": false, + // Prototype and Scriptaculous + "qunit": false, + // QUnit + "rhino": false, + // Rhino + "shelljs": false, + // ShellJS + "typed": false, + // Globals for typed array constructions + "worker": false, + // Web Workers + "wsh": false, + // Windows Scripting Host + "yui": false, + // Yahoo User Interface + + // Custom Globals + // additional predefined global variables + "globals": { + "THREE": false, + "performance": false + } +} diff --git a/.kodiak.toml b/.kodiak.toml new file mode 100644 index 00000000000..2d3d1bd1f1a --- /dev/null +++ b/.kodiak.toml @@ -0,0 +1,29 @@ +# This file is maintained in https://github.com/WeblateOrg/meta/ +# Configuration for https://kodiakhq.com/ +version = 1 + +[merge] +automerge_label = ["semver-major","semver-minor","semver-patch"] +blacklist_title_regex = "^WIP.*" +blacklist_labels = ["work in progress"] +method = "squash" +delete_branch_on_merge = true +block_on_reviews_requested = false +notify_on_conflict = true +optimistic_updates = true + +[merge.message] +title = "pull_request_title" +body = "pull_request_body" +include_pr_number = true +body_type = "markdown" + +# https://kodiakhq.com/docs/recipes#configuring-automerge-by-upgrade-type +[merge.automerge_dependencies] +versions = ["major", "minor", "patch"] +usernames = ["dependabot"] + +# if using `update.always`, add dependabot to `update.ignore_usernames` to allow +# dependabot to update and close stale dependency upgrades. +[update] +ignored_usernames = ["dependabot", "weblate"] diff --git a/.license/README.md b/.license/README.md new file mode 100644 index 00000000000..16505721960 --- /dev/null +++ b/.license/README.md @@ -0,0 +1,19 @@ +# License Checker + +Our license checker CI rely on https://github.com/pivotal/LicenseFinder. + +## How to add a new license? + +LicenseFinder is a ruby project, so make sure you have ruby installed. + +### Install the tool + +```shell +gem install license_finder +``` + +### Add a license + +```shell +license_finder permitted_licenses add MIT --decisions_file .license/dependency_decisions.yml +``` diff --git a/.license/dependency_decisions.yml b/.license/dependency_decisions.yml new file mode 100644 index 00000000000..1c5904cc0dc --- /dev/null +++ b/.license/dependency_decisions.yml @@ -0,0 +1,43 @@ +--- +- - :permit + - MIT + - :who: + :why: + :versions: [] + :when: 2021-03-12 07:35:34.645031000 Z +- - :permit + - Apache 2.0 + - :who: + :why: + :versions: [] + :when: 2021-03-12 07:19:18.243194000 Z +- - :permit + - New BSD + - :who: + :why: + :versions: [] + :when: 2021-03-12 07:19:28.540675000 Z +- - :permit + - Simplified BSD + - :who: + :why: + :versions: [] + :when: 2021-03-12 07:20:01.774212000 Z +- - :permit + - Mozilla Public License 2.0 + - :who: + :why: + :versions: [] + :when: 2021-03-12 07:21:05.194536000 Z +- - :permit + - unknown + - :who: + :why: + :versions: [] + :when: 2021-03-12 07:21:43.379269000 Z +- - :permit + - ISC + - :who: + :why: + :versions: [] + :when: 2021-03-12 07:22:07.265966000 Z diff --git a/.lintstagedrc.json b/.lintstagedrc.json new file mode 100644 index 00000000000..66fe8395456 --- /dev/null +++ b/.lintstagedrc.json @@ -0,0 +1,3 @@ +{ + "**/*.{json,yaml,yml}": "prettier --single-quote --write --ignore-unknown" +} diff --git a/.ls-lint.yml b/.ls-lint.yml new file mode 100644 index 00000000000..d984b89a2bd --- /dev/null +++ b/.ls-lint.yml @@ -0,0 +1,21 @@ +ls: + .js: kebab-case + .md: kebab-case + .ts: kebab-case + .d.ts: kebab-case + .spec.ts: kebab-case + .generated.ts: kebab-case + +ignore: + - .cache + - .eslintrc.js + - .git + - .github + - .dependabot + - idea + - coverage + - dist + - jest.config.ts + - node_modules + - SECURITY.md + - tests diff --git a/.markdownlint.yml b/.markdownlint.yml new file mode 100644 index 00000000000..0e32eecd1c7 --- /dev/null +++ b/.markdownlint.yml @@ -0,0 +1,67 @@ +--- +########################### +########################### +## Markdown Linter rules ## +########################### +########################### + +# Linter rules doc: +# - https://github.com/DavidAnson/markdownlint +# +# Note: +# To comment out a single error: +# +# any violations you want +# +# +# To run the linter locally: +# 1. install the npm package: +# `npm install -g markdownlint-cli` +# 2. Then run it in the root of the repo with +# `markdownlint -c .markdownlint.yml ./*.md` + +# Example markdownlint YAML configuration with all properties set to their default value +# Add config from DavidAnsons Markdownlint library config https://github.com/DavidAnson/vscode-markdownlint + +# Default state for all rules +default: true +line_length: false + +# Path to configuration file to extend +extends: null + +############### +# Rules by id # +############### +#https://github.com/DavidAnson/markdownlint/blob/HEAD/doc/Rules.md#md004 +MD004: false # Unordered list style +#https://github.com/DavidAnson/markdownlint/blob/HEAD/doc/Rules.md#md007 +MD007: + indent: 2 # Unordered list indentation +#https://github.com/DavidAnson/markdownlint/blob/HEAD/doc/Rules.md#md013 +MD013: + line_length: 400 # Line length 80 is far to short +#https://github.com/DavidAnson/markdownlint/blob/HEAD/doc/Rules.md#md024 +MD024: false # Allow multiple headings with same content +#https://github.com/DavidAnson/markdownlint/blob/HEAD/doc/Rules.md#md026 +MD026: + punctuation: '.,;:!。,;:' # List of not allowed +#https://github.com/DavidAnson/markdownlint/blob/HEAD/doc/Rules.md#md029 +MD029: false # Ordered list item prefix +#https://github.com/DavidAnson/markdownlint/blob/HEAD/doc/Rules.md#md033 +MD033: false # Allow inline HTML +#https://github.com/DavidAnson/markdownlint/blob/HEAD/doc/Rules.md#md034 +MD034: false # Allow Bare URL use +#https://github.com/DavidAnson/markdownlint/blob/HEAD/doc/Rules.md#md036 +MD036: false # Emphasis used instead of a heading +#https://github.com/DavidAnson/markdownlint/blob/HEAD/doc/Rules.md#md040 +MD040: false # Allow ``` blocks in md files with no language specified +#https://github.com/DavidAnson/markdownlint/blob/HEAD/doc/Rules.md#md041 +MD041: false # First line in a file should be a top-level heading +#https://github.com/DavidAnson/markdownlint/blob/HEAD/doc/Rules.md#md042 +MD042: false # Allow empty links + +################# +# Rules by tags # +################# +blank_lines: false # No errors on blank lines diff --git a/.markdownlintignore b/.markdownlintignore new file mode 100644 index 00000000000..bb72b0179bf --- /dev/null +++ b/.markdownlintignore @@ -0,0 +1,2 @@ +node_modules +tilt_modules diff --git a/.mention-bot b/.mention-bot new file mode 100644 index 00000000000..66362ac73c0 --- /dev/null +++ b/.mention-bot @@ -0,0 +1,9 @@ +{ + "maxReviewers": 2, + "numFilesToCheck": 5, + "message": "@pullRequester, thank you for the pull request! We'll request some people to review your PR. @reviewers, please review this.", + "fileBlacklist": ["*.md"], + "actions": ["opened", "labeled"], + "skipAlreadyMentionedPR": true, + "createReviewRequest": true +} diff --git a/.mergify.yml b/.mergify.yml new file mode 100644 index 00000000000..98a2071525f --- /dev/null +++ b/.mergify.yml @@ -0,0 +1,110 @@ +pull_request_rules: + - name: 'approve automated PRs that have passed checks' + conditions: + - '#files<=6' + - 'base=master' + actions: + review: + type: 'APPROVE' + message: + "We've automatically approved this PR because the checks from the + automated Pull Request have passed." + label: + add: + - 'auto-approved' + + - name: automatic merge on CI success require review + conditions: + - status-success=Travis CI - Pull Request + - '#approved-reviews-by>=1' + - '#changes-requested-reviews-by=0' + - '#commented-reviews-by=0' + - label!=block-merge + actions: + label: + add: + - quotes + merge: + method: squash + strict: smart + strict_method: merge + + # if there is a conflict in a backport PR, ping the author to send a proper backport PR + - name: ping author on conflicts + conditions: + - conflict + actions: + comment: + message: + This pull request has merge conflicts that must be resolved before it + can be merged. @{{author}} please rebase it. + https://rook.io/docs/rook/master/development-flow.html#updating-your-fork + + # automerge on master only under certain strict conditions + - name: + automerge merge master with specific label and approvals with code change + conditions: + - author=mergify[bot] + - base=master + - '#approved-reviews-by>=1' + - '#changes-requested-reviews-by=0' + - label!=do-not-merge + - label=ready-to-merge + actions: + merge: + method: merge + strict: false + dismiss_reviews: {} + delete_head_branch: {} + + - name: automatic merge on CI success for TemplateControl + conditions: + - status-success=Travis CI - Pull Request + - label=merge-when-green + - label!=block-merge + actions: + merge: + method: squash + strict: smart + + - name: delete branch after merge + conditions: + - merged + actions: + delete_head_branch: {} + + - name: Automatically approve Dependabot PRs + conditions: + - base=master + - author~=^dependabot(|-preview)\[bot\]$ + - -title~=(WIP|wip) + - -label~=(blocked|do-not-merge) + - -merged + - -closed + actions: + review: + type: APPROVE + + - name: 'delete the head branch after merge' + conditions: + - 'merged' + actions: + delete_head_branch: {} + + - name: 'ask to resolve conflict' + conditions: + - 'conflict' + actions: + comment: + message: + 'This pull request now has conflicts. Could you fix it @{{author}}? 🙏' + + - name: 'remove outdated reviews' + conditions: + - 'base=master' + actions: + dismiss_reviews: + changes_requested: true + approved: true + message: + "This Pull Request has been updated, so we're dismissing all reviews." diff --git a/.ncurc.json b/.ncurc.json new file mode 100644 index 00000000000..b157518109e --- /dev/null +++ b/.ncurc.json @@ -0,0 +1,5 @@ +{ + "upgrade": true, + "filter": "express", + "reject": ["@types/estree", "ts-node"] +} diff --git a/.nodemonignore b/.nodemonignore new file mode 100644 index 00000000000..4f5eddd3442 --- /dev/null +++ b/.nodemonignore @@ -0,0 +1,2 @@ +/.git/* +*.backup diff --git a/.npmignore b/.npmignore new file mode 100644 index 00000000000..8c997f9aae6 --- /dev/null +++ b/.npmignore @@ -0,0 +1,13 @@ +/src/ +/test/ +/coverage/ +tsconfig* +.editorconfig +.travis.yml +tslint.json +jest.config.js +.huskyrc +.lintstagedrc +.prettierignore +.prettierrc +yarn-error.log diff --git a/.npmrc b/.npmrc new file mode 100644 index 00000000000..e01bebf2741 --- /dev/null +++ b/.npmrc @@ -0,0 +1,19 @@ +init-author-name=Alexander Rogalskiy +init-author-email=hi@sensiblemetrics.io +init-author-url=http://sensiblemetrics.io +init-version=0.0.0 +init-license=MIT + +registry=https://registry.npmjs.org/ +tag-version-prefix="" + +package-lock=false +save=true +save-exact=false +legacy-peer-deps=true +scripts-prepend-node-path=auto +cache=node_cache + +auto-install-peers=true +shamefully-hoist=true +strict-peer-dependencies=false diff --git a/.nvmrc b/.nvmrc new file mode 100644 index 00000000000..d9e58927a66 --- /dev/null +++ b/.nvmrc @@ -0,0 +1 @@ +17.1.0 diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml new file mode 100644 index 00000000000..a9f5a8c0dd8 --- /dev/null +++ b/.pre-commit-config.yaml @@ -0,0 +1,91 @@ +# -*- coding: utf-8 -*- +# vim: ft=yaml +--- +# See https://pre-commit.com for more information +# See https://pre-commit.com/hooks.html for more hooks +default_stages: [commit, push] +default_language_version: + # force all unspecified Python hooks to run python3 + python: python3 +minimum_pre_commit_version: '1.20.0' +repos: + - repo: https://github.com/peterdemin/pip-compile-multi + rev: v2.4.1 + hooks: + - id: pip-compile-multi-verify + + - repo: https://github.com/lovesegfault/beautysh + rev: v6.1.0 + hooks: + - id: beautysh + args: [-i, '2'] + + - repo: https://github.com/pre-commit/pygrep-hooks + rev: v1.9.0 + hooks: + - id: python-use-type-annotations + + - repo: https://github.com/PyCQA/isort + rev: 5.8.0 + hooks: + - id: isort + args: [--profile=black, -l=99] + + - repo: meta + hooks: + - id: identity + - id: check-hooks-apply + + - repo: https://github.com/pre-commit/pre-commit-hooks + rev: v3.4.0 + hooks: + - id: check-added-large-files + - id: check-case-conflict + - id: check-executables-have-shebangs + exclude: ^scripts/windows\.sh$ + - id: check-merge-conflict + - id: check-vcs-permalinks + # - id: check-yaml + - id: end-of-file-fixer + - id: fix-byte-order-marker + - id: mixed-line-ending + - id: trailing-whitespace + + # - repo: https://github.com/Lucas-C/pre-commit-hooks + # rev: v1.1.10 + # hooks: + # - id: forbid-tabs + # - id: remove-tabs + + - repo: https://github.com/jumanjihouse/pre-commit-hooks + rev: 2.1.5 + hooks: + - id: shellcheck + # - id: shfmt + + - repo: https://github.com/codespell-project/codespell + rev: v2.0.0 + hooks: + - id: codespell + name: Run codespell + description: Check Spelling with codespell + entry: codespell --ignore-words=codespell.txt + # - repo: https://github.com/igorshubovych/markdownlint-cli + # rev: v0.27.1 + # hooks: + # - id: markdownlint + # name: Run markdownlint + # description: Checks the style of Markdown files + # entry: markdownlint -c .github/linters/.markdown-lint.yml . + # types: [markdown] + # files: \.(md|mdown|markdown)$ + + # - repo: https://github.com/adrienverge/yamllint + # rev: v1.26.1 + # hooks: + # - id: yamllint + # name: Run yamllint + # description: Check YAML files with yamllint + # entry: yamllint --strict -c .github/linters/.yaml-lint.yml + # types: [yaml] + # files: \.(yaml|yml)$ diff --git a/.pre-commit-hooks.yaml b/.pre-commit-hooks.yaml new file mode 100644 index 00000000000..ce74a43796c --- /dev/null +++ b/.pre-commit-hooks.yaml @@ -0,0 +1,14 @@ +- id: pip-compile-multi-verify + name: pip-compile-multi verify + language: python + entry: pip-compile-multi verify + files: ^requirements/ + pass_filenames: false + require_serial: true + types: [file, non-executable, text] +- id: dead-url + name: Dead URL Checker + entry: scripts/link-check.sh + language: script + types: [text] + description: This hook searches for problematic URLs. diff --git a/.prettierignore b/.prettierignore new file mode 100644 index 00000000000..4c023e552d6 --- /dev/null +++ b/.prettierignore @@ -0,0 +1,23 @@ +*.log +*.DS_Store +OSSMETADATA + +.github +.dependabot +.idea +.vscode +.husky +.ghpages-tmp + +node_modules +flow-typed +coverage +dist +helm +tilt_modules +charts +k8s +release +okteto +site +venv diff --git a/.prettierrc.yaml b/.prettierrc.yaml new file mode 100644 index 00000000000..440f08d25f2 --- /dev/null +++ b/.prettierrc.yaml @@ -0,0 +1,36 @@ +$schema: http://json.schemastore.org/prettierrc +printWidth: 110 +tabWidth: 4 +useTabs: true +endOfLine: lf +semi: true +singleQuote: true +quoteProps: 'consistent' +jsxSingleQuote: false +trailingComma: 'all' +bracketSpacing: true +arrowParens: 'avoid' +proseWrap: 'always' +overrides: + - files: + - '*.html' + - 'legacy/**/*.js' + options: + semi: true + - files: '**/*.json*' + options: + parser: json + proseWrap: 'always' + - files: '**/*.md*' + options: + parser: markdown + proseWrap: 'always' + - files: '**/*.{yaml,yml}*' + options: + parser: yaml + tabWidth: 2 + printWidth: 80 + - files: '**/.all-(contributorsrc|membersrc|sponsorsrc)' + options: + parser: 'json-stringify' + singleQuote: false diff --git a/.pullapprove.yml b/.pullapprove.yml new file mode 100644 index 00000000000..b87cc330e41 --- /dev/null +++ b/.pullapprove.yml @@ -0,0 +1,17 @@ +version: 2 + +# Group settings to apply to all groups by default, optionally being overridden later +group_defaults: + approve_by_comment: + enabled: true + approve_regex: '^(Approved|:shipit:)' + reject_regex: '^(Rejected)' + +groups: + general-approvers: + conditions: + files: + - '*' + required: 1 + users: + - AlexRogalskiy diff --git a/.pylintrc b/.pylintrc new file mode 100644 index 00000000000..2fcd1e744e0 --- /dev/null +++ b/.pylintrc @@ -0,0 +1,548 @@ +[MASTER] + +# A comma-separated list of package or module names from where C extensions may +# be loaded. Extensions are loading into the active Python interpreter and may +# run arbitrary code +extension-pkg-whitelist= + +# Add files or directories to the blacklist. They should be base names, not +# paths. +ignore=CVS + +# Add files or directories matching the regex patterns to the blacklist. The +# regex matches against base names, not paths. +ignore-patterns= + +# Python code to execute, usually for sys.path manipulation such as +# pygtk.require(). +#init-hook= + +# Use multiple processes to speed up Pylint. +jobs=1 + +# List of plugins (as comma separated values of python modules names) to load, +# usually to register additional checkers. +load-plugins= + +# Pickle collected data for later comparisons. +persistent=yes + +# Specify a configuration file. +#rcfile= + +# When enabled, pylint would attempt to guess common misconfiguration and emit +# user-friendly hints instead of false-positive error messages +suggestion-mode=yes + +# Allow loading of arbitrary C extensions. Extensions are imported into the +# active Python interpreter and may run arbitrary code. +unsafe-load-any-extension=no + + +[MESSAGES CONTROL] + +# Only show warnings with the listed confidence levels. Leave empty to show +# all. Valid levels: HIGH, INFERENCE, INFERENCE_FAILURE, UNDEFINED +confidence= + +# Disable the message, report, category or checker with the given id(s). You +# can either give multiple identifiers separated by comma (,) or put this +# option multiple times (only on the command line, not in the configuration +# file where it should appear only once).You can also use "--disable=all" to +# disable everything first and then reenable specific checks. For example, if +# you want to run only the similarities checker, you can use "--disable=all +# --enable=similarities". If you want to run only the classes checker, but have +# no Warning level messages displayed, use"--disable=all --enable=classes +# --disable=W" +disable=print-statement, + parameter-unpacking, + unpacking-in-except, + old-raise-syntax, + backtick, + long-suffix, + old-ne-operator, + old-octal-literal, + import-star-module-level, + non-ascii-bytes-literal, + raw-checker-failed, + bad-inline-option, + locally-disabled, + locally-enabled, + file-ignored, + suppressed-message, + useless-suppression, + deprecated-pragma, + apply-builtin, + basestring-builtin, + buffer-builtin, + cmp-builtin, + coerce-builtin, + execfile-builtin, + file-builtin, + long-builtin, + raw_input-builtin, + reduce-builtin, + standarderror-builtin, + unicode-builtin, + xrange-builtin, + coerce-method, + delslice-method, + getslice-method, + setslice-method, + no-absolute-import, + old-division, + dict-iter-method, + dict-view-method, + next-method-called, + metaclass-assignment, + indexing-exception, + raising-string, + reload-builtin, + oct-method, + hex-method, + nonzero-method, + cmp-method, + input-builtin, + round-builtin, + intern-builtin, + unichr-builtin, + map-builtin-not-iterating, + zip-builtin-not-iterating, + range-builtin-not-iterating, + filter-builtin-not-iterating, + using-cmp-argument, + eq-without-hash, + div-method, + idiv-method, + rdiv-method, + exception-message-attribute, + invalid-str-codec, + sys-max-int, + bad-python3-import, + deprecated-string-function, + deprecated-str-translate-call, + deprecated-itertools-function, + deprecated-types-field, + next-method-defined, + dict-items-not-iterating, + dict-keys-not-iterating, + dict-values-not-iterating, + useless-object-inheritance, + no-else-return, + no-init, + consider-using-f-string, + old-style-class + +# Enable the message, report, category or checker with the given id(s). You can +# either give multiple identifier separated by comma (,) or put this option +# multiple time (only on the command line, not in the configuration file where +# it should appear only once). See also the "--disable" option for examples. +enable=c-extension-no-member + + +[REPORTS] + +# Python expression which should return a note less than 10 (10 is the highest +# note). You have access to the variables errors warning, statement which +# respectively contain the number of errors / warnings messages and the total +# number of statements analyzed. This is used by the global evaluation report +# (RP0004). +evaluation=10.0 - ((float(5 * error + warning + refactor + convention) / statement) * 10) + +# Template used to display messages. This is a python new-style format string +# used to format the message information. See doc for all details +#msg-template= + +# Set the output format. Available formats are text, parseable, colorized, json +# and msvs (visual studio).You can also give a reporter class, eg +# mypackage.mymodule.MyReporterClass. +output-format=text + +# Tells whether to display a full report or only the messages +reports=no + +# Activate the evaluation score. +score=yes + + +[REFACTORING] + +# Maximum number of nested blocks for function / method body +max-nested-blocks=5 + +# Complete name of functions that never returns. When checking for +# inconsistent-return-statements if a never returning function is called then +# it will be considered as an explicit return statement and no message will be +# printed. +never-returning-functions=optparse.Values,sys.exit + + +[SIMILARITIES] + +# Ignore comments when computing similarities. +ignore-comments=yes + +# Ignore docstrings when computing similarities. +ignore-docstrings=yes + +# Ignore imports when computing similarities. +ignore-imports=no + +# Minimum lines number of a similarity. +min-similarity-lines=4 + + +[FORMAT] + +# Expected format of line ending, e.g. empty (any line ending), LF or CRLF. +expected-line-ending-format= + +# Regexp for a line that is allowed to be longer than the limit. +ignore-long-lines=^\s*(# )??$ + +# Number of spaces of indent required inside a hanging or continued line. +indent-after-paren=4 + +# String used as indentation unit. This is usually " " (4 spaces) or "\t" (1 +# tab). +indent-string=\t + +# Maximum number of characters on a single line. +max-line-length=100 + +# Maximum number of lines in a module +max-module-lines=1000 + +# List of optional constructs for which whitespace checking is disabled. `dict- +# separator` is used to allow tabulation in dicts, etc.: {1 : 1,\n222: 2}. +# `trailing-comma` allows a space between comma and closing bracket: (a, ). +# `empty-line` allows space-only lines. +no-space-check=trailing-comma, + dict-separator + +# Allow the body of a class to be on the same line as the declaration if body +# contains single statement. +single-line-class-stmt=no + +# Allow the body of an if to be on the same line as the test if there is no +# else. +single-line-if-stmt=no + + +[MISCELLANEOUS] + +# List of note tags to take in consideration, separated by a comma. +notes=FIXME, + XXX, + TODO + + +[SPELLING] + +# Limits count of emitted suggestions for spelling mistakes +max-spelling-suggestions=4 + +# Spelling dictionary name. Available dictionaries: none. To make it working +# install python-enchant package. +spelling-dict= + +# List of comma separated words that should not be checked. +spelling-ignore-words= + +# A path to a file that contains private dictionary; one word per line. +spelling-private-dict-file= + +# Tells whether to store unknown words to indicated private dictionary in +# --spelling-private-dict-file option instead of raising a message. +spelling-store-unknown-words=no + + +[LOGGING] + +# Logging modules to check that the string format arguments are in logging +# function parameter format +logging-modules=logging + + +[BASIC] + +# Naming style matching correct argument names +argument-naming-style=snake_case + +# Regular expression matching correct argument names. Overrides argument- +# naming-style +#argument-rgx= + +# Naming style matching correct attribute names +attr-naming-style=snake_case + +# Regular expression matching correct attribute names. Overrides attr-naming- +# style +#attr-rgx= + +# Bad variable names which should always be refused, separated by a comma +bad-names=foo, + bar, + baz, + toto, + tutu, + tata + +# Naming style matching correct class attribute names +class-attribute-naming-style=any + +# Regular expression matching correct class attribute names. Overrides class- +# attribute-naming-style +#class-attribute-rgx= + +# Naming style matching correct class names +class-naming-style=PascalCase + +# Regular expression matching correct class names. Overrides class-naming-style +#class-rgx= + +# Naming style matching correct constant names +const-naming-style=UPPER_CASE + +# Regular expression matching correct constant names. Overrides const-naming- +# style +#const-rgx= + +# Minimum line length for functions/classes that require docstrings, shorter +# ones are exempt. +docstring-min-length=-1 + +# Naming style matching correct function names +function-naming-style=snake_case + +# Regular expression matching correct function names. Overrides function- +# naming-style +# Allow long test names +function-rgx=[a-z_][a-z0-9_]{2,70}$ + +# Good variable names which should always be accepted, separated by a comma +good-names=i, + j, + k, + ex, + Run, + _, + fp, + logger, + options + +# Include a hint for the correct naming format with invalid-name +include-naming-hint=no + +# Naming style matching correct inline iteration names +inlinevar-naming-style=any + +# Regular expression matching correct inline iteration names. Overrides +# inlinevar-naming-style +#inlinevar-rgx= + +# Naming style matching correct method names +method-naming-style=snake_case + +# Regular expression matching correct method names. Overrides method-naming- +# style +#method-rgx= + +# Naming style matching correct module names +module-naming-style=snake_case + +# Regular expression matching correct module names. Overrides module-naming- +# style +#module-rgx= + +# Colon-delimited sets of names that determine each other's naming style when +# the name regexes allow several styles. +name-group= + +# Regular expression which should only match function or class names that do +# not require a docstring. +no-docstring-rgx=^_ + +# List of decorators that produce properties, such as abc.abstractproperty. Add +# to this list to register other decorators that produce valid properties. +property-classes=abc.abstractproperty + +# Naming style matching correct variable names +variable-naming-style=snake_case + +# Regular expression matching correct variable names. Overrides variable- +# naming-style +#variable-rgx= + + +[TYPECHECK] + +# List of decorators that produce context managers, such as +# contextlib.contextmanager. Add to this list to register other decorators that +# produce valid context managers. +contextmanager-decorators=contextlib.contextmanager + +# List of members which are set dynamically and missed by pylint inference +# system, and so shouldn't trigger E1101 when accessed. Python regular +# expressions are accepted. +generated-members= + +# Tells whether missing members accessed in mixin class should be ignored. A +# mixin class is detected if its name ends with "mixin" (case insensitive). +ignore-mixin-members=yes + +# This flag controls whether pylint should warn about no-member and similar +# checks whenever an opaque object is returned when inferring. The inference +# can return multiple potential results while evaluating a Python object, but +# some branches might not be evaluated, which results in partial inference. In +# that case, it might be useful to still emit no-member and other checks for +# the rest of the inferred objects. +ignore-on-opaque-inference=yes + +# List of class names for which member attributes should not be checked (useful +# for classes with dynamically set attributes). This supports the use of +# qualified names. +ignored-classes=optparse.Values,thread._local,_thread._local + +# List of module names for which member attributes should not be checked +# (useful for modules/projects where namespaces are manipulated during runtime +# and thus existing member attributes cannot be deduced by static analysis. It +# supports qualified module names, as well as Unix pattern matching. +ignored-modules= + +# Show a hint with possible names when a member name was not found. The aspect +# of finding the hint is based on edit distance. +missing-member-hint=yes + +# The minimum edit distance a name should have in order to be considered a +# similar match for a missing member name. +missing-member-hint-distance=1 + +# The total number of similar names that should be taken in consideration when +# showing a hint for a missing member. +missing-member-max-choices=1 + + +[VARIABLES] + +# List of additional names supposed to be defined in builtins. Remember that +# you should avoid to define new builtins when possible. +additional-builtins= + +# Tells whether unused global variables should be treated as a violation. +allow-global-unused-variables=yes + +# List of strings which can identify a callback function by name. A callback +# name must start or end with one of those strings. +callbacks=cb_, + _cb + +# A regular expression matching the name of dummy variables (i.e. expectedly +# not used). +dummy-variables-rgx=_+$|(_[a-zA-Z0-9_]*[a-zA-Z0-9]+?$)|dummy|^ignored_|^unused_ + +# Argument names that match this expression will be ignored. Default to name +# with leading underscore +ignored-argument-names=_.*|^ignored_|^unused_ + +# Tells whether we should check for unused import in __init__ files. +init-import=no + +# List of qualified module names which can have objects that can redefine +# builtins. +redefining-builtins-modules=six.moves,past.builtins,future.builtins + + +[CLASSES] + +# List of method names used to declare (i.e. assign) instance attributes. +defining-attr-methods=__init__, + __new__, + setUp + +# List of member names, which should be excluded from the protected access +# warning. +exclude-protected=_asdict, + _fields, + _replace, + _source, + _make + +# List of valid names for the first argument in a class method. +valid-classmethod-first-arg=cls + +# List of valid names for the first argument in a metaclass class method. +valid-metaclass-classmethod-first-arg=mcs + + +[IMPORTS] + +# Allow wildcard imports from modules that define __all__. +allow-wildcard-with-all=no + +# Analyse import fallback blocks. This can be used to support both Python 2 and +# 3 compatible code, which means that the block might have code that exists +# only in one or another interpreter, leading to false positives when analysed. +analyse-fallback-blocks=no + +# Deprecated modules which should not be used, separated by a comma +deprecated-modules=optparse,tkinter.tix + +# Create a graph of external dependencies in the given file (report RP0402 must +# not be disabled) +ext-import-graph= + +# Create a graph of every (i.e. internal and external) dependencies in the +# given file (report RP0402 must not be disabled) +import-graph= + +# Create a graph of internal dependencies in the given file (report RP0402 must +# not be disabled) +int-import-graph= + +# Force import order to recognize a module as part of the standard +# compatibility libraries. +known-standard-library= + +# Force import order to recognize a module as part of a third party library. +known-third-party=enchant + + +[DESIGN] + +# Maximum number of arguments for function / method +max-args=500 + +# Maximum number of attributes for a class (see R0902). +max-attributes=7 + +# Maximum number of boolean expressions in a if statement +max-bool-expr=5 + +# Maximum number of branch for function / method body +max-branches=12 + +# Maximum number of locals for function / method body +max-locals=15 + +# Maximum number of parents for a class (see R0901). +max-parents=7 + +# Maximum number of public methods for a class (see R0904). +max-public-methods=20 + +# Maximum number of return / yield for function / method body +max-returns=6 + +# Maximum number of statements in function / method body +max-statements=50 + +# Minimum number of public methods for a class (see R0903). +min-public-methods=2 + + +[EXCEPTIONS] + +# Exceptions that will emit a warning when being caught. Defaults to +# "Exception" +overgeneral-exceptions=Exception diff --git a/.python-version b/.python-version new file mode 100644 index 00000000000..a08ffae0cae --- /dev/null +++ b/.python-version @@ -0,0 +1 @@ +3.8.2 diff --git a/.readthedocs.yaml b/.readthedocs.yaml new file mode 100644 index 00000000000..87f0506bc6d --- /dev/null +++ b/.readthedocs.yaml @@ -0,0 +1,37 @@ +# .readthedocs.yaml +# Read the Docs configuration file +# See https://docs.readthedocs.io/en/stable/config-file/v2.html for details + +# Required +version: 2 + +build: + os: ubuntu-20.04 + tools: + python: '3.8' + +# Optionally build your docs in additional formats such as PDF and ePub +formats: + - epub + - pdf + - htmlzip + +# Build documentation with MkDocs +mkdocs: + configuration: mkdocs.yml + fail_on_warning: false + +# Optionally set the version of Python and requirements required to build your docs +python: + version: '3.8' + install: + - requirements: docs/requirements.txt + + - method: pip + path: . + extra_requirements: + - dumb-init + +# Avoid cloning submodules +submodules: + exclude: all diff --git a/.release-it.json b/.release-it.json new file mode 100644 index 00000000000..f4e54c07027 --- /dev/null +++ b/.release-it.json @@ -0,0 +1,15 @@ +{ + "git": { + "commitMessage": "chore(release): v${version}", + "requireBranch": "main", + "requireCommits": true, + "tagName": "v${version}", + "push": true + }, + "github": { + "release": true + }, + "npm": { + "publish": false + } +} diff --git a/.remarkrc b/.remarkrc new file mode 100644 index 00000000000..fad0406aaf7 --- /dev/null +++ b/.remarkrc @@ -0,0 +1,6 @@ +{ + "plugins": { + "lint-code-block-style": "fenced", + "lint-ordered-list-marker-value": "ordered" + } +} diff --git a/.restyled.yaml b/.restyled.yaml new file mode 100644 index 00000000000..e9f7b1aafbd --- /dev/null +++ b/.restyled.yaml @@ -0,0 +1,56 @@ +enabled: true +auto: false + +# Open Restyle PRs? +pull_requests: true + +# Leave comments on the original PR linking to the Restyle PR? +comments: true + +# Set commit statuses on the original PR? +statuses: + # Red status in the case of differences found + differences: true + # Green status in the case of no differences found + no_differences: true + # Red status if we encounter errors restyling + error: true + +# Request review on the Restyle PR? +# +# Possible values: +# +# author: From the author of the original PR +# owner: From the owner of the repository +# none: Don't +# +# One value will apply to both origin and forked PRs, but you can also specify +# separate values. +# +# request_review: +# origin: author +# forked: owner +# +request_review: author + +# Add labels to any created Restyle PRs +# +# These can be used to tell other automation to avoid our PRs. +# +labels: ['Skip CI'] + +# Labels to ignore +# +# PRs with any of these labels will be ignored by Restyled. +# +# ignore_labels: +# - restyled-ignore + +# Restylers to run, and how +restylers: + - name: prettier + image: restyled/restyler-prettier:v1.19.1-2 + arguments: ['--write'] + include: + - 'assets/*.json' + - './**/*.{yaml,yml,md,json}' diff --git a/.scrutinizer.yml b/.scrutinizer.yml new file mode 100644 index 00000000000..c9bbd347ebb --- /dev/null +++ b/.scrutinizer.yml @@ -0,0 +1,109 @@ +checks: + python: + basic_assert_on_tuple: true + basic_dangerous_default_value: true + basic_duplicate_key: true + basic_empty_docstring: true + basic_eval_used: true + basic_exec_used: true + basic_expression_not_assigned: true + basic_function_redefined: true + basic_init_is_generator: true + basic_invalid_name: + arguments: '[a-z_][a-z0-9_]{2,30}$' + attributes: '[a-z_][a-z0-9_]{2,30}$' + class_attributes: '([A-Za-z_][A-Za-z0-9_]{2,30}|(__.*__))$' + classes: '[A-Z_][a-zA-Z0-9]+$' + constants: '(([A-Z_][A-Z0-9_]*)|(__.*__))$' + functions: '[a-z_][a-z0-9_]{2,30}$' + inline_vars: '[A-Za-z_][A-Za-z0-9_]*$' + methods: '[a-z_][a-z0-9_]{2,30}$' + modules: '(([a-z_][a-z0-9_]*)|([A-Z][a-zA-Z0-9]+))$' + variables: '[a-z_][a-z0-9_]{2,30}$' + whitelisted_names: 'i,j,k,u,v,x,ex,it,ch,Run,_,__' + basic_lost_exception: true + basic_missing_docstring: true + basic_old_raise_syntax: true + basic_pointless_statement: true + basic_pointless_string_statement: true + basic_return_in_init: true + basic_unnecessary_lambda: true + basic_unnecessary_pass: true + basic_unreachable: true + basic_useless_else_on_loop: true + classes_arguments_differ: true + classes_attribute_defined_outside_init: true + classes_bad_classmethod_argument: true + classes_bad_context_manager: true + classes_bad_mcs_classmethod_argument: true + classes_bad_mcs_method_argument: true + classes_bad_staticmethod_argument: true + classes_interface_is_not_class: true + classes_method_hidden: true + classes_missing_interface_method: true + classes_no_method_argument: true + classes_non_iterator_returned: true + classes_non_parent_init_called: true + classes_no_self_argument: true + classes_no_self_use: true + classes_protected_access: true + classes_signature_differs: true + classes_super_init_not_called: true + classes_valid_slots: true + code_rating: true + design_abstract_class_not_used: true + design_interface_not_implemented: true + duplicate_code: true + exceptions_bad_except_order: true + exceptions_bare_except: true + exceptions_binary_op_exception: true + exceptions_broad_except: true + exceptions_catching_non_exception: true + exceptions_notimplemented_raised: true + exceptions_pointless_except: true + exceptions_raising_bad_type: true + exceptions_raising_non_exception: true + exceptions_raising_string: true + format_backtick: true + format_bad_indentation: + indentation: '4 spaces' + format_bad_whitespace: true + format_line_too_long: + max_length: '120' + format_lowercase_l_suffix: true + format_missing_final_newline: true + format_mixed_indentation: true + format_old_ne_operator: true + format_superfluous_parens: true + format_trailing_whitespace: true + format_unnecessary_semicolon: true + imports_cyclic_import: true + imports_deprecated_module: true + imports_import_error: true + imports_import_self: true + imports_reimported: true + imports_wildcard_import: true + logging_not_lazy: true + miscellaneous_fixme: true + newstyle_bad_super_call: true + string_bad_format_string_key: true + string_bad_str_strip_call: true + string_mixed_format_string: true + typecheck_assignment_from_none: true + typecheck_assignment_from_no_return: true + variables_global_at_module_level: true + variables_global_variable_not_assigned: true + variables_global_variable_undefined: true + variables_invalid_all_object: true + variables_no_name_in_module: true + variables_redefined_builtin: true + variables_redefined_outer_name: true + variables_redefine_in_handler: true + variables_undefined_all_variable: true + variables_undefined_loop_variable: true + variables_unpacking_non_sequence: true + variables_unused_argument: true + variables_unused_import: true + variables_unused_variable: true + variables_unused_wildcard_import: true + variables_used_before_assignment: true diff --git a/.shellcheckrc b/.shellcheckrc new file mode 100644 index 00000000000..1dd0473cbf5 --- /dev/null +++ b/.shellcheckrc @@ -0,0 +1,15 @@ +source-path=scripts + +external-sources=true + +enable=all + +# SC1091 - Not following: FILE: does not exist (No such file or directory) - https://github.com/koalaman/shellcheck/wiki/SC1091 +# - used for sourcing function files throughout the codebase +# SC2034 - VAR appears unused - https://github.com/koalaman/shellcheck/wiki/SC2034 +# - used for declaring desc and deprecated function variables +# SC2064 - Use single quotes, otherwise this expands now rather than when signalled. - https://github.com/koalaman/shellcheck/wiki/SC2064 +# - used for traps +# SC2155 - Declare and assign separately to avoid masking return values - https://github.com/koalaman/shellcheck/wiki/SC2155 +# - used throughout the codebase +disable=SC1091,SC2034,SC2046,SC2064,SC2120,SC2155 diff --git a/.shellspec b/.shellspec new file mode 100644 index 00000000000..63317176512 --- /dev/null +++ b/.shellspec @@ -0,0 +1,14 @@ +--require spec_helper + +-s bash + +## Default kcov (coverage) options +# --kcov-options "--include-path=. --path-strip-level=1" +# --kcov-options "--include-pattern=.sh" +# --kcov-options "--exclude-pattern=/.shellspec,/spec/,/coverage/,/report/" + +## Example: Include script "myprog" with no extension +# --kcov-options "--include-pattern=.sh,myprog" + +## Example: Only specified files/directories +# --kcov-options "--include-pattern=myprog,/lib/" diff --git a/.solidarity b/.solidarity new file mode 100644 index 00000000000..ffe31a7ad30 --- /dev/null +++ b/.solidarity @@ -0,0 +1,42 @@ +{ + "$schema": "https://json.schemastore.org/solidaritySchema", + "requirements": { + "node": [ + { + "rule": "cli", + "binary": "node", + "semver": ">=12.0.0", + "version": "--version" + } + ], + "npm": [ + { + "rule": "cli", + "binary": "npm", + "semver": ">=5.0.0", + "version": "--version" + } + ], + "yarn": [ + { + "rule": "cli", + "binary": "yarn", + "semver": ">=3.0.0", + "version": "--version" + } + ], + "package.json": [ + { + "rule": "file", + "location": "./package.json" + } + ], + "git email": [ + { + "rule": "shell", + "command": "git config user.email", + "match": ".+@.+" + } + ] + } +} diff --git a/.space.kts b/.space.kts new file mode 100644 index 00000000000..25a87626aeb --- /dev/null +++ b/.space.kts @@ -0,0 +1,23 @@ +job("Warmup - WebStorm") { + git { + depth = UNLIMITED_DEPTH + refSpec = "refs/*:refs/*" + } + + startOn { + schedule { cron("0 0 * * *") } + + gitPush { + enabled = true + + branchFilter { + +"refs/heads/main" + } + } + } + + warmup(ide = Ide.WebStorm) { + devfile = ".space/webstorm.devfile.yml" + scriptLocation = ".space/dev-env-warmup.sh" + } +} diff --git a/.space/dev-env-warmup.sh b/.space/dev-env-warmup.sh new file mode 100644 index 00000000000..ffc2a682f28 --- /dev/null +++ b/.space/dev-env-warmup.sh @@ -0,0 +1,5 @@ +#!/bin/bash + +set -e + +npm run all diff --git a/.space/webstorm.devfile.yml b/.space/webstorm.devfile.yml new file mode 100644 index 00000000000..a61bd834ba8 --- /dev/null +++ b/.space/webstorm.devfile.yml @@ -0,0 +1,17 @@ +schemaVersion: 2.2.0 + +attributes: + space: + instanceType: xlarge + editor: + type: WebStorm + vmoptions: + - '-Xms2048m' + - '-Xmx4096m' + +components: + - name: image-build + image: + imageName: jetbrains-guide-ws:latest + dockerfile: + uri: .space/webstorm/Dockerfile diff --git a/.space/webstorm/Dockerfile b/.space/webstorm/Dockerfile new file mode 100644 index 00000000000..b7e93170e44 --- /dev/null +++ b/.space/webstorm/Dockerfile @@ -0,0 +1,20 @@ +FROM node:14-bullseye + +ENV CHOKIDAR_USEPOLLING=1 +ENV CHOKIDAR_INTERVAL=2500 +ENV GATSBY_TELEMETRY_DISABLED=1 +ENV INTERNAL_STATUS_PORT=33949 +ENV REMOTE_DEV_SERVER_JCEF_ENABLED=1 + +RUN apt-get update && apt-get install -y apt-utils apt-transport-https + +RUN apt-get install -y \ + # Utilities \ + curl unzip wget software-properties-common socat man-db gnupg2 pass lsof \ + # VCS \ + git \ + # Docker + docker docker-compose \ + # JCEF - https://intellij-support.jetbrains.com/hc/en-us/articles/360016421559 + libxss1 \ + && rm -rf /var/lib/apt/lists/* diff --git a/.stickler.yml b/.stickler.yml new file mode 100644 index 00000000000..48d79a706a5 --- /dev/null +++ b/.stickler.yml @@ -0,0 +1,11 @@ +linters: + shellcheck: + shell: bash + eslint: + config: './.eslintrc.js' + +files: + ignore: + - 'node_modules/*' + - 'test-api/*' + - 'docs/*' diff --git a/.stignore b/.stignore new file mode 100644 index 00000000000..da23ba5eddf --- /dev/null +++ b/.stignore @@ -0,0 +1,3 @@ +/.git +/node_modules +/tilt_modules diff --git a/.stylelintignore b/.stylelintignore new file mode 100644 index 00000000000..fca75b8ab19 --- /dev/null +++ b/.stylelintignore @@ -0,0 +1,20 @@ +.dependabot +.github +.husky +.idea +.ghpages-tmp + +assets +docs +images +node_modules +tilt_modules +coverage +k8s +charts +release +reports +okteto +scripts +site +venv diff --git a/.stylelintrc.json b/.stylelintrc.json new file mode 100644 index 00000000000..920db284903 --- /dev/null +++ b/.stylelintrc.json @@ -0,0 +1,33 @@ +{ + "extends": "stylelint-config-standard", + "plugins": ["stylelint-order", "stylelint-scss"], + "rules": { + "indentation": 4, + "at-rule-empty-line-before": null, + "color-hex-length": null, + "no-descending-specificity": null, + "rule-empty-line-before": null, + "selector-list-comma-newline-after": null, + "declaration-block-trailing-semicolon": null, + "block-closing-brace-empty-line-before": null, + "block-closing-brace-space-before": null, + "block-opening-brace-space-before": null, + "block-opening-brace-space-after": null, + "function-comma-space-after": null, + "media-query-list-comma-space-after": null, + "declaration-colon-space-after": null, + "declaration-block-semicolon-space-after": null, + "block-closing-brace-newline-after": null, + "declaration-block-single-line-max-declarations": null, + "number-no-trailing-zeros": null, + "number-leading-zero": null, + "comment-empty-line-before": null, + "length-zero-no-unit": null, + "value-keyword-case": null, + "comment-whitespace-inside": null, + "declaration-empty-line-before": null, + "max-empty-lines": null, + "no-duplicate-selectors": null, + "selector-pseudo-element-colon-notation": null + } +} diff --git a/.syncpackrc b/.syncpackrc new file mode 100644 index 00000000000..849b4b3dfcc --- /dev/null +++ b/.syncpackrc @@ -0,0 +1,26 @@ +{ + "dev": true, + "indent": " ", + "semverRange": "", + "peer": true, + "prod": true, + "filter": "", + "sortAz": [ + "bin", + "contributors", + "dependencies", + "devDependencies", + "keywords", + "peerDependencies", + "resolutions", + "scripts" + ], + "sortFirst": [ + "name", + "description", + "version", + "author" + ], + "source": [], + "versionGroups": [] +} diff --git a/.syncpackrc.json b/.syncpackrc.json new file mode 100644 index 00000000000..1126a36317d --- /dev/null +++ b/.syncpackrc.json @@ -0,0 +1,15 @@ +{ + "dev": true, + "filter": ".", + "indent": " ", + "overrides": true, + "peer": true, + "prod": true, + "resolutions": true, + "semverGroups": [], + "semverRange": "", + "sortAz": ["contributors", "dependencies", "devDependencies", "keywords", "peerDependencies", "scripts"], + "sortFirst": ["name", "description", "version", "author"], + "source": ["package.json", "packages/*/package.json"], + "versionGroups": [] +} diff --git a/.textlint.terms.json b/.textlint.terms.json new file mode 100644 index 00000000000..c8dd8ac4259 --- /dev/null +++ b/.textlint.terms.json @@ -0,0 +1,209 @@ +[ + "3D", + "API", + "Airbnb", + "Ajax", + "Algolia", + "Android", + "BrowserStack", + "Browsersync", + "CSS", + "CodePen", + "CodeSandbox", + "Codecov", + "DocSearch", + "ECMAScript", + "ESLint", + "EditorConfig", + "GIF", + "GitHub", + "GraphQL", + "HTML", + "HTTPS", + "ID", + "InstantSearch", + "IoT", + "I/O", + "JPEG", + "JavaScript", + "JetBrains", + "LinkedIn", + "Lodash", + "MIME", + "MacBook", + "Markdown", + "OK", + "OpenType", + "PDF", + "PNG", + "PaaS", + "SaaS", + "Sass", + "SemVer", + "TypeScript", + "URL", + "UglifyJS", + "WebStorm", + "WordPress", + "YouTube", + "advancedSyntax", + "allowCompressionOfIntegerArray", + "allowTyposOnNumericTokens", + "alternativesAsExact", + "analyticsTags", + "aroundLatLngViaIP", + "aroundLatLng", + "aroundPrecision", + "aroundRadius", + "aroundRadius", + "attributeForDistinct", + "attributesForFaceting", + "attributesToHighlight", + "attributesToRetrieve", + "attributesToSnippet", + "camelCaseAttributes", + "clickAnalytics", + "customRanking", + "decompoundedAttributes", + "disableExactOnAttributes", + "disablePrefixOnAttributes", + "disableTypoToleranceOnAttributes", + "disableTypoToleranceOnWords", + "enableRules", + "exactOnSingleWordQuery", + "e-commerce", + "facetFilters", + "facetingAfterDistinct", + "getRankingInfo", + "highlightPostTag", + "highlightPreTag", + "hitsPerPage", + "iOS", + "ignorePlurals", + "insideBoundingBox", + "insidePolygon", + "jQuery", + "maxFacetHits", + "maxValuesPerFacet", + "minProximity", + "minWordSizefor1Typo", + "minWordSizefor2Typos", + "minimumAroundRadius", + "npm", + "numericAttributesForFiltering", + "numericFilters", + "open source", + "optionalFilters", + "optionalWords", + "pagehitsPerPagepagination", + "paginationLimitedTo", + "percentileComputation", + "queryType", + "removeStopWords", + "removeWordsIfNoResults", + "replaceSynonymsInHighlight", + "responseFields", + "restrictHighlightAndSnippetArrays", + "restrictSearchableAttributes", + "ruleContexts", + "searchableAttributes", + "searchableAttributes", + "separatorsToIndex", + "snippetEllipsisText", + "sortFacetValuesBy", + "sumOrFiltersScores", + "tagFilters", + "typoTolerance", + "unretrievableAttributes", + ["3-D", "3D"], + ["Aloglia", "Algolia"], + ["CLI tool(s?)", "command-line tool$1"], + ["HTTP[ /]2(?:\\.0)?", "HTTP/2"], + ["I-O", "I/O"], + ["JSDocs?", "JSDoc"], + ["Mac ?OS", "macOS"], + ["Nodejs", "Node.js"], + ["OS X", "macOS"], + ["React[ .]js", "React"], + ["SauceLabs", "Sauce Labs"], + ["StackOverflow", "Stack Overflow"], + ["an URL", "a URL"], + ["auto[- ]complete", "autocomplete"], + ["auto[- ]fixing", "autofixing"], + ["auto[- ]fix", "autofix"], + ["auto[- ]format", "autoformat"], + ["a npm", "an npm"], + ["backwards compatible", "backward compatible"], + ["back[- ]end(\\w*)", "backend$1"], + ["bug[- ]fix(es?)", "bugfix$1"], + ["build system(s?)", "build tool$1"], + ["built ?in", "built-in"], + ["check[- ]box(es?)", "checkbox$1"], + ["client ?side", "client-side"], + ["code-?review(s?)", "code review$1"], + ["code-?splitting", "code splitting"], + ["code[- ]base(es?)", "codebase$1"], + ["command ?line", "command-line"], + ["co[- ]locate(d?)", "colocate$1"], + ["css-?in-?js", "CSS in JS"], + ["datas", "data"], + ["ecommerce", "e-commerce"], + ["end ?to ?end", "end-to-end"], + ["end-?user(s?)", "end user$1"], + ["end[- ]point(s?)", "endpoint$1"], + ["environemnt(s?)", "environment$1"], + ["error ?prone", "error-prone"], + ["e commerce", "e-commerce"], + ["e[- ]mail(s?)", "email$1"], + ["falsey", "falsy"], + ["feedbacks", "feedback"], + ["file-?type(s?)", "file type$1"], + ["file[- ]name(s?)", "filename$1"], + ["front[- ]end(\\w*)", "frontend$1"], + ["he or she", "they"], + ["he/she", "they"], + ["higher ?order", "higher-order"], + ["host[- ]name(s?)", "hostname$1"], + ["hot[- ]key(s?)", "hotkey$1"], + ["id(s?)", "ID$1"], + ["informations", "information"], + ["key[/ ]?value", "key-value"], + ["life[- ]cycle", "lifecycle"], + ["life[- ]stream(s?)", "lifestream$1"], + ["lock[- ]file(s?)", "lockfile$1"], + ["mark-up", "markup"], + ["meta[- ]data", "metadata"], + ["name[- ]space(s?)", "namespace$1"], + ["one URLs", "one URL"], + ["opensource([\\.,]?)", "open source$1"], + ["open-source([\\.,]?)", "open source$1"], + ["pacakge(s?)", "package$1"], + ["pre[- ]condition(s?)", "precondition$1"], + ["pre[- ]defined", "predefined"], + ["pre[- ]release(s?)", "prerelease$1"], + ["regexp?(s?)", "regular expression$1"], + ["repo\\b", "repository"], + ["run[- ]time", "runtime"], + ["screen[- ]shot(s?)", "screenshot$1"], + ["screen[- ]?snap(s?)", "screenshot$1"], + ["server ?side", "server-side"], + ["slave(s?)", "replica$1"], + ["smartphone(s?)", "mobile phone$1"], + ["source-?map(s?)", "source map$1"], + ["styled ?components", "styled-components"], + ["style-?guide(s?)", "style guide$1"], + ["style-?sheet(s?)", "style sheet$1"], + ["sub[- ]class((?:es|ing)?)", "subclass$1"], + ["sub[- ]tree(s?)", "subtree$1"], + ["tilda", "tilde"], + ["time[- ]stamp(s?)", "timestamp$1"], + ["touch[- ]screen(s?)", "touchscreen$1"], + ["tree-?shaking", "tree shaking"], + ["user-?base", "user base"], + ["user[- ]name(s?)", "username$1"], + ["walk[- ]through", "walkthrough"], + ["web-?page(s?)", "web page$1"], + ["white[- ]space", "whitespace"], + ["wild[- ]card(s?)", "wildcard$1"], + ["wi[- ]?fi", "Wi-Fi"] +] diff --git a/.textlintrc.js b/.textlintrc.js new file mode 100644 index 00000000000..44aad995c5a --- /dev/null +++ b/.textlintrc.js @@ -0,0 +1,67 @@ +/* + * Copyright (C) 2022 SensibleMetrics, Inc. (http://sensiblemetrics.io/) + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +'use strict'; + +/* eslint-disable import/no-commonjs */ +const textlintMode = process.env.TEXTLINT_MODE; + +const allRules = { + 'alex': { + allow: ['color', 'hook', 'host-hostess', 'itch'], + }, + 'common-misspellings': true, + 'en-capitalization': false, + 'stop-words': { + exclude: [ + 'relative to', // We need to talk about links "relative to the root", + 'pick out', // Needed word, not to clumsy + 'encounter', // Needed word, not to clumsy + 'proceed', + 'therefore', + 'this command', + 'Failure to', + 'frequently', + 'ALL of', + 'in addition to', + 'in addition', + 'Take a look at', + 'In addition to', + 'In addition', + 'simply', + 'deem', + ], + }, + 'terminology': { + defaultTerms: false, + terms: `${__dirname}/.textlint.terms.json`, + }, + 'write-good': { + passive: true, + severity: 'warning', + }, +}; + +// Not all rules are automatically fixable, so when running `yarn run +// lint:md:fix`, we only run the one that can be fixed. +const fixableRules = { + 'common-misspellings': allRules['common-misspellings'], + 'en-capitalization': allRules['en-capitalization'], + 'terminology': allRules['terminology'], +}; + +module.exports = { + rules: textlintMode === 'fix' ? fixableRules : allRules, +}; diff --git a/.theia/settings.json b/.theia/settings.json new file mode 100644 index 00000000000..b9e1b57b448 --- /dev/null +++ b/.theia/settings.json @@ -0,0 +1,9 @@ +{ + "typescript.tsdk": "node_modules/typescript/lib", + "workbench.iconTheme": "theia-file-icons", + "preview.openByDefault": true, + "editor.autoSave": "on", + "[markdown]": { + "editor.wordWrap": "on" + } +} diff --git a/.tiltignore b/.tiltignore new file mode 100644 index 00000000000..e69de29bb2d diff --git a/.tox/.package.lock b/.tox/.package.lock new file mode 100755 index 00000000000..e69de29bb2d diff --git a/.typo-ci.yml b/.typo-ci.yml index 81bd58150aa..7011e90eb56 100644 --- a/.typo-ci.yml +++ b/.typo-ci.yml @@ -1,7 +1,6 @@ # This is a sample .typo-ci.yml file, it's used to configure how Typo CI will behave. # Add it to the root of your project and push it to github. --- - # What language dictionaries should it use? By default Typo CI will select 'en' & 'en_GB' # Currently Typo CI supports: # de @@ -19,23 +18,23 @@ dictionaries: # Any files/folders we should ignore? excluded_files: - - "vendor/**/*" - - "node_modules/**/*" - - "*.key" - - "*.enc" - - "*.min.css" - - "*.css.map" - - "*.min.js" - - "*.js.map" - - "*.mk" - - "package-lock.json" - - "yarn.lock" - - "Gemfile.lock" - - ".typo-ci.yml" + - 'vendor/**/*' + - 'node_modules/**/*' + - '*.key' + - '*.enc' + - '*.min.css' + - '*.css.map' + - '*.min.js' + - '*.js.map' + - '*.mk' + - 'package-lock.json' + - 'yarn.lock' + - 'Gemfile.lock' + - '.typo-ci.yml' # Any typos we should ignore? excluded_words: - typoci # Would you like filenames to also be spellchecked? -spellcheck_filenames: true \ No newline at end of file +spellcheck_filenames: true diff --git a/.unibeautifyrc.json b/.unibeautifyrc.json new file mode 100644 index 00000000000..9ae053a072d --- /dev/null +++ b/.unibeautifyrc.json @@ -0,0 +1,7 @@ +{ + "Markdown": { + "beautifiers": ["Prettier"], + "__pragma_insert__": true, + "wrap_line_length": 0 + } +} diff --git a/.upptimerc.yml b/.upptimerc.yml new file mode 100644 index 00000000000..0d1a6b263f3 --- /dev/null +++ b/.upptimerc.yml @@ -0,0 +1,39 @@ +# Change these first +owner: AlexRogalskiy # Your GitHub organization or username, where this repository lives +repo: java-patterns # The name of this repository + +sites: + - name: Google + url: https://www.google.com + - name: Wikipedia + url: https://en.wikipedia.org + - name: Hacker News + url: https://news.ycombinator.com + - name: Test Broken Site + url: https://thissitedoesnotexist.koj.co + +assignees: # Users to assign downtime issues (optional) + - AlexRogalskiy + +status-website: + # Add your custom domain name, or remove the `cname` line if you don't have a domain + # Uncomment the `baseUrl` line if you don't have a custom domain and add your repo name there + # cname: demo.upptime.js.org + baseUrl: /java-patterns + logoUrl: https://raw.githubusercontent.com/upptime/upptime.js.org/master/static/img/icon.svg + name: Upptime + introTitle: + '**Upptime** is the open-source uptime monitor and status page, powered + entirely by GitHub.' + introMessage: + This is a sample status page which uses **real-time** data from our [GitHub + repository](https://github.com/upptime/upptime). No server required — just + GitHub Actions, Issues, and Pages. [**Get your own for + free**](https://github.com/upptime/upptime) + navbar: + - title: Status + href: / + - title: GitHub + href: https://github.com/$OWNER/$REPO +# Upptime also supports notifications, assigning issues, and more +# See https://upptime.js.org/docs/configuration diff --git a/.vimrc b/.vimrc new file mode 100644 index 00000000000..bb4f9025899 --- /dev/null +++ b/.vimrc @@ -0,0 +1,7 @@ +set tabstop=2 +set shiftwidth=2 +set softtabstop=2 +set expandtab +set nosmarttab + +set textwidth=80 diff --git a/.watchmanconfig b/.watchmanconfig new file mode 100644 index 00000000000..0967ef424bc --- /dev/null +++ b/.watchmanconfig @@ -0,0 +1 @@ +{} diff --git a/.whitesource b/.whitesource index 55b922e8c18..96443ed372f 100644 --- a/.whitesource +++ b/.whitesource @@ -9,4 +9,4 @@ "issueSettings": { "minSeverityLevel": "LOW" } -} \ No newline at end of file +} diff --git a/.yaml-lint.yml b/.yaml-lint.yml new file mode 100644 index 00000000000..f2d21ca10cd --- /dev/null +++ b/.yaml-lint.yml @@ -0,0 +1,70 @@ +# -*- coding: utf-8 -*- +# vim: ft=yaml +--- +# https://yamllint.readthedocs.io/en/stable/index.html +# yamllint --strict -c .yaml-lint.yml . + +# Extend the `default` configuration provided by `yamllint` +extends: 'default' + +locale: en_US.UTF-8 + +# Files to ignore completely +# 1. All YAML files under directory `node_modules/' +# 2. All YAML files under directory `tilt_modules/' +# 3. All YAML files under directory `okteto/' +# 4. All YAML files under directory `charts/' +# 5. All YAML files under directory `k8s/' +ignore: | + node_modules/ + tilt_modules/ + okteto/ + charts/ + k8s/ + +yaml-files: + # Default settings + - '*.yaml' + - '*.yml' + +rules: + # 150 chars should be enough, but don't fail if a line is longer + line-length: + max: 150 + allow-non-breakable-inline-mappings: true + level: warning + comments: + min-spaces-from-content: 1 + level: warning + braces: + min-spaces-inside: 0 + max-spaces-inside: 0 + brackets: + min-spaces-inside: 0 + max-spaces-inside: 0 + indentation: + indent-sequences: consistent + level: warning + document-end: disable + document-start: + level: warning + colons: enable + commas: enable + comments-indentation: + level: warning + empty-lines: enable + hyphens: enable + key-duplicates: enable + key-ordering: disable + new-line-at-end-of-file: enable + new-lines: enable + octal-values: + forbid-implicit-octal: true + forbid-explicit-octal: true + quoted-strings: disable + trailing-spaces: enable + truthy: + level: warning + empty-values: + forbid-in-block-mappings: true + forbid-in-flow-mappings: true diff --git a/.yarnrc b/.yarnrc new file mode 100644 index 00000000000..7bd7a52cae8 --- /dev/null +++ b/.yarnrc @@ -0,0 +1,3 @@ +save-prefix "^" +--no-lockfile true +unsafe-disable-integrity-migration true diff --git a/.zappr.yaml b/.zappr.yaml new file mode 100644 index 00000000000..5b41b11223c --- /dev/null +++ b/.zappr.yaml @@ -0,0 +1,64 @@ +# https://zappr.readthedocs.io/en/latest/setup +autobranch: + pattern: '{number}-{title}' + length: 60 +approvals: + minimum: 1 # PR needs at least 1 approval for compliant reasons + pattern: "^(:\\+1:|👍|approved)$" # write a comment to the PR with "approved" or ":+1" + ignore: pr_opener + veto: + pattern: "^(:\\-1:|👎|rejected)$" # write a comment to the PR with "rejected" or ":-1" + from: + orgs: + - AlexRogalskiy + collaborators: true +specification: + title: + minimum-length: + enabled: true + length: 8 + body: + minimum-length: + enabled: true + length: 8 + contains-url: true + contains-issue-number: true + template: + differs-from-body: true +commit: + message: + patterns: + # see CONTRIBUTING.md + - "^(feat|fix|docs|style|refactor|perf|test|chore)\\([a-zA-Z0-9-._]+\\):.{3,}" +pull-request: + labels: + additional: true +# autobranch: +# pattern: '{number}-{title}' +# length: 60 +# commit: +# message: +# patterns: +# - '#[0-9]+' +# approvals: +# minimum: 2 +# ignore: none +# pattern: "^(:\\+1:|F44D)$" +# veto: +# pattern: "^(:\\-1:|F44E)$" +# specification: +# title: +# minimum-length: +# enabled: true +# length: 8 +# body: +# minimum-length: +# enabled: true +# length: 8 +# contains-url: true +# contains-issue-number: true +# template: +# differs-from-body: true +# pull-request: +# labels: +# additional: true diff --git a/.zenodo.json b/.zenodo.json new file mode 100644 index 00000000000..040662e80fe --- /dev/null +++ b/.zenodo.json @@ -0,0 +1,39 @@ +{ + "description": "\ud83c\udfc6 Java4You Design patterns", + "license": "GPL-3.0", + "title": "Java Design Patterns Documentation", + "version": "v1.6", + "upload_type": "software", + "publication_date": "2022-04-28", + "keywords": ["java", "design-patterns", "java4you"], + "contributors": [ + { + "name": "Alexander Rogalsky", + "type": "Other", + "affiliation": "SensibleMetrics, Inc." + } + ], + "creators": [ + { + "affiliation": "WildBees.Labs", + "name": "Alexander" + }, + { + "affiliation": "@whitesource", + "name": "WhiteSource Renovate" + } + ], + "access_right": "open", + "related_identifiers": [ + { + "scheme": "url", + "identifier": "https://github.com/AlexRogalskiy/java-patterns/tree/v1.6", + "relation": "isSupplementTo" + }, + { + "scheme": "doi", + "identifier": "10.5281/zenodo.6502338", + "relation": "isVersionOf" + } + ] +} diff --git a/AUTHORS b/AUTHORS new file mode 100644 index 00000000000..751b470eb54 --- /dev/null +++ b/AUTHORS @@ -0,0 +1,12 @@ +# This file lists all individuals having contributed content to the repository. +# For how it is generated, see `scripts/git_authors.sh`. + +AccTextBot <41898282+github-actions[bot]@users.noreply.github.com> +AccTextBot +AccTextBot +AlexRogalskiy +GitHub Bot +Renovate Bot +blog-post-bot +dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> +github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> diff --git a/AUTHORS.md b/AUTHORS.md new file mode 100644 index 00000000000..4497a6773ed --- /dev/null +++ b/AUTHORS.md @@ -0,0 +1,15 @@ +# Authors + +#### Ordered by first contribution. + +- AlexRogalskiy (AlexRogalskiy@users.noreply.github.com) +- blog-post-bot (blog-post-bot@example.com) +- GitHub Bot (github-actions@nullables.io) +- dependabot\[bot] (49699333+dependabot\[bot]@users.noreply.github.com) +- Renovate Bot (bot@renovateapp.com) +- github-actions\[bot] (41898282+github-actions\[bot]@users.noreply.github.com) +- AccTextBot (blog-post-bot@example.com) +- AccTextBot (41898282+github-actions\[bot]@users.noreply.github.com) +- AccTextBot (AlexRogalskiy@users.noreply.github.com) + +#### Generated by scripts/git_authors_md.sh. diff --git a/CHANGELOG.md b/CHANGELOG.md new file mode 100644 index 00000000000..80936978318 --- /dev/null +++ b/CHANGELOG.md @@ -0,0 +1,2401 @@ +### Changelog + + All notable changes to this project will be documented in this file. Dates are displayed in UTC. + + +#### [v0.0.0](https://github.com/AlexRogalskiy/java-patterns/compare/0.0.0...v0.0.0) + +> October 4, 2022 + +- UPdates on docs [`164d191d`](https://github.com/AlexRogalskiy/java-patterns/commit/164d191d) +- Updates on docs [`7f1ccf5c`](https://github.com/AlexRogalskiy/java-patterns/commit/7f1ccf5c) +- 💓 Updates contributor SVG [`c7e0c593`](https://github.com/AlexRogalskiy/java-patterns/commit/c7e0c593) +- docs: updates on docs page speed [`c325dcdd`](https://github.com/AlexRogalskiy/java-patterns/commit/c325dcdd) +- docs: updates on docs page speed [`1ac242c6`](https://github.com/AlexRogalskiy/java-patterns/commit/1ac242c6) +- docs: updates on docs page speed [`fc059277`](https://github.com/AlexRogalskiy/java-patterns/commit/fc059277) +- feature: Updates on docs [`881f553b`](https://github.com/AlexRogalskiy/java-patterns/commit/881f553b) +- feature: Updates on docs [`3c828ad4`](https://github.com/AlexRogalskiy/java-patterns/commit/3c828ad4) +- feature: Updates on docs [`cd7cc508`](https://github.com/AlexRogalskiy/java-patterns/commit/cd7cc508) +- Updates on docs [`86ab0c04`](https://github.com/AlexRogalskiy/java-patterns/commit/86ab0c04) +- Updates on docs [`04db5c7c`](https://github.com/AlexRogalskiy/java-patterns/commit/04db5c7c) +- Updates on docs [`6d6d1d67`](https://github.com/AlexRogalskiy/java-patterns/commit/6d6d1d67) +- Updates on docs [`ebd9dcc7`](https://github.com/AlexRogalskiy/java-patterns/commit/ebd9dcc7) +- Updates on docs [`50c12632`](https://github.com/AlexRogalskiy/java-patterns/commit/50c12632) +- Updates on docs [`8c3ad81f`](https://github.com/AlexRogalskiy/java-patterns/commit/8c3ad81f) +- [pre-commit.ci] auto fixes from pre-commit.com hooks [`581d7033`](https://github.com/AlexRogalskiy/java-patterns/commit/581d7033) +- Updates on docs [`8ead1fab`](https://github.com/AlexRogalskiy/java-patterns/commit/8ead1fab) +- Updates on docs [`91f47146`](https://github.com/AlexRogalskiy/java-patterns/commit/91f47146) +- [pre-commit.ci] auto fixes from pre-commit.com hooks [`32a5f75e`](https://github.com/AlexRogalskiy/java-patterns/commit/32a5f75e) +- Updates on docs [`d6f5a840`](https://github.com/AlexRogalskiy/java-patterns/commit/d6f5a840) +- docs: updates on docs page speed [`8adfcf4e`](https://github.com/AlexRogalskiy/java-patterns/commit/8adfcf4e) +- [pre-commit.ci] auto fixes from pre-commit.com hooks [`b80b8095`](https://github.com/AlexRogalskiy/java-patterns/commit/b80b8095) +- Updates on docs [`8e33b6c8`](https://github.com/AlexRogalskiy/java-patterns/commit/8e33b6c8) +- docs: updates on docs page speed [`5bc21cff`](https://github.com/AlexRogalskiy/java-patterns/commit/5bc21cff) +- Optimised images with calibre/image-actions [`db1181c9`](https://github.com/AlexRogalskiy/java-patterns/commit/db1181c9) +- [pre-commit.ci] auto fixes from pre-commit.com hooks [`40a3adf6`](https://github.com/AlexRogalskiy/java-patterns/commit/40a3adf6) +- Updates on docs [`d5791a10`](https://github.com/AlexRogalskiy/java-patterns/commit/d5791a10) +- docs: updates on docs page speed [`4287d991`](https://github.com/AlexRogalskiy/java-patterns/commit/4287d991) +- GitHub traffic [`e593b9db`](https://github.com/AlexRogalskiy/java-patterns/commit/e593b9db) +- [pre-commit.ci] auto fixes from pre-commit.com hooks [`498c992c`](https://github.com/AlexRogalskiy/java-patterns/commit/498c992c) +- Updates on docs [`968a3d60`](https://github.com/AlexRogalskiy/java-patterns/commit/968a3d60) +- 💓 Updates contributor SVG [`b2234536`](https://github.com/AlexRogalskiy/java-patterns/commit/b2234536) +- docs: updates on docs page speed [`fc46fb29`](https://github.com/AlexRogalskiy/java-patterns/commit/fc46fb29) +- docs: updates on docs page speed [`53236563`](https://github.com/AlexRogalskiy/java-patterns/commit/53236563) +- docs: updates on docs page speed [`a502ba8c`](https://github.com/AlexRogalskiy/java-patterns/commit/a502ba8c) +- [pre-commit.ci] auto fixes from pre-commit.com hooks [`92707a0c`](https://github.com/AlexRogalskiy/java-patterns/commit/92707a0c) +- Updates on docs [`e5e4932d`](https://github.com/AlexRogalskiy/java-patterns/commit/e5e4932d) +- docs: updates on docs page speed [`c7e0aaf3`](https://github.com/AlexRogalskiy/java-patterns/commit/c7e0aaf3) +- Optimised images with calibre/image-actions [`580b58b9`](https://github.com/AlexRogalskiy/java-patterns/commit/580b58b9) +- [pre-commit.ci] auto fixes from pre-commit.com hooks [`fbd2007f`](https://github.com/AlexRogalskiy/java-patterns/commit/fbd2007f) +- Updates on docs [`fae182d2`](https://github.com/AlexRogalskiy/java-patterns/commit/fae182d2) +- docs: updates on docs page speed [`c7cde852`](https://github.com/AlexRogalskiy/java-patterns/commit/c7cde852) +- docs: updates on docs page speed [`cca3a05c`](https://github.com/AlexRogalskiy/java-patterns/commit/cca3a05c) +- GitHub traffic [`04c78824`](https://github.com/AlexRogalskiy/java-patterns/commit/04c78824) +- 💓 Updates contributor SVG [`207d9227`](https://github.com/AlexRogalskiy/java-patterns/commit/207d9227) +- docs: updates on docs page speed [`f89c4bff`](https://github.com/AlexRogalskiy/java-patterns/commit/f89c4bff) +- docs: updates on docs page speed [`595606b2`](https://github.com/AlexRogalskiy/java-patterns/commit/595606b2) +- Optimised images with calibre/image-actions [`e5430d74`](https://github.com/AlexRogalskiy/java-patterns/commit/e5430d74) +- [pre-commit.ci] auto fixes from pre-commit.com hooks [`e39b9a1e`](https://github.com/AlexRogalskiy/java-patterns/commit/e39b9a1e) +- Updates on docs [`968fe1c7`](https://github.com/AlexRogalskiy/java-patterns/commit/968fe1c7) +- docs: updates on docs page speed [`1f12fef8`](https://github.com/AlexRogalskiy/java-patterns/commit/1f12fef8) +- docs: updates on docs page speed [`71e08911`](https://github.com/AlexRogalskiy/java-patterns/commit/71e08911) +- docs: updates on docs page speed [`2d411535`](https://github.com/AlexRogalskiy/java-patterns/commit/2d411535) +- docs: updates on docs page speed [`7958c950`](https://github.com/AlexRogalskiy/java-patterns/commit/7958c950) +- docs: updates on docs page speed [`c97e66f1`](https://github.com/AlexRogalskiy/java-patterns/commit/c97e66f1) +- GitHub traffic [`108db3f9`](https://github.com/AlexRogalskiy/java-patterns/commit/108db3f9) +- 💓 Updates contributor SVG [`8dd3ac8e`](https://github.com/AlexRogalskiy/java-patterns/commit/8dd3ac8e) +- docs: updates on docs page speed [`2128ff58`](https://github.com/AlexRogalskiy/java-patterns/commit/2128ff58) +- docs: updates on docs page speed [`530f33f7`](https://github.com/AlexRogalskiy/java-patterns/commit/530f33f7) +- docs: updates on docs page speed [`6eb34d87`](https://github.com/AlexRogalskiy/java-patterns/commit/6eb34d87) +- docs: updates on docs page speed [`4452331a`](https://github.com/AlexRogalskiy/java-patterns/commit/4452331a) +- GitHub traffic [`dbc51ed1`](https://github.com/AlexRogalskiy/java-patterns/commit/dbc51ed1) +- [pre-commit.ci] auto fixes from pre-commit.com hooks [`59d062f7`](https://github.com/AlexRogalskiy/java-patterns/commit/59d062f7) +- Updates on docs [`5bc5e621`](https://github.com/AlexRogalskiy/java-patterns/commit/5bc5e621) +- 💓 Updates contributor SVG [`39b9d141`](https://github.com/AlexRogalskiy/java-patterns/commit/39b9d141) +- docs: updates on docs page speed [`18987ce3`](https://github.com/AlexRogalskiy/java-patterns/commit/18987ce3) +- docs: updates on docs page speed [`5fa81500`](https://github.com/AlexRogalskiy/java-patterns/commit/5fa81500) +- docs: updates on docs page speed [`48838c70`](https://github.com/AlexRogalskiy/java-patterns/commit/48838c70) +- [pre-commit.ci] auto fixes from pre-commit.com hooks [`1306e7dc`](https://github.com/AlexRogalskiy/java-patterns/commit/1306e7dc) +- Updates on docs [`22354339`](https://github.com/AlexRogalskiy/java-patterns/commit/22354339) +- docs: updates on docs page speed [`81906f62`](https://github.com/AlexRogalskiy/java-patterns/commit/81906f62) +- Optimised images with calibre/image-actions [`2cc5da74`](https://github.com/AlexRogalskiy/java-patterns/commit/2cc5da74) +- [pre-commit.ci] auto fixes from pre-commit.com hooks [`5d50076c`](https://github.com/AlexRogalskiy/java-patterns/commit/5d50076c) +- Updates on docs [`2d88d6c9`](https://github.com/AlexRogalskiy/java-patterns/commit/2d88d6c9) +- docs: updates on docs page speed [`ac2e214c`](https://github.com/AlexRogalskiy/java-patterns/commit/ac2e214c) +- docs: updates on docs page speed [`850734fd`](https://github.com/AlexRogalskiy/java-patterns/commit/850734fd) +- GitHub traffic [`e0bbd51d`](https://github.com/AlexRogalskiy/java-patterns/commit/e0bbd51d) +- 💓 Updates contributor SVG [`f3d093f9`](https://github.com/AlexRogalskiy/java-patterns/commit/f3d093f9) +- docs: updates on docs page speed [`b811feb6`](https://github.com/AlexRogalskiy/java-patterns/commit/b811feb6) +- docs: updates on docs page speed [`ade72d02`](https://github.com/AlexRogalskiy/java-patterns/commit/ade72d02) +- [pre-commit.ci] auto fixes from pre-commit.com hooks [`31fb212b`](https://github.com/AlexRogalskiy/java-patterns/commit/31fb212b) +- Updates on docs [`37b5003c`](https://github.com/AlexRogalskiy/java-patterns/commit/37b5003c) +- docs: updates on docs page speed [`220a28a3`](https://github.com/AlexRogalskiy/java-patterns/commit/220a28a3) +- docs: updates on docs page speed [`de2824cf`](https://github.com/AlexRogalskiy/java-patterns/commit/de2824cf) +- docs: updates on docs page speed [`aeea80b6`](https://github.com/AlexRogalskiy/java-patterns/commit/aeea80b6) +- Optimised images with calibre/image-actions [`93c56ca1`](https://github.com/AlexRogalskiy/java-patterns/commit/93c56ca1) +- [pre-commit.ci] auto fixes from pre-commit.com hooks [`352277fb`](https://github.com/AlexRogalskiy/java-patterns/commit/352277fb) +- Auto update markdown TOC [`74a1dcee`](https://github.com/AlexRogalskiy/java-patterns/commit/74a1dcee) +- Updates on docs [`2cb59cd1`](https://github.com/AlexRogalskiy/java-patterns/commit/2cb59cd1) +- docs: updates on docs page speed [`e2001802`](https://github.com/AlexRogalskiy/java-patterns/commit/e2001802) +- docs: updates on docs page speed [`589137ea`](https://github.com/AlexRogalskiy/java-patterns/commit/589137ea) +- GitHub traffic [`160d4ae8`](https://github.com/AlexRogalskiy/java-patterns/commit/160d4ae8) +- 💓 Updates contributor SVG [`7438dbe8`](https://github.com/AlexRogalskiy/java-patterns/commit/7438dbe8) +- docs: updates on docs page speed [`0947795d`](https://github.com/AlexRogalskiy/java-patterns/commit/0947795d) +- docs: updates on docs page speed [`daa21905`](https://github.com/AlexRogalskiy/java-patterns/commit/daa21905) +- docs: updates on docs page speed [`16fcfdb6`](https://github.com/AlexRogalskiy/java-patterns/commit/16fcfdb6) +- [pre-commit.ci] auto fixes from pre-commit.com hooks [`b98979cf`](https://github.com/AlexRogalskiy/java-patterns/commit/b98979cf) +- Updates on docs [`3aaa4533`](https://github.com/AlexRogalskiy/java-patterns/commit/3aaa4533) +- Optimised images with calibre/image-actions [`99228795`](https://github.com/AlexRogalskiy/java-patterns/commit/99228795) +- [pre-commit.ci] auto fixes from pre-commit.com hooks [`cd6d9781`](https://github.com/AlexRogalskiy/java-patterns/commit/cd6d9781) +- Updates on docs [`35adf405`](https://github.com/AlexRogalskiy/java-patterns/commit/35adf405) +- docs: updates on docs page speed [`2f86c39a`](https://github.com/AlexRogalskiy/java-patterns/commit/2f86c39a) +- docs: updates on docs page speed [`120a57e6`](https://github.com/AlexRogalskiy/java-patterns/commit/120a57e6) +- docs: updates on docs page speed [`51762790`](https://github.com/AlexRogalskiy/java-patterns/commit/51762790) +- docs: updates on docs page speed [`9953a87a`](https://github.com/AlexRogalskiy/java-patterns/commit/9953a87a) +- GitHub traffic [`983b6fbc`](https://github.com/AlexRogalskiy/java-patterns/commit/983b6fbc) +- 💓 Updates contributor SVG [`00d28ccb`](https://github.com/AlexRogalskiy/java-patterns/commit/00d28ccb) +- docs: updates on docs page speed [`935a3e5a`](https://github.com/AlexRogalskiy/java-patterns/commit/935a3e5a) +- docs: updates on docs page speed [`313898ee`](https://github.com/AlexRogalskiy/java-patterns/commit/313898ee) +- docs: updates on docs page speed [`30518893`](https://github.com/AlexRogalskiy/java-patterns/commit/30518893) +- Optimised images with calibre/image-actions [`bb1b06e2`](https://github.com/AlexRogalskiy/java-patterns/commit/bb1b06e2) +- [pre-commit.ci] auto fixes from pre-commit.com hooks [`6b3096f4`](https://github.com/AlexRogalskiy/java-patterns/commit/6b3096f4) +- Updates on docs [`6c1589a8`](https://github.com/AlexRogalskiy/java-patterns/commit/6c1589a8) +- docs: updates on docs page speed [`bacb2f42`](https://github.com/AlexRogalskiy/java-patterns/commit/bacb2f42) +- docs: updates on docs page speed [`cb8ad999`](https://github.com/AlexRogalskiy/java-patterns/commit/cb8ad999) +- docs: updates on docs page speed [`2cc426c6`](https://github.com/AlexRogalskiy/java-patterns/commit/2cc426c6) +- GitHub traffic [`cc1c43ff`](https://github.com/AlexRogalskiy/java-patterns/commit/cc1c43ff) +- 💓 Updates contributor SVG [`42faef98`](https://github.com/AlexRogalskiy/java-patterns/commit/42faef98) +- docs: updates on docs page speed [`f23020cf`](https://github.com/AlexRogalskiy/java-patterns/commit/f23020cf) +- Optimised images with calibre/image-actions [`a1fc9b5d`](https://github.com/AlexRogalskiy/java-patterns/commit/a1fc9b5d) +- [pre-commit.ci] auto fixes from pre-commit.com hooks [`b0dffbd4`](https://github.com/AlexRogalskiy/java-patterns/commit/b0dffbd4) +- Updates on docs [`e95d6e10`](https://github.com/AlexRogalskiy/java-patterns/commit/e95d6e10) +- docs: updates on docs page speed [`4d0562f6`](https://github.com/AlexRogalskiy/java-patterns/commit/4d0562f6) +- docs: updates on docs page speed [`8fa8a2c5`](https://github.com/AlexRogalskiy/java-patterns/commit/8fa8a2c5) +- docs: updates on docs page speed [`32482beb`](https://github.com/AlexRogalskiy/java-patterns/commit/32482beb) +- docs: updates on docs page speed [`725c7204`](https://github.com/AlexRogalskiy/java-patterns/commit/725c7204) +- docs: updates on docs page speed [`aceddbff`](https://github.com/AlexRogalskiy/java-patterns/commit/aceddbff) +- GitHub traffic [`ef3427bb`](https://github.com/AlexRogalskiy/java-patterns/commit/ef3427bb) +- 💓 Updates contributor SVG [`851fe5db`](https://github.com/AlexRogalskiy/java-patterns/commit/851fe5db) +- docs: updates on docs page speed [`d1ab31b0`](https://github.com/AlexRogalskiy/java-patterns/commit/d1ab31b0) +- [pre-commit.ci] auto fixes from pre-commit.com hooks [`1101731a`](https://github.com/AlexRogalskiy/java-patterns/commit/1101731a) +- Updates on docs [`a0354071`](https://github.com/AlexRogalskiy/java-patterns/commit/a0354071) +- docs: updates on docs page speed [`67b780c4`](https://github.com/AlexRogalskiy/java-patterns/commit/67b780c4) +- docs: updates on docs page speed [`e3c2e62b`](https://github.com/AlexRogalskiy/java-patterns/commit/e3c2e62b) +- docs: updates on docs page speed [`8afb4d94`](https://github.com/AlexRogalskiy/java-patterns/commit/8afb4d94) +- [pre-commit.ci] auto fixes from pre-commit.com hooks [`306b158b`](https://github.com/AlexRogalskiy/java-patterns/commit/306b158b) +- Updates on docs [`c510fb6c`](https://github.com/AlexRogalskiy/java-patterns/commit/c510fb6c) +- [pre-commit.ci] auto fixes from pre-commit.com hooks [`50f78c13`](https://github.com/AlexRogalskiy/java-patterns/commit/50f78c13) +- Updates on docs [`af777e6f`](https://github.com/AlexRogalskiy/java-patterns/commit/af777e6f) +- docs: updates on docs page speed [`80de9808`](https://github.com/AlexRogalskiy/java-patterns/commit/80de9808) +- docs: updates on docs page speed [`afa00b7b`](https://github.com/AlexRogalskiy/java-patterns/commit/afa00b7b) +- [pre-commit.ci] auto fixes from pre-commit.com hooks [`af998ab9`](https://github.com/AlexRogalskiy/java-patterns/commit/af998ab9) +- Updates on docs [`a42256dc`](https://github.com/AlexRogalskiy/java-patterns/commit/a42256dc) +- docs: updates on docs page speed [`d9df98f5`](https://github.com/AlexRogalskiy/java-patterns/commit/d9df98f5) +- [pre-commit.ci] auto fixes from pre-commit.com hooks [`4c5cbce9`](https://github.com/AlexRogalskiy/java-patterns/commit/4c5cbce9) +- Updates on docs [`69e13170`](https://github.com/AlexRogalskiy/java-patterns/commit/69e13170) +- 💓 Updates contributor SVG [`62edb238`](https://github.com/AlexRogalskiy/java-patterns/commit/62edb238) +- docs: updates on docs page speed [`b94474e0`](https://github.com/AlexRogalskiy/java-patterns/commit/b94474e0) +- docs: updates on docs page speed [`cef0f81b`](https://github.com/AlexRogalskiy/java-patterns/commit/cef0f81b) +- [pre-commit.ci] auto fixes from pre-commit.com hooks [`e1b20203`](https://github.com/AlexRogalskiy/java-patterns/commit/e1b20203) +- Updates on docs [`65eaadde`](https://github.com/AlexRogalskiy/java-patterns/commit/65eaadde) +- docs: updates on docs page speed [`7e960831`](https://github.com/AlexRogalskiy/java-patterns/commit/7e960831) +- docs: updates on docs page speed [`a36aaca7`](https://github.com/AlexRogalskiy/java-patterns/commit/a36aaca7) +- [pre-commit.ci] auto fixes from pre-commit.com hooks [`48f25d31`](https://github.com/AlexRogalskiy/java-patterns/commit/48f25d31) +- Optimised images with calibre/image-actions [`d3edaec9`](https://github.com/AlexRogalskiy/java-patterns/commit/d3edaec9) +- Updates on docs [`1dc6fac6`](https://github.com/AlexRogalskiy/java-patterns/commit/1dc6fac6) +- docs: updates on docs page speed [`60002ade`](https://github.com/AlexRogalskiy/java-patterns/commit/60002ade) +- docs: updates on docs page speed [`2dbe3566`](https://github.com/AlexRogalskiy/java-patterns/commit/2dbe3566) +- docs: updates on docs page speed [`d68d11f1`](https://github.com/AlexRogalskiy/java-patterns/commit/d68d11f1) +- GitHub traffic [`8f6037e2`](https://github.com/AlexRogalskiy/java-patterns/commit/8f6037e2) +- [pre-commit.ci] auto fixes from pre-commit.com hooks [`4a23cb11`](https://github.com/AlexRogalskiy/java-patterns/commit/4a23cb11) +- Updates on docs [`3e556669`](https://github.com/AlexRogalskiy/java-patterns/commit/3e556669) +- 💓 Updates contributor SVG [`48fc6c6a`](https://github.com/AlexRogalskiy/java-patterns/commit/48fc6c6a) +- docs: updates on docs page speed [`a1742709`](https://github.com/AlexRogalskiy/java-patterns/commit/a1742709) +- docs: updates on docs page speed [`af9049a2`](https://github.com/AlexRogalskiy/java-patterns/commit/af9049a2) +- [pre-commit.ci] auto fixes from pre-commit.com hooks [`86fba239`](https://github.com/AlexRogalskiy/java-patterns/commit/86fba239) +- Updates on docs [`60839717`](https://github.com/AlexRogalskiy/java-patterns/commit/60839717) +- docs: updates on docs page speed [`da456056`](https://github.com/AlexRogalskiy/java-patterns/commit/da456056) +- docs: updates on docs page speed [`ef9e9a6e`](https://github.com/AlexRogalskiy/java-patterns/commit/ef9e9a6e) +- docs: updates on docs page speed [`e9ee5c56`](https://github.com/AlexRogalskiy/java-patterns/commit/e9ee5c56) +- docs: updates on docs page speed [`c6848c07`](https://github.com/AlexRogalskiy/java-patterns/commit/c6848c07) +- GitHub traffic [`a5986a10`](https://github.com/AlexRogalskiy/java-patterns/commit/a5986a10) +- 💓 Updates contributor SVG [`b8a250a0`](https://github.com/AlexRogalskiy/java-patterns/commit/b8a250a0) +- docs: updates on docs page speed [`08c635cb`](https://github.com/AlexRogalskiy/java-patterns/commit/08c635cb) +- docs: updates on docs page speed [`18a884ce`](https://github.com/AlexRogalskiy/java-patterns/commit/18a884ce) +- docs: updates on docs page speed [`0fa55762`](https://github.com/AlexRogalskiy/java-patterns/commit/0fa55762) +- Optimised images with calibre/image-actions [`9f57fd20`](https://github.com/AlexRogalskiy/java-patterns/commit/9f57fd20) +- Updates on docs [`069b0b05`](https://github.com/AlexRogalskiy/java-patterns/commit/069b0b05) +- docs: updates on docs page speed [`47e69688`](https://github.com/AlexRogalskiy/java-patterns/commit/47e69688) +- [pre-commit.ci] auto fixes from pre-commit.com hooks [`18553db2`](https://github.com/AlexRogalskiy/java-patterns/commit/18553db2) +- Updates on docs [`86fa4ed0`](https://github.com/AlexRogalskiy/java-patterns/commit/86fa4ed0) +- docs: updates on docs page speed [`5da6507a`](https://github.com/AlexRogalskiy/java-patterns/commit/5da6507a) +- docs: updates on docs page speed [`15bf3701`](https://github.com/AlexRogalskiy/java-patterns/commit/15bf3701) +- GitHub traffic [`8b830483`](https://github.com/AlexRogalskiy/java-patterns/commit/8b830483) +- 💓 Updates contributor SVG [`1cee886f`](https://github.com/AlexRogalskiy/java-patterns/commit/1cee886f) +- docs: updates on docs page speed [`91aab583`](https://github.com/AlexRogalskiy/java-patterns/commit/91aab583) +- docs: updates on docs page speed [`b4069123`](https://github.com/AlexRogalskiy/java-patterns/commit/b4069123) +- docs: updates on docs page speed [`ad7a0307`](https://github.com/AlexRogalskiy/java-patterns/commit/ad7a0307) +- docs: updates on docs page speed [`ae46306f`](https://github.com/AlexRogalskiy/java-patterns/commit/ae46306f) +- [pre-commit.ci] auto fixes from pre-commit.com hooks [`56c37215`](https://github.com/AlexRogalskiy/java-patterns/commit/56c37215) +- Updates on docs [`468f93a9`](https://github.com/AlexRogalskiy/java-patterns/commit/468f93a9) +- docs: updates on docs page speed [`6f65d54b`](https://github.com/AlexRogalskiy/java-patterns/commit/6f65d54b) +- docs: updates on docs page speed [`924a0b90`](https://github.com/AlexRogalskiy/java-patterns/commit/924a0b90) +- GitHub traffic [`b0f5b465`](https://github.com/AlexRogalskiy/java-patterns/commit/b0f5b465) +- 💓 Updates contributor SVG [`09b267b7`](https://github.com/AlexRogalskiy/java-patterns/commit/09b267b7) +- docs: updates on docs page speed [`b87b9efc`](https://github.com/AlexRogalskiy/java-patterns/commit/b87b9efc) +- docs: updates on docs page speed [`342f5427`](https://github.com/AlexRogalskiy/java-patterns/commit/342f5427) +- Optimised images with calibre/image-actions [`a6896bd4`](https://github.com/AlexRogalskiy/java-patterns/commit/a6896bd4) +- Updates on docs [`f1e12c05`](https://github.com/AlexRogalskiy/java-patterns/commit/f1e12c05) +- docs: updates on docs page speed [`1605e10e`](https://github.com/AlexRogalskiy/java-patterns/commit/1605e10e) +- [pre-commit.ci] auto fixes from pre-commit.com hooks [`56b867b2`](https://github.com/AlexRogalskiy/java-patterns/commit/56b867b2) +- Updates on docs [`e685cd20`](https://github.com/AlexRogalskiy/java-patterns/commit/e685cd20) +- docs: updates on docs page speed [`f5f0f00d`](https://github.com/AlexRogalskiy/java-patterns/commit/f5f0f00d) +- [pre-commit.ci] auto fixes from pre-commit.com hooks [`ba900c7b`](https://github.com/AlexRogalskiy/java-patterns/commit/ba900c7b) +- Updates on docs [`bfaaf94a`](https://github.com/AlexRogalskiy/java-patterns/commit/bfaaf94a) +- docs: updates on docs page speed [`ab694b6a`](https://github.com/AlexRogalskiy/java-patterns/commit/ab694b6a) +- docs: updates on docs page speed [`36986e1b`](https://github.com/AlexRogalskiy/java-patterns/commit/36986e1b) +- GitHub traffic [`a3aff7ee`](https://github.com/AlexRogalskiy/java-patterns/commit/a3aff7ee) +- [pre-commit.ci] auto fixes from pre-commit.com hooks [`5a03a59f`](https://github.com/AlexRogalskiy/java-patterns/commit/5a03a59f) +- Updates on docs [`5fcb7610`](https://github.com/AlexRogalskiy/java-patterns/commit/5fcb7610) +- 💓 Updates contributor SVG [`41d4c254`](https://github.com/AlexRogalskiy/java-patterns/commit/41d4c254) +- docs: updates on docs page speed [`4a43d393`](https://github.com/AlexRogalskiy/java-patterns/commit/4a43d393) +- [pre-commit.ci] auto fixes from pre-commit.com hooks [`49fa00da`](https://github.com/AlexRogalskiy/java-patterns/commit/49fa00da) +- Updates on docs [`dc7ea5d4`](https://github.com/AlexRogalskiy/java-patterns/commit/dc7ea5d4) +- docs: updates on docs page speed [`abc794e2`](https://github.com/AlexRogalskiy/java-patterns/commit/abc794e2) +- docs: updates on docs page speed [`4db7084f`](https://github.com/AlexRogalskiy/java-patterns/commit/4db7084f) +- docs: updates on docs page speed [`aee85f0c`](https://github.com/AlexRogalskiy/java-patterns/commit/aee85f0c) +- docs: updates on docs page speed [`4003b8ce`](https://github.com/AlexRogalskiy/java-patterns/commit/4003b8ce) +- [pre-commit.ci] auto fixes from pre-commit.com hooks [`2b05cef0`](https://github.com/AlexRogalskiy/java-patterns/commit/2b05cef0) +- Updates on docs [`a6ae6247`](https://github.com/AlexRogalskiy/java-patterns/commit/a6ae6247) +- docs: updates on docs page speed [`47ad9f1e`](https://github.com/AlexRogalskiy/java-patterns/commit/47ad9f1e) +- docs: updates on docs page speed [`bd5e36ab`](https://github.com/AlexRogalskiy/java-patterns/commit/bd5e36ab) +- GitHub traffic [`a2d7094c`](https://github.com/AlexRogalskiy/java-patterns/commit/a2d7094c) +- 💓 Updates contributor SVG [`a6b19379`](https://github.com/AlexRogalskiy/java-patterns/commit/a6b19379) +- docs: updates on docs page speed [`7c49f906`](https://github.com/AlexRogalskiy/java-patterns/commit/7c49f906) +- docs: updates on docs page speed [`46c82e93`](https://github.com/AlexRogalskiy/java-patterns/commit/46c82e93) +- [pre-commit.ci] auto fixes from pre-commit.com hooks [`46d317af`](https://github.com/AlexRogalskiy/java-patterns/commit/46d317af) +- Updates on docs [`f77ec2c5`](https://github.com/AlexRogalskiy/java-patterns/commit/f77ec2c5) +- docs: updates on docs page speed [`497e9833`](https://github.com/AlexRogalskiy/java-patterns/commit/497e9833) +- [pre-commit.ci] auto fixes from pre-commit.com hooks [`12e0abcc`](https://github.com/AlexRogalskiy/java-patterns/commit/12e0abcc) +- Updates on docs [`3105a508`](https://github.com/AlexRogalskiy/java-patterns/commit/3105a508) +- docs: updates on docs page speed [`e7cf03ca`](https://github.com/AlexRogalskiy/java-patterns/commit/e7cf03ca) +- [pre-commit.ci] auto fixes from pre-commit.com hooks [`70b5a5d3`](https://github.com/AlexRogalskiy/java-patterns/commit/70b5a5d3) +- Updates on docs [`fbc3c849`](https://github.com/AlexRogalskiy/java-patterns/commit/fbc3c849) +- docs: updates on docs page speed [`84b9014c`](https://github.com/AlexRogalskiy/java-patterns/commit/84b9014c) +- docs: updates on docs page speed [`30116b6c`](https://github.com/AlexRogalskiy/java-patterns/commit/30116b6c) +- GitHub traffic [`f13f81dd`](https://github.com/AlexRogalskiy/java-patterns/commit/f13f81dd) +- docs: updates on docs page speed [`adf598a1`](https://github.com/AlexRogalskiy/java-patterns/commit/adf598a1) +- docs: updates on docs page speed [`305bd56b`](https://github.com/AlexRogalskiy/java-patterns/commit/305bd56b) +- Updates on docs [`82b09e08`](https://github.com/AlexRogalskiy/java-patterns/commit/82b09e08) +- [pre-commit.ci] auto fixes from pre-commit.com hooks [`af14d235`](https://github.com/AlexRogalskiy/java-patterns/commit/af14d235) +- Updates on docs [`634dc84e`](https://github.com/AlexRogalskiy/java-patterns/commit/634dc84e) +- docs: updates on docs page speed [`8c9e0f5d`](https://github.com/AlexRogalskiy/java-patterns/commit/8c9e0f5d) +- docs: updates on docs page speed [`35b70b4a`](https://github.com/AlexRogalskiy/java-patterns/commit/35b70b4a) +- Updates on docs [`d7514544`](https://github.com/AlexRogalskiy/java-patterns/commit/d7514544) +- Optimised images with calibre/image-actions [`4f1e303f`](https://github.com/AlexRogalskiy/java-patterns/commit/4f1e303f) +- [pre-commit.ci] auto fixes from pre-commit.com hooks [`6a43f0de`](https://github.com/AlexRogalskiy/java-patterns/commit/6a43f0de) +- Updates on docs [`45e901f7`](https://github.com/AlexRogalskiy/java-patterns/commit/45e901f7) +- docs: updates on docs page speed [`acaf4f95`](https://github.com/AlexRogalskiy/java-patterns/commit/acaf4f95) +- [pre-commit.ci] auto fixes from pre-commit.com hooks [`e57a9d39`](https://github.com/AlexRogalskiy/java-patterns/commit/e57a9d39) +- Updates on docs [`0e12e53d`](https://github.com/AlexRogalskiy/java-patterns/commit/0e12e53d) +- docs: updates on docs page speed [`b6a6dbe9`](https://github.com/AlexRogalskiy/java-patterns/commit/b6a6dbe9) +- Updates on docs [`5d919d39`](https://github.com/AlexRogalskiy/java-patterns/commit/5d919d39) +- docs: updates on docs page speed [`510ee7eb`](https://github.com/AlexRogalskiy/java-patterns/commit/510ee7eb) +- GitHub traffic [`921272ce`](https://github.com/AlexRogalskiy/java-patterns/commit/921272ce) +- 💓 Updates contributor SVG [`2977aa82`](https://github.com/AlexRogalskiy/java-patterns/commit/2977aa82) +- docs: updates on docs page speed [`2434e18d`](https://github.com/AlexRogalskiy/java-patterns/commit/2434e18d) +- docs: updates on docs page speed [`8032c5aa`](https://github.com/AlexRogalskiy/java-patterns/commit/8032c5aa) +- [pre-commit.ci] auto fixes from pre-commit.com hooks [`c34bba66`](https://github.com/AlexRogalskiy/java-patterns/commit/c34bba66) +- Updates on docs [`00fb4ebd`](https://github.com/AlexRogalskiy/java-patterns/commit/00fb4ebd) +- docs: updates on docs page speed [`e3b2b77e`](https://github.com/AlexRogalskiy/java-patterns/commit/e3b2b77e) +- docs: updates on docs page speed [`7f22feb2`](https://github.com/AlexRogalskiy/java-patterns/commit/7f22feb2) +- [pre-commit.ci] auto fixes from pre-commit.com hooks [`30bf9972`](https://github.com/AlexRogalskiy/java-patterns/commit/30bf9972) +- Updates on docs [`a87e9fa8`](https://github.com/AlexRogalskiy/java-patterns/commit/a87e9fa8) +- docs: updates on docs page speed [`9c2b4e39`](https://github.com/AlexRogalskiy/java-patterns/commit/9c2b4e39) +- Optimised images with calibre/image-actions [`a3703a3e`](https://github.com/AlexRogalskiy/java-patterns/commit/a3703a3e) +- Updates on docs [`8b407395`](https://github.com/AlexRogalskiy/java-patterns/commit/8b407395) +- docs: updates on docs page speed [`e770e506`](https://github.com/AlexRogalskiy/java-patterns/commit/e770e506) +- docs: updates on docs page speed [`7f3e472b`](https://github.com/AlexRogalskiy/java-patterns/commit/7f3e472b) +- GitHub traffic [`e46f20da`](https://github.com/AlexRogalskiy/java-patterns/commit/e46f20da) +- 💓 Updates contributor SVG [`66f6cedd`](https://github.com/AlexRogalskiy/java-patterns/commit/66f6cedd) +- docs: updates on docs page speed [`03bbacff`](https://github.com/AlexRogalskiy/java-patterns/commit/03bbacff) +- docs: updates on docs page speed [`d7d94179`](https://github.com/AlexRogalskiy/java-patterns/commit/d7d94179) +- docs: updates on docs page speed [`25c4aefd`](https://github.com/AlexRogalskiy/java-patterns/commit/25c4aefd) +- [pre-commit.ci] auto fixes from pre-commit.com hooks [`3e5f79af`](https://github.com/AlexRogalskiy/java-patterns/commit/3e5f79af) +- Updates on docs [`ca52a8f6`](https://github.com/AlexRogalskiy/java-patterns/commit/ca52a8f6) +- docs: updates on docs page speed [`59248cf3`](https://github.com/AlexRogalskiy/java-patterns/commit/59248cf3) +- Optimised images with calibre/image-actions [`6bbaa98e`](https://github.com/AlexRogalskiy/java-patterns/commit/6bbaa98e) +- [pre-commit.ci] auto fixes from pre-commit.com hooks [`6f7622ab`](https://github.com/AlexRogalskiy/java-patterns/commit/6f7622ab) +- Updates on docs [`2c7ec940`](https://github.com/AlexRogalskiy/java-patterns/commit/2c7ec940) +- docs: updates on docs page speed [`2aeb94fa`](https://github.com/AlexRogalskiy/java-patterns/commit/2aeb94fa) +- [pre-commit.ci] auto fixes from pre-commit.com hooks [`a3a223a8`](https://github.com/AlexRogalskiy/java-patterns/commit/a3a223a8) +- Updates on docs [`1ebb8519`](https://github.com/AlexRogalskiy/java-patterns/commit/1ebb8519) +- docs: updates on docs page speed [`5359cee3`](https://github.com/AlexRogalskiy/java-patterns/commit/5359cee3) +- [pre-commit.ci] auto fixes from pre-commit.com hooks [`852810e2`](https://github.com/AlexRogalskiy/java-patterns/commit/852810e2) +- Updates on docs [`3782f3c7`](https://github.com/AlexRogalskiy/java-patterns/commit/3782f3c7) +- docs: updates on docs page speed [`3a841716`](https://github.com/AlexRogalskiy/java-patterns/commit/3a841716) +- GitHub traffic [`5c56bf32`](https://github.com/AlexRogalskiy/java-patterns/commit/5c56bf32) +- docs: updates on docs page speed [`73f95416`](https://github.com/AlexRogalskiy/java-patterns/commit/73f95416) +- docs: updates on docs page speed [`27dac2af`](https://github.com/AlexRogalskiy/java-patterns/commit/27dac2af) +- [pre-commit.ci] auto fixes from pre-commit.com hooks [`bbcc55e6`](https://github.com/AlexRogalskiy/java-patterns/commit/bbcc55e6) +- Updates on docs [`b77fb6f7`](https://github.com/AlexRogalskiy/java-patterns/commit/b77fb6f7) +- docs: updates on docs page speed [`5339b785`](https://github.com/AlexRogalskiy/java-patterns/commit/5339b785) +- docs: updates on docs page speed [`9722d0c9`](https://github.com/AlexRogalskiy/java-patterns/commit/9722d0c9) +- GitHub traffic [`28b47cf1`](https://github.com/AlexRogalskiy/java-patterns/commit/28b47cf1) +- docs: updates on docs page speed [`800f8b49`](https://github.com/AlexRogalskiy/java-patterns/commit/800f8b49) +- docs: updates on docs page speed [`f8020177`](https://github.com/AlexRogalskiy/java-patterns/commit/f8020177) +- [pre-commit.ci] auto fixes from pre-commit.com hooks [`51fa5718`](https://github.com/AlexRogalskiy/java-patterns/commit/51fa5718) +- Updates on docs [`7d2b4d37`](https://github.com/AlexRogalskiy/java-patterns/commit/7d2b4d37) +- docs: updates on docs page speed [`283e91ad`](https://github.com/AlexRogalskiy/java-patterns/commit/283e91ad) +- [pre-commit.ci] auto fixes from pre-commit.com hooks [`fe3fc69c`](https://github.com/AlexRogalskiy/java-patterns/commit/fe3fc69c) +- Updates on docs [`a6224143`](https://github.com/AlexRogalskiy/java-patterns/commit/a6224143) +- docs: updates on docs page speed [`611b1ad5`](https://github.com/AlexRogalskiy/java-patterns/commit/611b1ad5) +- [pre-commit.ci] auto fixes from pre-commit.com hooks [`2e8de708`](https://github.com/AlexRogalskiy/java-patterns/commit/2e8de708) +- Updates on docs [`b6deeb2c`](https://github.com/AlexRogalskiy/java-patterns/commit/b6deeb2c) +- docs: updates on docs page speed [`33e59ad4`](https://github.com/AlexRogalskiy/java-patterns/commit/33e59ad4) +- [pre-commit.ci] auto fixes from pre-commit.com hooks [`f9b80d82`](https://github.com/AlexRogalskiy/java-patterns/commit/f9b80d82) +- Auto update markdown TOC [`5c6167f0`](https://github.com/AlexRogalskiy/java-patterns/commit/5c6167f0) +- Updates on docs [`84c96d15`](https://github.com/AlexRogalskiy/java-patterns/commit/84c96d15) +- GitHub traffic [`ff1828b3`](https://github.com/AlexRogalskiy/java-patterns/commit/ff1828b3) +- docs: updates on docs page speed [`cb87c20c`](https://github.com/AlexRogalskiy/java-patterns/commit/cb87c20c) +- docs: updates on docs page speed [`3f9d5fce`](https://github.com/AlexRogalskiy/java-patterns/commit/3f9d5fce) +- Updates on docs [`e9e3f97c`](https://github.com/AlexRogalskiy/java-patterns/commit/e9e3f97c) +- [pre-commit.ci] auto fixes from pre-commit.com hooks [`afecaa29`](https://github.com/AlexRogalskiy/java-patterns/commit/afecaa29) + +#### [0.0.0](https://github.com/AlexRogalskiy/java-patterns/compare/1.6...0.0.0) + +> April 29, 2022 + +- Updates on docs [`e85323d5`](https://github.com/AlexRogalskiy/java-patterns/commit/e85323d5) +- Auto update markdown TOC [`3bfea8d3`](https://github.com/AlexRogalskiy/java-patterns/commit/3bfea8d3) +- Updates on docs [`a978d2b0`](https://github.com/AlexRogalskiy/java-patterns/commit/a978d2b0) +- docs: updates on docs page speed [`cb35929f`](https://github.com/AlexRogalskiy/java-patterns/commit/cb35929f) +- Create CITATION.cff [`032a3e62`](https://github.com/AlexRogalskiy/java-patterns/commit/032a3e62) +- docs: updates on VERSION [`5d615916`](https://github.com/AlexRogalskiy/java-patterns/commit/5d615916) + +#### [1.6](https://github.com/AlexRogalskiy/java-patterns/compare/v1.6...1.6) + +> April 28, 2022 + + +#### [v1.6](https://github.com/AlexRogalskiy/java-patterns/compare/v1...v1.6) + +> April 28, 2022 + +- Updates on docs [`16aa2ac5`](https://github.com/AlexRogalskiy/java-patterns/commit/16aa2ac5) +- Auto update markdown TOC [`c259e1c6`](https://github.com/AlexRogalskiy/java-patterns/commit/c259e1c6) +- Updates on docs [`99a97352`](https://github.com/AlexRogalskiy/java-patterns/commit/99a97352) +- docs: updates on docs page speed [`b23abd0f`](https://github.com/AlexRogalskiy/java-patterns/commit/b23abd0f) +- docs: updates on docs page speed [`30e75591`](https://github.com/AlexRogalskiy/java-patterns/commit/30e75591) +- Updates on docs [`45a9bd25`](https://github.com/AlexRogalskiy/java-patterns/commit/45a9bd25) +- Optimised images with calibre/image-actions [`692689de`](https://github.com/AlexRogalskiy/java-patterns/commit/692689de) +- Updates on docs [`1e8201a4`](https://github.com/AlexRogalskiy/java-patterns/commit/1e8201a4) +- GitHub traffic [`b28a269d`](https://github.com/AlexRogalskiy/java-patterns/commit/b28a269d) +- docs: updates on docs page speed [`6fed2935`](https://github.com/AlexRogalskiy/java-patterns/commit/6fed2935) +- Auto update markdown TOC [`9d13088c`](https://github.com/AlexRogalskiy/java-patterns/commit/9d13088c) +- Updates on files [`085a68a4`](https://github.com/AlexRogalskiy/java-patterns/commit/085a68a4) +- docs: updates on docs page speed [`e6fa21eb`](https://github.com/AlexRogalskiy/java-patterns/commit/e6fa21eb) +- Delete aux directory [`af759fbd`](https://github.com/AlexRogalskiy/java-patterns/commit/af759fbd) +- Updates on files [`0e3f8388`](https://github.com/AlexRogalskiy/java-patterns/commit/0e3f8388) +- Updates on files [`b29b4709`](https://github.com/AlexRogalskiy/java-patterns/commit/b29b4709) +- docs: updates on docs page speed [`fde5a149`](https://github.com/AlexRogalskiy/java-patterns/commit/fde5a149) +- Updates on files [`774be534`](https://github.com/AlexRogalskiy/java-patterns/commit/774be534) +- Updates on files [`37e1336b`](https://github.com/AlexRogalskiy/java-patterns/commit/37e1336b) +- docs: updates on docs page speed [`53ac40c8`](https://github.com/AlexRogalskiy/java-patterns/commit/53ac40c8) +- Auto update markdown TOC [`ea8cc0a2`](https://github.com/AlexRogalskiy/java-patterns/commit/ea8cc0a2) +- Updates on files [`63f6b155`](https://github.com/AlexRogalskiy/java-patterns/commit/63f6b155) +- Optimised images with calibre/image-actions [`05ecad86`](https://github.com/AlexRogalskiy/java-patterns/commit/05ecad86) +- Updates on files [`760dc73d`](https://github.com/AlexRogalskiy/java-patterns/commit/760dc73d) +- docs: updates on docs page speed [`802d7b9d`](https://github.com/AlexRogalskiy/java-patterns/commit/802d7b9d) +- docs: updates on docs page speed [`52e54550`](https://github.com/AlexRogalskiy/java-patterns/commit/52e54550) +- GitHub traffic [`889c8460`](https://github.com/AlexRogalskiy/java-patterns/commit/889c8460) +- Auto update markdown TOC [`7c65aa23`](https://github.com/AlexRogalskiy/java-patterns/commit/7c65aa23) +- Updates on files [`f51b0162`](https://github.com/AlexRogalskiy/java-patterns/commit/f51b0162) +- docs: updates on docs page speed [`3a3364a3`](https://github.com/AlexRogalskiy/java-patterns/commit/3a3364a3) +- Updates on files [`97491cd0`](https://github.com/AlexRogalskiy/java-patterns/commit/97491cd0) +- Updates on files [`c2a20506`](https://github.com/AlexRogalskiy/java-patterns/commit/c2a20506) +- Updates on files [`8762b559`](https://github.com/AlexRogalskiy/java-patterns/commit/8762b559) +- Updates on files [`53120940`](https://github.com/AlexRogalskiy/java-patterns/commit/53120940) +- Updates on files [`b0346ddf`](https://github.com/AlexRogalskiy/java-patterns/commit/b0346ddf) +- Updates on files [`731311b7`](https://github.com/AlexRogalskiy/java-patterns/commit/731311b7) +- Updates on docs [`5e9caac5`](https://github.com/AlexRogalskiy/java-patterns/commit/5e9caac5) +- Optimised images with calibre/image-actions [`75a62e21`](https://github.com/AlexRogalskiy/java-patterns/commit/75a62e21) +- Updates on docs [`9541d8c8`](https://github.com/AlexRogalskiy/java-patterns/commit/9541d8c8) +- Updates on docs [`3e504a16`](https://github.com/AlexRogalskiy/java-patterns/commit/3e504a16) +- Updates on docs [`16f59700`](https://github.com/AlexRogalskiy/java-patterns/commit/16f59700) +- Updates on files [`3fb3f9a5`](https://github.com/AlexRogalskiy/java-patterns/commit/3fb3f9a5) +- Updates on files [`014459bc`](https://github.com/AlexRogalskiy/java-patterns/commit/014459bc) +- Auto update markdown TOC [`d5f13c2c`](https://github.com/AlexRogalskiy/java-patterns/commit/d5f13c2c) +- Updates on files [`689b09a7`](https://github.com/AlexRogalskiy/java-patterns/commit/689b09a7) +- docs: updates on docs page speed [`fce78b37`](https://github.com/AlexRogalskiy/java-patterns/commit/fce78b37) +- GitHub traffic [`3ec8f61c`](https://github.com/AlexRogalskiy/java-patterns/commit/3ec8f61c) +- Auto update markdown TOC [`ec74c73f`](https://github.com/AlexRogalskiy/java-patterns/commit/ec74c73f) +- Updates on files [`b4dce30e`](https://github.com/AlexRogalskiy/java-patterns/commit/b4dce30e) +- Updates on files [`d6f2898e`](https://github.com/AlexRogalskiy/java-patterns/commit/d6f2898e) +- docs: updates on docs page speed [`15cf688b`](https://github.com/AlexRogalskiy/java-patterns/commit/15cf688b) +- Updates on files [`5f9085f3`](https://github.com/AlexRogalskiy/java-patterns/commit/5f9085f3) +- docs: updates on docs page speed [`0eaefa63`](https://github.com/AlexRogalskiy/java-patterns/commit/0eaefa63) +- Auto update markdown TOC [`3f5457d8`](https://github.com/AlexRogalskiy/java-patterns/commit/3f5457d8) +- Updates on files [`ffdee048`](https://github.com/AlexRogalskiy/java-patterns/commit/ffdee048) +- Updates on files [`c11ffc98`](https://github.com/AlexRogalskiy/java-patterns/commit/c11ffc98) +- Auto update markdown TOC [`69e06766`](https://github.com/AlexRogalskiy/java-patterns/commit/69e06766) +- Updates on files [`519f14f5`](https://github.com/AlexRogalskiy/java-patterns/commit/519f14f5) +- Updates on files [`52d0e950`](https://github.com/AlexRogalskiy/java-patterns/commit/52d0e950) +- Auto update markdown TOC [`94afdf83`](https://github.com/AlexRogalskiy/java-patterns/commit/94afdf83) +- Updates on files [`7b655bb7`](https://github.com/AlexRogalskiy/java-patterns/commit/7b655bb7) +- Updates on files [`ee866c78`](https://github.com/AlexRogalskiy/java-patterns/commit/ee866c78) +- Updates on files [`c1040ce4`](https://github.com/AlexRogalskiy/java-patterns/commit/c1040ce4) +- Auto update markdown TOC [`bd2397e3`](https://github.com/AlexRogalskiy/java-patterns/commit/bd2397e3) +- Updates on files [`5855b253`](https://github.com/AlexRogalskiy/java-patterns/commit/5855b253) +- Updates on files [`a5043a62`](https://github.com/AlexRogalskiy/java-patterns/commit/a5043a62) +- Updates on files [`9b041c61`](https://github.com/AlexRogalskiy/java-patterns/commit/9b041c61) +- Optimised images with calibre/image-actions [`e43bdbdc`](https://github.com/AlexRogalskiy/java-patterns/commit/e43bdbdc) +- Updates on files [`759a9cef`](https://github.com/AlexRogalskiy/java-patterns/commit/759a9cef) +- Auto update markdown TOC [`e26e5d2b`](https://github.com/AlexRogalskiy/java-patterns/commit/e26e5d2b) +- Updates on files [`0dd1f258`](https://github.com/AlexRogalskiy/java-patterns/commit/0dd1f258) +- Updates on files [`7e41ea0f`](https://github.com/AlexRogalskiy/java-patterns/commit/7e41ea0f) +- GitHub traffic [`b20ca3c3`](https://github.com/AlexRogalskiy/java-patterns/commit/b20ca3c3) +- Updates on files [`abc33a06`](https://github.com/AlexRogalskiy/java-patterns/commit/abc33a06) +- Updates on files [`a8579f84`](https://github.com/AlexRogalskiy/java-patterns/commit/a8579f84) +- Auto update markdown TOC [`a7fd365f`](https://github.com/AlexRogalskiy/java-patterns/commit/a7fd365f) +- Updates on files [`293ab07b`](https://github.com/AlexRogalskiy/java-patterns/commit/293ab07b) +- Updates on files [`5859800a`](https://github.com/AlexRogalskiy/java-patterns/commit/5859800a) +- Updates on files [`6e3a93aa`](https://github.com/AlexRogalskiy/java-patterns/commit/6e3a93aa) +- Updates on files [`a7a27e6e`](https://github.com/AlexRogalskiy/java-patterns/commit/a7a27e6e) +- Updates on files [`733638e7`](https://github.com/AlexRogalskiy/java-patterns/commit/733638e7) +- Updates on files [`64a2f304`](https://github.com/AlexRogalskiy/java-patterns/commit/64a2f304) +- Updates on files [`739bcb3d`](https://github.com/AlexRogalskiy/java-patterns/commit/739bcb3d) +- Updates on files [`978efdf3`](https://github.com/AlexRogalskiy/java-patterns/commit/978efdf3) +- Auto update markdown TOC [`51adc89c`](https://github.com/AlexRogalskiy/java-patterns/commit/51adc89c) +- Updates on files [`eb585afe`](https://github.com/AlexRogalskiy/java-patterns/commit/eb585afe) +- Updates on files [`7d8054d0`](https://github.com/AlexRogalskiy/java-patterns/commit/7d8054d0) +- Optimised images with calibre/image-actions [`95cd227f`](https://github.com/AlexRogalskiy/java-patterns/commit/95cd227f) +- Updates on files [`bdd26bee`](https://github.com/AlexRogalskiy/java-patterns/commit/bdd26bee) +- Updated with the latest blog posts [`cfd09e2e`](https://github.com/AlexRogalskiy/java-patterns/commit/cfd09e2e) +- Updated with the latest blog posts [`586f6abb`](https://github.com/AlexRogalskiy/java-patterns/commit/586f6abb) +- Updates on files [`e938b388`](https://github.com/AlexRogalskiy/java-patterns/commit/e938b388) +- Updated with the latest blog posts [`d37410fc`](https://github.com/AlexRogalskiy/java-patterns/commit/d37410fc) +- Updated with the latest blog posts [`320384db`](https://github.com/AlexRogalskiy/java-patterns/commit/320384db) +- Optimised images with calibre/image-actions [`364a5c14`](https://github.com/AlexRogalskiy/java-patterns/commit/364a5c14) +- Updates on files [`d86c4dcf`](https://github.com/AlexRogalskiy/java-patterns/commit/d86c4dcf) +- Optimised images with calibre/image-actions [`b64d5e00`](https://github.com/AlexRogalskiy/java-patterns/commit/b64d5e00) +- Updates on files [`bdd23dbb`](https://github.com/AlexRogalskiy/java-patterns/commit/bdd23dbb) +- Updated with the latest blog posts [`a934d2b8`](https://github.com/AlexRogalskiy/java-patterns/commit/a934d2b8) +- Updated with the latest blog posts [`6dcedad2`](https://github.com/AlexRogalskiy/java-patterns/commit/6dcedad2) +- Updated with the latest blog posts [`f216edb4`](https://github.com/AlexRogalskiy/java-patterns/commit/f216edb4) +- Optimised images with calibre/image-actions [`0da05041`](https://github.com/AlexRogalskiy/java-patterns/commit/0da05041) +- Updates on files [`99411df1`](https://github.com/AlexRogalskiy/java-patterns/commit/99411df1) +- GitHub traffic [`9af3c018`](https://github.com/AlexRogalskiy/java-patterns/commit/9af3c018) +- Updates on files [`ec188e50`](https://github.com/AlexRogalskiy/java-patterns/commit/ec188e50) +- Updated with the latest blog posts [`059717aa`](https://github.com/AlexRogalskiy/java-patterns/commit/059717aa) +- Updated with the latest blog posts [`f87d5b5b`](https://github.com/AlexRogalskiy/java-patterns/commit/f87d5b5b) +- Updates on files [`3028a7cd`](https://github.com/AlexRogalskiy/java-patterns/commit/3028a7cd) +- Updated with the latest blog posts [`3d3d6971`](https://github.com/AlexRogalskiy/java-patterns/commit/3d3d6971) +- Updated with the latest blog posts [`bd1cc84e`](https://github.com/AlexRogalskiy/java-patterns/commit/bd1cc84e) +- Updates on docs [`fe0ed952`](https://github.com/AlexRogalskiy/java-patterns/commit/fe0ed952) +- Updated with the latest blog posts [`e67f52d5`](https://github.com/AlexRogalskiy/java-patterns/commit/e67f52d5) +- Updated with the latest blog posts [`bdb1fe4d`](https://github.com/AlexRogalskiy/java-patterns/commit/bdb1fe4d) +- Updated with the latest blog posts [`4115cceb`](https://github.com/AlexRogalskiy/java-patterns/commit/4115cceb) +- Updated with the latest blog posts [`578c0f41`](https://github.com/AlexRogalskiy/java-patterns/commit/578c0f41) +- docs: updates on docs page speed [`7b99f834`](https://github.com/AlexRogalskiy/java-patterns/commit/7b99f834) +- Updated with the latest blog posts [`be10c673`](https://github.com/AlexRogalskiy/java-patterns/commit/be10c673) +- Updated with the latest blog posts [`68c11227`](https://github.com/AlexRogalskiy/java-patterns/commit/68c11227) +- Updated with the latest blog posts [`27ca3b7d`](https://github.com/AlexRogalskiy/java-patterns/commit/27ca3b7d) +- docs: updates on docs page speed [`0ed9baa1`](https://github.com/AlexRogalskiy/java-patterns/commit/0ed9baa1) +- Updated with the latest blog posts [`a834d6c4`](https://github.com/AlexRogalskiy/java-patterns/commit/a834d6c4) +- Updated with the latest blog posts [`c259e65a`](https://github.com/AlexRogalskiy/java-patterns/commit/c259e65a) +- Updates on files [`075530c2`](https://github.com/AlexRogalskiy/java-patterns/commit/075530c2) +- Optimised images with calibre/image-actions [`1d3c7cdd`](https://github.com/AlexRogalskiy/java-patterns/commit/1d3c7cdd) +- Updates on files [`6317865b`](https://github.com/AlexRogalskiy/java-patterns/commit/6317865b) +- Updated with the latest blog posts [`f771f2be`](https://github.com/AlexRogalskiy/java-patterns/commit/f771f2be) +- GitHub traffic [`9d9181ff`](https://github.com/AlexRogalskiy/java-patterns/commit/9d9181ff) +- Updated with the latest blog posts [`52825551`](https://github.com/AlexRogalskiy/java-patterns/commit/52825551) +- Updated with the latest blog posts [`2b089a8f`](https://github.com/AlexRogalskiy/java-patterns/commit/2b089a8f) +- Updated with the latest blog posts [`07b47841`](https://github.com/AlexRogalskiy/java-patterns/commit/07b47841) +- Updated with the latest blog posts [`ba223169`](https://github.com/AlexRogalskiy/java-patterns/commit/ba223169) +- Updated with the latest blog posts [`fb1ec07c`](https://github.com/AlexRogalskiy/java-patterns/commit/fb1ec07c) +- Updates on files [`285d6c2f`](https://github.com/AlexRogalskiy/java-patterns/commit/285d6c2f) +- Optimised images with calibre/image-actions [`96f171c2`](https://github.com/AlexRogalskiy/java-patterns/commit/96f171c2) +- Updates on files [`c8815e19`](https://github.com/AlexRogalskiy/java-patterns/commit/c8815e19) +- Updated with the latest blog posts [`ee19e419`](https://github.com/AlexRogalskiy/java-patterns/commit/ee19e419) +- Updated with the latest blog posts [`71b54037`](https://github.com/AlexRogalskiy/java-patterns/commit/71b54037) +- Updates on files [`1d8d7367`](https://github.com/AlexRogalskiy/java-patterns/commit/1d8d7367) +- Auto update markdown TOC [`9f862d7e`](https://github.com/AlexRogalskiy/java-patterns/commit/9f862d7e) +- Updates on files [`cbf7d1fb`](https://github.com/AlexRogalskiy/java-patterns/commit/cbf7d1fb) +- Updated with the latest blog posts [`47fdc3bd`](https://github.com/AlexRogalskiy/java-patterns/commit/47fdc3bd) +- Updated with the latest blog posts [`24195044`](https://github.com/AlexRogalskiy/java-patterns/commit/24195044) +- Updated with the latest blog posts [`05de332e`](https://github.com/AlexRogalskiy/java-patterns/commit/05de332e) +- Updated with the latest blog posts [`d4c0c3e4`](https://github.com/AlexRogalskiy/java-patterns/commit/d4c0c3e4) +- Updated with the latest blog posts [`ef27aeba`](https://github.com/AlexRogalskiy/java-patterns/commit/ef27aeba) +- Updated with the latest blog posts [`b69d581e`](https://github.com/AlexRogalskiy/java-patterns/commit/b69d581e) +- Updated with the latest blog posts [`83edead6`](https://github.com/AlexRogalskiy/java-patterns/commit/83edead6) +- Updated with the latest blog posts [`30043c62`](https://github.com/AlexRogalskiy/java-patterns/commit/30043c62) +- Updated with the latest blog posts [`62729606`](https://github.com/AlexRogalskiy/java-patterns/commit/62729606) +- GitHub traffic [`6558f77d`](https://github.com/AlexRogalskiy/java-patterns/commit/6558f77d) +- Updates on files [`1885d047`](https://github.com/AlexRogalskiy/java-patterns/commit/1885d047) +- Updated with the latest blog posts [`1e128f16`](https://github.com/AlexRogalskiy/java-patterns/commit/1e128f16) +- Updated with the latest blog posts [`cef7a11f`](https://github.com/AlexRogalskiy/java-patterns/commit/cef7a11f) +- Updated with the latest blog posts [`47db76fe`](https://github.com/AlexRogalskiy/java-patterns/commit/47db76fe) +- Updated with the latest blog posts [`284b9b42`](https://github.com/AlexRogalskiy/java-patterns/commit/284b9b42) +- Updated with the latest blog posts [`68ba3ca4`](https://github.com/AlexRogalskiy/java-patterns/commit/68ba3ca4) +- Updated with the latest blog posts [`0cb19ffa`](https://github.com/AlexRogalskiy/java-patterns/commit/0cb19ffa) +- Updated with the latest blog posts [`a51a461d`](https://github.com/AlexRogalskiy/java-patterns/commit/a51a461d) +- Updated with the latest blog posts [`cde50e9a`](https://github.com/AlexRogalskiy/java-patterns/commit/cde50e9a) +- Updated with the latest blog posts [`17c3af23`](https://github.com/AlexRogalskiy/java-patterns/commit/17c3af23) +- Updated with the latest blog posts [`ee98552a`](https://github.com/AlexRogalskiy/java-patterns/commit/ee98552a) +- Updated with the latest blog posts [`52bb6c1b`](https://github.com/AlexRogalskiy/java-patterns/commit/52bb6c1b) +- Updates on files [`dc4de069`](https://github.com/AlexRogalskiy/java-patterns/commit/dc4de069) +- Updates on files [`628c51b0`](https://github.com/AlexRogalskiy/java-patterns/commit/628c51b0) +- Updated with the latest blog posts [`ef697828`](https://github.com/AlexRogalskiy/java-patterns/commit/ef697828) +- Updated with the latest blog posts [`be0a0514`](https://github.com/AlexRogalskiy/java-patterns/commit/be0a0514) +- Optimised images with calibre/image-actions [`8305fb96`](https://github.com/AlexRogalskiy/java-patterns/commit/8305fb96) +- Updates on files [`e228d926`](https://github.com/AlexRogalskiy/java-patterns/commit/e228d926) +- Updates on files [`62d5a850`](https://github.com/AlexRogalskiy/java-patterns/commit/62d5a850) +- Updated with the latest blog posts [`dad25c0e`](https://github.com/AlexRogalskiy/java-patterns/commit/dad25c0e) +- Updated with the latest blog posts [`6130f927`](https://github.com/AlexRogalskiy/java-patterns/commit/6130f927) +- Updated with the latest blog posts [`9c99e711`](https://github.com/AlexRogalskiy/java-patterns/commit/9c99e711) +- Updated with the latest blog posts [`2bb899b7`](https://github.com/AlexRogalskiy/java-patterns/commit/2bb899b7) +- GitHub traffic [`12b041e1`](https://github.com/AlexRogalskiy/java-patterns/commit/12b041e1) +- Updated with the latest blog posts [`2eccf08b`](https://github.com/AlexRogalskiy/java-patterns/commit/2eccf08b) +- Updated with the latest blog posts [`07f1d128`](https://github.com/AlexRogalskiy/java-patterns/commit/07f1d128) +- Updated with the latest blog posts [`3a5ff9fc`](https://github.com/AlexRogalskiy/java-patterns/commit/3a5ff9fc) +- Updated with the latest blog posts [`0f2d868e`](https://github.com/AlexRogalskiy/java-patterns/commit/0f2d868e) +- Updated with the latest blog posts [`c96716c9`](https://github.com/AlexRogalskiy/java-patterns/commit/c96716c9) +- Updates on files [`b8fa1a7c`](https://github.com/AlexRogalskiy/java-patterns/commit/b8fa1a7c) +- Updated with the latest blog posts [`6f8fabae`](https://github.com/AlexRogalskiy/java-patterns/commit/6f8fabae) +- Updated with the latest blog posts [`3e6e0733`](https://github.com/AlexRogalskiy/java-patterns/commit/3e6e0733) +- Updated with the latest blog posts [`e2d76706`](https://github.com/AlexRogalskiy/java-patterns/commit/e2d76706) +- Updated with the latest blog posts [`a07d67c4`](https://github.com/AlexRogalskiy/java-patterns/commit/a07d67c4) +- Updated with the latest blog posts [`c84d7853`](https://github.com/AlexRogalskiy/java-patterns/commit/c84d7853) +- Updated with the latest blog posts [`174af49a`](https://github.com/AlexRogalskiy/java-patterns/commit/174af49a) +- Updated with the latest blog posts [`7776ac12`](https://github.com/AlexRogalskiy/java-patterns/commit/7776ac12) +- Updated with the latest blog posts [`3b612557`](https://github.com/AlexRogalskiy/java-patterns/commit/3b612557) +- Updated with the latest blog posts [`a99a4107`](https://github.com/AlexRogalskiy/java-patterns/commit/a99a4107) +- Updated with the latest blog posts [`0574c367`](https://github.com/AlexRogalskiy/java-patterns/commit/0574c367) +- Updates on files [`9701be5d`](https://github.com/AlexRogalskiy/java-patterns/commit/9701be5d) +- Optimised images with calibre/image-actions [`3fe97895`](https://github.com/AlexRogalskiy/java-patterns/commit/3fe97895) +- Updates on files [`0f1c8446`](https://github.com/AlexRogalskiy/java-patterns/commit/0f1c8446) +- Updated with the latest blog posts [`1a4fa445`](https://github.com/AlexRogalskiy/java-patterns/commit/1a4fa445) +- GitHub traffic [`285115be`](https://github.com/AlexRogalskiy/java-patterns/commit/285115be) +- Updates on files [`ae7a3c1d`](https://github.com/AlexRogalskiy/java-patterns/commit/ae7a3c1d) +- Update @AlexRogalskiy as a contributor [`8722c43f`](https://github.com/AlexRogalskiy/java-patterns/commit/8722c43f) +- Updated with the latest blog posts [`116881fd`](https://github.com/AlexRogalskiy/java-patterns/commit/116881fd) +- Updates on files [`887d223a`](https://github.com/AlexRogalskiy/java-patterns/commit/887d223a) +- Updated with the latest blog posts [`07e0510a`](https://github.com/AlexRogalskiy/java-patterns/commit/07e0510a) +- Updated with the latest blog posts [`c3f315e8`](https://github.com/AlexRogalskiy/java-patterns/commit/c3f315e8) +- Updated with the latest blog posts [`1457df7c`](https://github.com/AlexRogalskiy/java-patterns/commit/1457df7c) +- Updated with the latest blog posts [`d7e39ef9`](https://github.com/AlexRogalskiy/java-patterns/commit/d7e39ef9) +- Updated with the latest blog posts [`d923c56e`](https://github.com/AlexRogalskiy/java-patterns/commit/d923c56e) +- Updated with the latest blog posts [`d42d7391`](https://github.com/AlexRogalskiy/java-patterns/commit/d42d7391) +- Optimised images with calibre/image-actions [`a6da7e42`](https://github.com/AlexRogalskiy/java-patterns/commit/a6da7e42) +- Updates on files [`3255dee0`](https://github.com/AlexRogalskiy/java-patterns/commit/3255dee0) +- Updated with the latest blog posts [`132332ce`](https://github.com/AlexRogalskiy/java-patterns/commit/132332ce) +- Updated with the latest blog posts [`dc7b67ac`](https://github.com/AlexRogalskiy/java-patterns/commit/dc7b67ac) +- Updated with the latest blog posts [`8ebd97fe`](https://github.com/AlexRogalskiy/java-patterns/commit/8ebd97fe) +- GitHub traffic [`0e52f7b6`](https://github.com/AlexRogalskiy/java-patterns/commit/0e52f7b6) +- Updated with the latest blog posts [`671a7871`](https://github.com/AlexRogalskiy/java-patterns/commit/671a7871) +- Updates on files [`2b753c48`](https://github.com/AlexRogalskiy/java-patterns/commit/2b753c48) +- Updated with the latest blog posts [`50a569f7`](https://github.com/AlexRogalskiy/java-patterns/commit/50a569f7) +- Updated with the latest blog posts [`7183520a`](https://github.com/AlexRogalskiy/java-patterns/commit/7183520a) +- Updated with the latest blog posts [`ebe0895f`](https://github.com/AlexRogalskiy/java-patterns/commit/ebe0895f) +- Updated with the latest blog posts [`1b4a558a`](https://github.com/AlexRogalskiy/java-patterns/commit/1b4a558a) +- Updates on files [`7d1182e5`](https://github.com/AlexRogalskiy/java-patterns/commit/7d1182e5) +- Updated with the latest blog posts [`bd7b2f72`](https://github.com/AlexRogalskiy/java-patterns/commit/bd7b2f72) +- Updated with the latest blog posts [`e09c321d`](https://github.com/AlexRogalskiy/java-patterns/commit/e09c321d) +- Updates on files [`4cbf570f`](https://github.com/AlexRogalskiy/java-patterns/commit/4cbf570f) +- Updated with the latest blog posts [`f05d18b5`](https://github.com/AlexRogalskiy/java-patterns/commit/f05d18b5) +- Updated with the latest blog posts [`09ce3a92`](https://github.com/AlexRogalskiy/java-patterns/commit/09ce3a92) +- Optimised images with calibre/image-actions [`4d88721a`](https://github.com/AlexRogalskiy/java-patterns/commit/4d88721a) +- Updates on files [`28c6abc6`](https://github.com/AlexRogalskiy/java-patterns/commit/28c6abc6) +- Updated with the latest blog posts [`9edbe17c`](https://github.com/AlexRogalskiy/java-patterns/commit/9edbe17c) +- Updated with the latest blog posts [`6c4c5f15`](https://github.com/AlexRogalskiy/java-patterns/commit/6c4c5f15) +- Updated with the latest blog posts [`3ad74cb7`](https://github.com/AlexRogalskiy/java-patterns/commit/3ad74cb7) +- GitHub traffic [`df9fbd2d`](https://github.com/AlexRogalskiy/java-patterns/commit/df9fbd2d) +- Updated with the latest blog posts [`5877a126`](https://github.com/AlexRogalskiy/java-patterns/commit/5877a126) +- docs: updates on docs page speed [`24cb9b89`](https://github.com/AlexRogalskiy/java-patterns/commit/24cb9b89) +- Updated with the latest blog posts [`7a0369ce`](https://github.com/AlexRogalskiy/java-patterns/commit/7a0369ce) +- Updated with the latest blog posts [`1d775829`](https://github.com/AlexRogalskiy/java-patterns/commit/1d775829) +- docs: updates on docs page speed [`fb0099a7`](https://github.com/AlexRogalskiy/java-patterns/commit/fb0099a7) +- Updated with the latest blog posts [`cb0f04b0`](https://github.com/AlexRogalskiy/java-patterns/commit/cb0f04b0) +- Updated with the latest blog posts [`e61a963b`](https://github.com/AlexRogalskiy/java-patterns/commit/e61a963b) +- Updated with the latest blog posts [`40914c24`](https://github.com/AlexRogalskiy/java-patterns/commit/40914c24) +- Optimised images with calibre/image-actions [`75cee149`](https://github.com/AlexRogalskiy/java-patterns/commit/75cee149) +- Updates on files [`218eeab8`](https://github.com/AlexRogalskiy/java-patterns/commit/218eeab8) +- Updated with the latest blog posts [`1b38f79b`](https://github.com/AlexRogalskiy/java-patterns/commit/1b38f79b) +- Updated with the latest blog posts [`ec970d51`](https://github.com/AlexRogalskiy/java-patterns/commit/ec970d51) +- Updated with the latest blog posts [`a128fd91`](https://github.com/AlexRogalskiy/java-patterns/commit/a128fd91) +- Updated with the latest blog posts [`e4a8c81c`](https://github.com/AlexRogalskiy/java-patterns/commit/e4a8c81c) +- Updated with the latest blog posts [`3d48b491`](https://github.com/AlexRogalskiy/java-patterns/commit/3d48b491) +- GitHub traffic [`2bddf304`](https://github.com/AlexRogalskiy/java-patterns/commit/2bddf304) +- Updated with the latest blog posts [`a5a3dd05`](https://github.com/AlexRogalskiy/java-patterns/commit/a5a3dd05) +- Updated with the latest blog posts [`b13933c6`](https://github.com/AlexRogalskiy/java-patterns/commit/b13933c6) +- Updated with the latest blog posts [`bf52b261`](https://github.com/AlexRogalskiy/java-patterns/commit/bf52b261) +- Updated with the latest blog posts [`3ad5edef`](https://github.com/AlexRogalskiy/java-patterns/commit/3ad5edef) +- Updated with the latest blog posts [`97197882`](https://github.com/AlexRogalskiy/java-patterns/commit/97197882) +- Updated with the latest blog posts [`c94d0b9e`](https://github.com/AlexRogalskiy/java-patterns/commit/c94d0b9e) +- Updated with the latest blog posts [`7c8b46bc`](https://github.com/AlexRogalskiy/java-patterns/commit/7c8b46bc) +- Updated with the latest blog posts [`2493adb3`](https://github.com/AlexRogalskiy/java-patterns/commit/2493adb3) +- Updated with the latest blog posts [`8cf86943`](https://github.com/AlexRogalskiy/java-patterns/commit/8cf86943) +- Updated with the latest blog posts [`5159564b`](https://github.com/AlexRogalskiy/java-patterns/commit/5159564b) +- Updated with the latest blog posts [`a76b1e59`](https://github.com/AlexRogalskiy/java-patterns/commit/a76b1e59) +- Updated with the latest blog posts [`f76f246e`](https://github.com/AlexRogalskiy/java-patterns/commit/f76f246e) +- Updated with the latest blog posts [`c74b914e`](https://github.com/AlexRogalskiy/java-patterns/commit/c74b914e) +- Updated with the latest blog posts [`af1a78a5`](https://github.com/AlexRogalskiy/java-patterns/commit/af1a78a5) +- Updated with the latest blog posts [`881725e4`](https://github.com/AlexRogalskiy/java-patterns/commit/881725e4) +- Updated with the latest blog posts [`d53a6226`](https://github.com/AlexRogalskiy/java-patterns/commit/d53a6226) +- GitHub traffic [`88fa1ccb`](https://github.com/AlexRogalskiy/java-patterns/commit/88fa1ccb) +- Updated with the latest blog posts [`5201d5fc`](https://github.com/AlexRogalskiy/java-patterns/commit/5201d5fc) +- Updated with the latest blog posts [`3d658356`](https://github.com/AlexRogalskiy/java-patterns/commit/3d658356) +- Updated with the latest blog posts [`c5da7cf4`](https://github.com/AlexRogalskiy/java-patterns/commit/c5da7cf4) +- Updated with the latest blog posts [`cb2eb019`](https://github.com/AlexRogalskiy/java-patterns/commit/cb2eb019) +- Updated with the latest blog posts [`3e208f7e`](https://github.com/AlexRogalskiy/java-patterns/commit/3e208f7e) +- Updated with the latest blog posts [`a7556382`](https://github.com/AlexRogalskiy/java-patterns/commit/a7556382) +- Updated with the latest blog posts [`bdf2b7a6`](https://github.com/AlexRogalskiy/java-patterns/commit/bdf2b7a6) +- Updated with the latest blog posts [`39895f8d`](https://github.com/AlexRogalskiy/java-patterns/commit/39895f8d) +- Updated with the latest blog posts [`d5e48751`](https://github.com/AlexRogalskiy/java-patterns/commit/d5e48751) +- Updated with the latest blog posts [`0030d380`](https://github.com/AlexRogalskiy/java-patterns/commit/0030d380) +- Updated with the latest blog posts [`9fd9b495`](https://github.com/AlexRogalskiy/java-patterns/commit/9fd9b495) +- Updated with the latest blog posts [`2ceca700`](https://github.com/AlexRogalskiy/java-patterns/commit/2ceca700) +- Updated with the latest blog posts [`ad2b0026`](https://github.com/AlexRogalskiy/java-patterns/commit/ad2b0026) +- Updated with the latest blog posts [`e9ca7b3f`](https://github.com/AlexRogalskiy/java-patterns/commit/e9ca7b3f) +- Updated with the latest blog posts [`b93934b1`](https://github.com/AlexRogalskiy/java-patterns/commit/b93934b1) +- GitHub traffic [`67fa223d`](https://github.com/AlexRogalskiy/java-patterns/commit/67fa223d) +- Updated with the latest blog posts [`a51a80a1`](https://github.com/AlexRogalskiy/java-patterns/commit/a51a80a1) +- Updates on files [`d35b7696`](https://github.com/AlexRogalskiy/java-patterns/commit/d35b7696) +- Updated with the latest blog posts [`e6f77194`](https://github.com/AlexRogalskiy/java-patterns/commit/e6f77194) +- Updated with the latest blog posts [`b92f5e97`](https://github.com/AlexRogalskiy/java-patterns/commit/b92f5e97) +- Updated with the latest blog posts [`4d28ecbf`](https://github.com/AlexRogalskiy/java-patterns/commit/4d28ecbf) +- Updated with the latest blog posts [`0ab961fb`](https://github.com/AlexRogalskiy/java-patterns/commit/0ab961fb) +- Updated with the latest blog posts [`add25efb`](https://github.com/AlexRogalskiy/java-patterns/commit/add25efb) +- Optimised images with calibre/image-actions [`51d145d6`](https://github.com/AlexRogalskiy/java-patterns/commit/51d145d6) +- Updates on files [`b82b9ec2`](https://github.com/AlexRogalskiy/java-patterns/commit/b82b9ec2) +- Updated with the latest blog posts [`0705cfd2`](https://github.com/AlexRogalskiy/java-patterns/commit/0705cfd2) +- Updated with the latest blog posts [`49712106`](https://github.com/AlexRogalskiy/java-patterns/commit/49712106) +- Updated with the latest blog posts [`3f25df6a`](https://github.com/AlexRogalskiy/java-patterns/commit/3f25df6a) +- Updated with the latest blog posts [`d495c52e`](https://github.com/AlexRogalskiy/java-patterns/commit/d495c52e) +- Updated with the latest blog posts [`acff99b3`](https://github.com/AlexRogalskiy/java-patterns/commit/acff99b3) +- GitHub traffic [`f97b00bf`](https://github.com/AlexRogalskiy/java-patterns/commit/f97b00bf) +- Updated with the latest blog posts [`287b2dbd`](https://github.com/AlexRogalskiy/java-patterns/commit/287b2dbd) +- Updated with the latest blog posts [`a9810992`](https://github.com/AlexRogalskiy/java-patterns/commit/a9810992) +- Updated with the latest blog posts [`296760e4`](https://github.com/AlexRogalskiy/java-patterns/commit/296760e4) +- Updated with the latest blog posts [`c1e3cf61`](https://github.com/AlexRogalskiy/java-patterns/commit/c1e3cf61) +- Updated with the latest blog posts [`a90c4b9e`](https://github.com/AlexRogalskiy/java-patterns/commit/a90c4b9e) +- Updated with the latest blog posts [`3fd7645a`](https://github.com/AlexRogalskiy/java-patterns/commit/3fd7645a) +- Updated with the latest blog posts [`809dba77`](https://github.com/AlexRogalskiy/java-patterns/commit/809dba77) +- Updated with the latest blog posts [`303e9117`](https://github.com/AlexRogalskiy/java-patterns/commit/303e9117) +- Updated with the latest blog posts [`c3e11503`](https://github.com/AlexRogalskiy/java-patterns/commit/c3e11503) +- Updated with the latest blog posts [`053b49f3`](https://github.com/AlexRogalskiy/java-patterns/commit/053b49f3) +- Updated with the latest blog posts [`4bd4885e`](https://github.com/AlexRogalskiy/java-patterns/commit/4bd4885e) +- Updated with the latest blog posts [`49b7a23f`](https://github.com/AlexRogalskiy/java-patterns/commit/49b7a23f) +- Updated with the latest blog posts [`ef8ffb51`](https://github.com/AlexRogalskiy/java-patterns/commit/ef8ffb51) +- Updated with the latest blog posts [`6f2c441a`](https://github.com/AlexRogalskiy/java-patterns/commit/6f2c441a) +- GitHub traffic [`3e7c0c23`](https://github.com/AlexRogalskiy/java-patterns/commit/3e7c0c23) +- Updates on files [`c3325a5d`](https://github.com/AlexRogalskiy/java-patterns/commit/c3325a5d) +- Updated with the latest blog posts [`b1fe7549`](https://github.com/AlexRogalskiy/java-patterns/commit/b1fe7549) +- Updates on files [`2c9451b1`](https://github.com/AlexRogalskiy/java-patterns/commit/2c9451b1) +- Updated with the latest blog posts [`606ddab1`](https://github.com/AlexRogalskiy/java-patterns/commit/606ddab1) +- Updated with the latest blog posts [`5e4d0702`](https://github.com/AlexRogalskiy/java-patterns/commit/5e4d0702) +- Updated with the latest blog posts [`c0effae2`](https://github.com/AlexRogalskiy/java-patterns/commit/c0effae2) +- Updated with the latest blog posts [`6ad4b745`](https://github.com/AlexRogalskiy/java-patterns/commit/6ad4b745) +- Optimised images with calibre/image-actions [`fa4797c8`](https://github.com/AlexRogalskiy/java-patterns/commit/fa4797c8) +- Updates on files [`6182babd`](https://github.com/AlexRogalskiy/java-patterns/commit/6182babd) +- Updated with the latest blog posts [`d39e2c42`](https://github.com/AlexRogalskiy/java-patterns/commit/d39e2c42) +- Updated with the latest blog posts [`61d3d682`](https://github.com/AlexRogalskiy/java-patterns/commit/61d3d682) +- Updated with the latest blog posts [`660595b4`](https://github.com/AlexRogalskiy/java-patterns/commit/660595b4) +- Updated with the latest blog posts [`308284bd`](https://github.com/AlexRogalskiy/java-patterns/commit/308284bd) +- Updated with the latest blog posts [`ec698333`](https://github.com/AlexRogalskiy/java-patterns/commit/ec698333) +- Updated with the latest blog posts [`1737c97e`](https://github.com/AlexRogalskiy/java-patterns/commit/1737c97e) +- Updated with the latest blog posts [`f103948c`](https://github.com/AlexRogalskiy/java-patterns/commit/f103948c) +- GitHub traffic [`9165fe9f`](https://github.com/AlexRogalskiy/java-patterns/commit/9165fe9f) +- Updated with the latest blog posts [`91cd6350`](https://github.com/AlexRogalskiy/java-patterns/commit/91cd6350) +- Updated with the latest blog posts [`9652fb21`](https://github.com/AlexRogalskiy/java-patterns/commit/9652fb21) +- Updated with the latest blog posts [`fe3957b8`](https://github.com/AlexRogalskiy/java-patterns/commit/fe3957b8) +- Updated with the latest blog posts [`3fa62d7d`](https://github.com/AlexRogalskiy/java-patterns/commit/3fa62d7d) +- Updated with the latest blog posts [`5f35fc18`](https://github.com/AlexRogalskiy/java-patterns/commit/5f35fc18) +- Optimised images with calibre/image-actions [`86808a01`](https://github.com/AlexRogalskiy/java-patterns/commit/86808a01) +- Updates on files [`754ba2d2`](https://github.com/AlexRogalskiy/java-patterns/commit/754ba2d2) +- Updated with the latest blog posts [`be7b47f9`](https://github.com/AlexRogalskiy/java-patterns/commit/be7b47f9) +- Updated with the latest blog posts [`ed324864`](https://github.com/AlexRogalskiy/java-patterns/commit/ed324864) +- Updated with the latest blog posts [`8d5759a6`](https://github.com/AlexRogalskiy/java-patterns/commit/8d5759a6) +- Updated with the latest blog posts [`81671e66`](https://github.com/AlexRogalskiy/java-patterns/commit/81671e66) +- Updated with the latest blog posts [`ceb5a4bf`](https://github.com/AlexRogalskiy/java-patterns/commit/ceb5a4bf) +- Updated with the latest blog posts [`ecdf4e4d`](https://github.com/AlexRogalskiy/java-patterns/commit/ecdf4e4d) +- Updated with the latest blog posts [`56c8bd18`](https://github.com/AlexRogalskiy/java-patterns/commit/56c8bd18) +- Updated with the latest blog posts [`7f513f87`](https://github.com/AlexRogalskiy/java-patterns/commit/7f513f87) +- GitHub traffic [`d17f5997`](https://github.com/AlexRogalskiy/java-patterns/commit/d17f5997) +- Updated with the latest blog posts [`f48dce75`](https://github.com/AlexRogalskiy/java-patterns/commit/f48dce75) +- Updated with the latest blog posts [`c66fe676`](https://github.com/AlexRogalskiy/java-patterns/commit/c66fe676) +- Updated with the latest blog posts [`f78a832c`](https://github.com/AlexRogalskiy/java-patterns/commit/f78a832c) +- Updated with the latest blog posts [`98910fc4`](https://github.com/AlexRogalskiy/java-patterns/commit/98910fc4) +- Updated with the latest blog posts [`623c79c7`](https://github.com/AlexRogalskiy/java-patterns/commit/623c79c7) +- Optimised images with calibre/image-actions [`c2511105`](https://github.com/AlexRogalskiy/java-patterns/commit/c2511105) +- Updates on files [`4f554c40`](https://github.com/AlexRogalskiy/java-patterns/commit/4f554c40) +- Updated with the latest blog posts [`c9b27df2`](https://github.com/AlexRogalskiy/java-patterns/commit/c9b27df2) +- Updated with the latest blog posts [`9cbd241c`](https://github.com/AlexRogalskiy/java-patterns/commit/9cbd241c) +- Updated with the latest blog posts [`d0beaad5`](https://github.com/AlexRogalskiy/java-patterns/commit/d0beaad5) +- Updated with the latest blog posts [`6e5120e4`](https://github.com/AlexRogalskiy/java-patterns/commit/6e5120e4) +- Updated with the latest blog posts [`64f260d1`](https://github.com/AlexRogalskiy/java-patterns/commit/64f260d1) +- Updated with the latest blog posts [`b02c5ed3`](https://github.com/AlexRogalskiy/java-patterns/commit/b02c5ed3) +- Updated with the latest blog posts [`320b8b8d`](https://github.com/AlexRogalskiy/java-patterns/commit/320b8b8d) +- Updated with the latest blog posts [`e6ab9cda`](https://github.com/AlexRogalskiy/java-patterns/commit/e6ab9cda) +- Updated with the latest blog posts [`a330ffaf`](https://github.com/AlexRogalskiy/java-patterns/commit/a330ffaf) +- GitHub traffic [`98cbc1b3`](https://github.com/AlexRogalskiy/java-patterns/commit/98cbc1b3) +- Updated with the latest blog posts [`84e0f9cb`](https://github.com/AlexRogalskiy/java-patterns/commit/84e0f9cb) +- Updated with the latest blog posts [`8b41c809`](https://github.com/AlexRogalskiy/java-patterns/commit/8b41c809) +- Updated with the latest blog posts [`4f84d00b`](https://github.com/AlexRogalskiy/java-patterns/commit/4f84d00b) +- Updated with the latest blog posts [`26c59daf`](https://github.com/AlexRogalskiy/java-patterns/commit/26c59daf) +- Updated with the latest blog posts [`d55b9842`](https://github.com/AlexRogalskiy/java-patterns/commit/d55b9842) +- Updated with the latest blog posts [`463c645e`](https://github.com/AlexRogalskiy/java-patterns/commit/463c645e) +- Updated with the latest blog posts [`4acd2f8c`](https://github.com/AlexRogalskiy/java-patterns/commit/4acd2f8c) +- Updated with the latest blog posts [`2727ac0d`](https://github.com/AlexRogalskiy/java-patterns/commit/2727ac0d) +- Updated with the latest blog posts [`2c7f28b3`](https://github.com/AlexRogalskiy/java-patterns/commit/2c7f28b3) +- docs: updates on docs page speed [`e2c92935`](https://github.com/AlexRogalskiy/java-patterns/commit/e2c92935) +- Updated with the latest blog posts [`c7c6d3c5`](https://github.com/AlexRogalskiy/java-patterns/commit/c7c6d3c5) +- Updated with the latest blog posts [`26ece516`](https://github.com/AlexRogalskiy/java-patterns/commit/26ece516) +- docs: updates on docs page speed [`75e41b4e`](https://github.com/AlexRogalskiy/java-patterns/commit/75e41b4e) +- Updated with the latest blog posts [`5a9da121`](https://github.com/AlexRogalskiy/java-patterns/commit/5a9da121) +- Updated with the latest blog posts [`5b6432d4`](https://github.com/AlexRogalskiy/java-patterns/commit/5b6432d4) +- Updated with the latest blog posts [`66678f38`](https://github.com/AlexRogalskiy/java-patterns/commit/66678f38) +- GitHub traffic [`b99de1ab`](https://github.com/AlexRogalskiy/java-patterns/commit/b99de1ab) +- Updated with the latest blog posts [`6296fa1b`](https://github.com/AlexRogalskiy/java-patterns/commit/6296fa1b) +- Updated with the latest blog posts [`de506ea5`](https://github.com/AlexRogalskiy/java-patterns/commit/de506ea5) +- Updated with the latest blog posts [`2837a363`](https://github.com/AlexRogalskiy/java-patterns/commit/2837a363) +- Updated with the latest blog posts [`bf8ee018`](https://github.com/AlexRogalskiy/java-patterns/commit/bf8ee018) +- Updated with the latest blog posts [`8de4bbf5`](https://github.com/AlexRogalskiy/java-patterns/commit/8de4bbf5) +- Updated with the latest blog posts [`56b9e618`](https://github.com/AlexRogalskiy/java-patterns/commit/56b9e618) +- Updated with the latest blog posts [`820b2d68`](https://github.com/AlexRogalskiy/java-patterns/commit/820b2d68) +- Updated with the latest blog posts [`144231d7`](https://github.com/AlexRogalskiy/java-patterns/commit/144231d7) +- Updated with the latest blog posts [`8ebe2495`](https://github.com/AlexRogalskiy/java-patterns/commit/8ebe2495) +- Updated with the latest blog posts [`52716814`](https://github.com/AlexRogalskiy/java-patterns/commit/52716814) +- Updated with the latest blog posts [`5908e67d`](https://github.com/AlexRogalskiy/java-patterns/commit/5908e67d) +- Updated with the latest blog posts [`ee8cac97`](https://github.com/AlexRogalskiy/java-patterns/commit/ee8cac97) +- Updated with the latest blog posts [`3dbf3d00`](https://github.com/AlexRogalskiy/java-patterns/commit/3dbf3d00) +- Updated with the latest blog posts [`243d19d8`](https://github.com/AlexRogalskiy/java-patterns/commit/243d19d8) +- GitHub traffic [`6e231c57`](https://github.com/AlexRogalskiy/java-patterns/commit/6e231c57) +- Updated with the latest blog posts [`5c01a6a0`](https://github.com/AlexRogalskiy/java-patterns/commit/5c01a6a0) +- Updated with the latest blog posts [`f8069e59`](https://github.com/AlexRogalskiy/java-patterns/commit/f8069e59) +- Optimised images with calibre/image-actions [`42215e08`](https://github.com/AlexRogalskiy/java-patterns/commit/42215e08) +- Updates on files [`850df196`](https://github.com/AlexRogalskiy/java-patterns/commit/850df196) +- Updated with the latest blog posts [`10c9a3e5`](https://github.com/AlexRogalskiy/java-patterns/commit/10c9a3e5) +- Updated with the latest blog posts [`046c158c`](https://github.com/AlexRogalskiy/java-patterns/commit/046c158c) +- Updated with the latest blog posts [`c49be9ce`](https://github.com/AlexRogalskiy/java-patterns/commit/c49be9ce) +- Updated with the latest blog posts [`3cfd226e`](https://github.com/AlexRogalskiy/java-patterns/commit/3cfd226e) +- Updated with the latest blog posts [`0d4980c1`](https://github.com/AlexRogalskiy/java-patterns/commit/0d4980c1) +- Updated with the latest blog posts [`497bb596`](https://github.com/AlexRogalskiy/java-patterns/commit/497bb596) +- Updated with the latest blog posts [`c333ecd7`](https://github.com/AlexRogalskiy/java-patterns/commit/c333ecd7) +- Updated with the latest blog posts [`06a6f88a`](https://github.com/AlexRogalskiy/java-patterns/commit/06a6f88a) +- Updated with the latest blog posts [`5c730990`](https://github.com/AlexRogalskiy/java-patterns/commit/5c730990) +- Updated with the latest blog posts [`0063d3f3`](https://github.com/AlexRogalskiy/java-patterns/commit/0063d3f3) +- Updated with the latest blog posts [`38384116`](https://github.com/AlexRogalskiy/java-patterns/commit/38384116) +- Updated with the latest blog posts [`12b06652`](https://github.com/AlexRogalskiy/java-patterns/commit/12b06652) +- Updated with the latest blog posts [`034dd280`](https://github.com/AlexRogalskiy/java-patterns/commit/034dd280) +- Updated with the latest blog posts [`2211d044`](https://github.com/AlexRogalskiy/java-patterns/commit/2211d044) +- GitHub traffic [`ba39410a`](https://github.com/AlexRogalskiy/java-patterns/commit/ba39410a) +- Updated with the latest blog posts [`8d38278a`](https://github.com/AlexRogalskiy/java-patterns/commit/8d38278a) +- Updated with the latest blog posts [`41ccb19a`](https://github.com/AlexRogalskiy/java-patterns/commit/41ccb19a) +- Updated with the latest blog posts [`152cdaa8`](https://github.com/AlexRogalskiy/java-patterns/commit/152cdaa8) +- Updated with the latest blog posts [`f77146e4`](https://github.com/AlexRogalskiy/java-patterns/commit/f77146e4) +- Updated with the latest blog posts [`7a4a3625`](https://github.com/AlexRogalskiy/java-patterns/commit/7a4a3625) +- Updated with the latest blog posts [`8bd6f287`](https://github.com/AlexRogalskiy/java-patterns/commit/8bd6f287) +- Updated with the latest blog posts [`43fe69ef`](https://github.com/AlexRogalskiy/java-patterns/commit/43fe69ef) +- Updated with the latest blog posts [`61d14dfc`](https://github.com/AlexRogalskiy/java-patterns/commit/61d14dfc) +- Updated with the latest blog posts [`13b034c0`](https://github.com/AlexRogalskiy/java-patterns/commit/13b034c0) +- Updated with the latest blog posts [`89a5ceb5`](https://github.com/AlexRogalskiy/java-patterns/commit/89a5ceb5) +- Updated with the latest blog posts [`ca2e783b`](https://github.com/AlexRogalskiy/java-patterns/commit/ca2e783b) +- Updated with the latest blog posts [`bd6aaa15`](https://github.com/AlexRogalskiy/java-patterns/commit/bd6aaa15) +- Updated with the latest blog posts [`e8725c3a`](https://github.com/AlexRogalskiy/java-patterns/commit/e8725c3a) +- Updated with the latest blog posts [`47f760ef`](https://github.com/AlexRogalskiy/java-patterns/commit/47f760ef) +- GitHub traffic [`a6f1fef6`](https://github.com/AlexRogalskiy/java-patterns/commit/a6f1fef6) +- Updated with the latest blog posts [`ac669403`](https://github.com/AlexRogalskiy/java-patterns/commit/ac669403) +- Updated with the latest blog posts [`627806df`](https://github.com/AlexRogalskiy/java-patterns/commit/627806df) +- Updated with the latest blog posts [`06a36731`](https://github.com/AlexRogalskiy/java-patterns/commit/06a36731) +- Updated with the latest blog posts [`cccb1ec6`](https://github.com/AlexRogalskiy/java-patterns/commit/cccb1ec6) +- Updated with the latest blog posts [`a16446e5`](https://github.com/AlexRogalskiy/java-patterns/commit/a16446e5) +- Updated with the latest blog posts [`8dde9daa`](https://github.com/AlexRogalskiy/java-patterns/commit/8dde9daa) +- Updated with the latest blog posts [`5f13d266`](https://github.com/AlexRogalskiy/java-patterns/commit/5f13d266) +- Updated with the latest blog posts [`2bc9582c`](https://github.com/AlexRogalskiy/java-patterns/commit/2bc9582c) +- Updated with the latest blog posts [`8fb62cd9`](https://github.com/AlexRogalskiy/java-patterns/commit/8fb62cd9) +- Optimised images with calibre/image-actions [`bff8ec82`](https://github.com/AlexRogalskiy/java-patterns/commit/bff8ec82) +- Updates on files [`c92f3ce8`](https://github.com/AlexRogalskiy/java-patterns/commit/c92f3ce8) +- Updated with the latest blog posts [`34fd56c4`](https://github.com/AlexRogalskiy/java-patterns/commit/34fd56c4) +- Updated with the latest blog posts [`c28142b7`](https://github.com/AlexRogalskiy/java-patterns/commit/c28142b7) +- Updated with the latest blog posts [`b0d76b2a`](https://github.com/AlexRogalskiy/java-patterns/commit/b0d76b2a) +- Updated with the latest blog posts [`205a36f3`](https://github.com/AlexRogalskiy/java-patterns/commit/205a36f3) +- Updated with the latest blog posts [`bd8cdca3`](https://github.com/AlexRogalskiy/java-patterns/commit/bd8cdca3) +- Updated with the latest blog posts [`2eaaf545`](https://github.com/AlexRogalskiy/java-patterns/commit/2eaaf545) +- Updated with the latest blog posts [`307e2616`](https://github.com/AlexRogalskiy/java-patterns/commit/307e2616) +- Updated with the latest blog posts [`5c1273f7`](https://github.com/AlexRogalskiy/java-patterns/commit/5c1273f7) +- GitHub traffic [`06861b0a`](https://github.com/AlexRogalskiy/java-patterns/commit/06861b0a) +- Updates on files [`6779e8b5`](https://github.com/AlexRogalskiy/java-patterns/commit/6779e8b5) +- Updated with the latest blog posts [`8d8702fd`](https://github.com/AlexRogalskiy/java-patterns/commit/8d8702fd) +- Updated with the latest blog posts [`9e41d4de`](https://github.com/AlexRogalskiy/java-patterns/commit/9e41d4de) +- Updated with the latest blog posts [`1cf268e1`](https://github.com/AlexRogalskiy/java-patterns/commit/1cf268e1) +- Updates on filez [`b70d0693`](https://github.com/AlexRogalskiy/java-patterns/commit/b70d0693) +- initial commit [`d87fd1f0`](https://github.com/AlexRogalskiy/java-patterns/commit/d87fd1f0) +- Updates on sandbox config [`b44b8a68`](https://github.com/AlexRogalskiy/java-patterns/commit/b44b8a68) +- Create /.zappr.yaml [`d860b391`](https://github.com/AlexRogalskiy/java-patterns/commit/d860b391) +- Updated with the latest blog posts [`6ce0856b`](https://github.com/AlexRogalskiy/java-patterns/commit/6ce0856b) +- Updated with the latest blog posts [`456a8f5c`](https://github.com/AlexRogalskiy/java-patterns/commit/456a8f5c) +- Updated with the latest blog posts [`607b463b`](https://github.com/AlexRogalskiy/java-patterns/commit/607b463b) +- Updated with the latest blog posts [`2598ff02`](https://github.com/AlexRogalskiy/java-patterns/commit/2598ff02) +- Updated with the latest blog posts [`edf45adf`](https://github.com/AlexRogalskiy/java-patterns/commit/edf45adf) +- Optimised images with calibre/image-actions [`3e09afc0`](https://github.com/AlexRogalskiy/java-patterns/commit/3e09afc0) +- Updates on files [`145e28c7`](https://github.com/AlexRogalskiy/java-patterns/commit/145e28c7) +- Updated with the latest blog posts [`31492606`](https://github.com/AlexRogalskiy/java-patterns/commit/31492606) +- Updated with the latest blog posts [`de9b72f3`](https://github.com/AlexRogalskiy/java-patterns/commit/de9b72f3) +- Updated with the latest blog posts [`ad07ee69`](https://github.com/AlexRogalskiy/java-patterns/commit/ad07ee69) +- Updated with the latest blog posts [`8df7536e`](https://github.com/AlexRogalskiy/java-patterns/commit/8df7536e) +- Updated with the latest blog posts [`0aa67ceb`](https://github.com/AlexRogalskiy/java-patterns/commit/0aa67ceb) +- Updated with the latest blog posts [`29ed951a`](https://github.com/AlexRogalskiy/java-patterns/commit/29ed951a) +- Updated with the latest blog posts [`87c0fea4`](https://github.com/AlexRogalskiy/java-patterns/commit/87c0fea4) +- Updated with the latest blog posts [`fa4efce5`](https://github.com/AlexRogalskiy/java-patterns/commit/fa4efce5) +- Updated with the latest blog posts [`9f022bd1`](https://github.com/AlexRogalskiy/java-patterns/commit/9f022bd1) +- Updated with the latest blog posts [`cdcbeace`](https://github.com/AlexRogalskiy/java-patterns/commit/cdcbeace) +- GitHub traffic [`74f5cd9a`](https://github.com/AlexRogalskiy/java-patterns/commit/74f5cd9a) +- Updated with the latest blog posts [`fe0a89de`](https://github.com/AlexRogalskiy/java-patterns/commit/fe0a89de) +- Updated with the latest blog posts [`fcc55e13`](https://github.com/AlexRogalskiy/java-patterns/commit/fcc55e13) +- Updated with the latest blog posts [`6cab9e9f`](https://github.com/AlexRogalskiy/java-patterns/commit/6cab9e9f) +- Updated with the latest blog posts [`45bc862b`](https://github.com/AlexRogalskiy/java-patterns/commit/45bc862b) +- Updated with the latest blog posts [`bad16ba2`](https://github.com/AlexRogalskiy/java-patterns/commit/bad16ba2) +- Updated with the latest blog posts [`c498515e`](https://github.com/AlexRogalskiy/java-patterns/commit/c498515e) +- Updated with the latest blog posts [`4a13806e`](https://github.com/AlexRogalskiy/java-patterns/commit/4a13806e) +- Updated with the latest blog posts [`c0964ef2`](https://github.com/AlexRogalskiy/java-patterns/commit/c0964ef2) +- Updated with the latest blog posts [`339813ca`](https://github.com/AlexRogalskiy/java-patterns/commit/339813ca) +- Updated with the latest blog posts [`053fbcd7`](https://github.com/AlexRogalskiy/java-patterns/commit/053fbcd7) +- Updated with the latest blog posts [`b805192f`](https://github.com/AlexRogalskiy/java-patterns/commit/b805192f) +- Updated with the latest blog posts [`be0f12dc`](https://github.com/AlexRogalskiy/java-patterns/commit/be0f12dc) +- Updated with the latest blog posts [`e86eba26`](https://github.com/AlexRogalskiy/java-patterns/commit/e86eba26) +- Updated with the latest blog posts [`a3f7fe39`](https://github.com/AlexRogalskiy/java-patterns/commit/a3f7fe39) +- Updated with the latest blog posts [`18930ddf`](https://github.com/AlexRogalskiy/java-patterns/commit/18930ddf) +- Updated with the latest blog posts [`c1ae2569`](https://github.com/AlexRogalskiy/java-patterns/commit/c1ae2569) +- GitHub traffic [`b7563e50`](https://github.com/AlexRogalskiy/java-patterns/commit/b7563e50) +- Updated with the latest blog posts [`90ab1716`](https://github.com/AlexRogalskiy/java-patterns/commit/90ab1716) +- Updated with the latest blog posts [`0c6424ce`](https://github.com/AlexRogalskiy/java-patterns/commit/0c6424ce) +- Updated with the latest blog posts [`79790327`](https://github.com/AlexRogalskiy/java-patterns/commit/79790327) +- Updated with the latest blog posts [`f264db6f`](https://github.com/AlexRogalskiy/java-patterns/commit/f264db6f) +- Updated with the latest blog posts [`e256c17f`](https://github.com/AlexRogalskiy/java-patterns/commit/e256c17f) +- Updated with the latest blog posts [`82a7e2e4`](https://github.com/AlexRogalskiy/java-patterns/commit/82a7e2e4) +- Updated with the latest blog posts [`2d572055`](https://github.com/AlexRogalskiy/java-patterns/commit/2d572055) +- Updated with the latest blog posts [`34ad81d4`](https://github.com/AlexRogalskiy/java-patterns/commit/34ad81d4) +- Updated with the latest blog posts [`2126013d`](https://github.com/AlexRogalskiy/java-patterns/commit/2126013d) +- Updated with the latest blog posts [`718137ab`](https://github.com/AlexRogalskiy/java-patterns/commit/718137ab) +- GitHub traffic [`a3ddf95e`](https://github.com/AlexRogalskiy/java-patterns/commit/a3ddf95e) +- Updated with the latest blog posts [`243f792e`](https://github.com/AlexRogalskiy/java-patterns/commit/243f792e) +- Updated with the latest blog posts [`57041cf8`](https://github.com/AlexRogalskiy/java-patterns/commit/57041cf8) +- Updated with the latest blog posts [`168a12a2`](https://github.com/AlexRogalskiy/java-patterns/commit/168a12a2) +- Updated with the latest blog posts [`75c61a71`](https://github.com/AlexRogalskiy/java-patterns/commit/75c61a71) +- Updated with the latest blog posts [`70f8a747`](https://github.com/AlexRogalskiy/java-patterns/commit/70f8a747) +- Updated with the latest blog posts [`ec7fee8d`](https://github.com/AlexRogalskiy/java-patterns/commit/ec7fee8d) +- Updated with the latest blog posts [`477b6314`](https://github.com/AlexRogalskiy/java-patterns/commit/477b6314) +- Updated with the latest blog posts [`629eed39`](https://github.com/AlexRogalskiy/java-patterns/commit/629eed39) +- Updated with the latest blog posts [`4f430616`](https://github.com/AlexRogalskiy/java-patterns/commit/4f430616) +- Updated with the latest blog posts [`320c2dd4`](https://github.com/AlexRogalskiy/java-patterns/commit/320c2dd4) +- Updated with the latest blog posts [`240e3f5e`](https://github.com/AlexRogalskiy/java-patterns/commit/240e3f5e) +- Updated with the latest blog posts [`2e234f4e`](https://github.com/AlexRogalskiy/java-patterns/commit/2e234f4e) +- Updated with the latest blog posts [`3a81d498`](https://github.com/AlexRogalskiy/java-patterns/commit/3a81d498) +- Updated with the latest blog posts [`9f603c9e`](https://github.com/AlexRogalskiy/java-patterns/commit/9f603c9e) +- Updated with the latest blog posts [`e54cc60f`](https://github.com/AlexRogalskiy/java-patterns/commit/e54cc60f) +- Optimised images with calibre/image-actions [`4246cbed`](https://github.com/AlexRogalskiy/java-patterns/commit/4246cbed) +- Updates on files [`8ad15ac0`](https://github.com/AlexRogalskiy/java-patterns/commit/8ad15ac0) +- Updated with the latest blog posts [`3f8a20f1`](https://github.com/AlexRogalskiy/java-patterns/commit/3f8a20f1) +- GitHub traffic [`b8ec8764`](https://github.com/AlexRogalskiy/java-patterns/commit/b8ec8764) +- Updated with the latest blog posts [`3191902d`](https://github.com/AlexRogalskiy/java-patterns/commit/3191902d) +- Updated with the latest blog posts [`01a6275d`](https://github.com/AlexRogalskiy/java-patterns/commit/01a6275d) +- Updated with the latest blog posts [`1976f7bf`](https://github.com/AlexRogalskiy/java-patterns/commit/1976f7bf) +- Updated with the latest blog posts [`c98a85f2`](https://github.com/AlexRogalskiy/java-patterns/commit/c98a85f2) +- Updated with the latest blog posts [`a44e8edf`](https://github.com/AlexRogalskiy/java-patterns/commit/a44e8edf) +- Updated with the latest blog posts [`53111467`](https://github.com/AlexRogalskiy/java-patterns/commit/53111467) +- Updated with the latest blog posts [`057005a8`](https://github.com/AlexRogalskiy/java-patterns/commit/057005a8) +- Updated with the latest blog posts [`a9895e8c`](https://github.com/AlexRogalskiy/java-patterns/commit/a9895e8c) +- Updated with the latest blog posts [`b428e362`](https://github.com/AlexRogalskiy/java-patterns/commit/b428e362) +- Updated with the latest blog posts [`30f34e71`](https://github.com/AlexRogalskiy/java-patterns/commit/30f34e71) +- Updated with the latest blog posts [`83a4b3b8`](https://github.com/AlexRogalskiy/java-patterns/commit/83a4b3b8) +- Updated with the latest blog posts [`1482a58a`](https://github.com/AlexRogalskiy/java-patterns/commit/1482a58a) +- Updated with the latest blog posts [`bbea6a74`](https://github.com/AlexRogalskiy/java-patterns/commit/bbea6a74) +- Updated with the latest blog posts [`1128494c`](https://github.com/AlexRogalskiy/java-patterns/commit/1128494c) +- Updated with the latest blog posts [`2f90a402`](https://github.com/AlexRogalskiy/java-patterns/commit/2f90a402) +- Updated with the latest blog posts [`74e0b2dd`](https://github.com/AlexRogalskiy/java-patterns/commit/74e0b2dd) +- Updated with the latest blog posts [`2d976cea`](https://github.com/AlexRogalskiy/java-patterns/commit/2d976cea) +- Updated with the latest blog posts [`bdde6136`](https://github.com/AlexRogalskiy/java-patterns/commit/bdde6136) +- Updated with the latest blog posts [`b8ef75d6`](https://github.com/AlexRogalskiy/java-patterns/commit/b8ef75d6) +- docs: updates on docs page speed [`e3847d63`](https://github.com/AlexRogalskiy/java-patterns/commit/e3847d63) +- GitHub traffic [`b5eb95d1`](https://github.com/AlexRogalskiy/java-patterns/commit/b5eb95d1) +- Updated with the latest blog posts [`b4fb4794`](https://github.com/AlexRogalskiy/java-patterns/commit/b4fb4794) +- docs: updates on docs page speed [`b563e26d`](https://github.com/AlexRogalskiy/java-patterns/commit/b563e26d) +- Updates on files [`faad9e13`](https://github.com/AlexRogalskiy/java-patterns/commit/faad9e13) +- Updates on files [`3672c4b8`](https://github.com/AlexRogalskiy/java-patterns/commit/3672c4b8) +- Updated with the latest blog posts [`9c7331df`](https://github.com/AlexRogalskiy/java-patterns/commit/9c7331df) +- Updated with the latest blog posts [`ea5f7fbd`](https://github.com/AlexRogalskiy/java-patterns/commit/ea5f7fbd) +- Updated with the latest blog posts [`52d3be20`](https://github.com/AlexRogalskiy/java-patterns/commit/52d3be20) +- docs: updates on docs page speed [`1da019ec`](https://github.com/AlexRogalskiy/java-patterns/commit/1da019ec) +- Updated with the latest blog posts [`3b8c3f3d`](https://github.com/AlexRogalskiy/java-patterns/commit/3b8c3f3d) +- Updated with the latest blog posts [`291768b5`](https://github.com/AlexRogalskiy/java-patterns/commit/291768b5) +- docs: updates on docs page speed [`c204d3ee`](https://github.com/AlexRogalskiy/java-patterns/commit/c204d3ee) +- Updated with the latest blog posts [`78961adc`](https://github.com/AlexRogalskiy/java-patterns/commit/78961adc) +- Updated with the latest blog posts [`23b98826`](https://github.com/AlexRogalskiy/java-patterns/commit/23b98826) +- docs: updates on docs page speed [`0bcd75be`](https://github.com/AlexRogalskiy/java-patterns/commit/0bcd75be) +- Optimised images with calibre/image-actions [`e3174d3e`](https://github.com/AlexRogalskiy/java-patterns/commit/e3174d3e) +- Updates on files [`2ee241ac`](https://github.com/AlexRogalskiy/java-patterns/commit/2ee241ac) +- Updated with the latest blog posts [`19671b6e`](https://github.com/AlexRogalskiy/java-patterns/commit/19671b6e) +- Updated with the latest blog posts [`1871ca30`](https://github.com/AlexRogalskiy/java-patterns/commit/1871ca30) +- Updated with the latest blog posts [`f374e589`](https://github.com/AlexRogalskiy/java-patterns/commit/f374e589) +- docs: updates on docs page speed [`69c4f43c`](https://github.com/AlexRogalskiy/java-patterns/commit/69c4f43c) +- Updated with the latest blog posts [`b6e54757`](https://github.com/AlexRogalskiy/java-patterns/commit/b6e54757) +- Updated with the latest blog posts [`1db54d13`](https://github.com/AlexRogalskiy/java-patterns/commit/1db54d13) +- docs: updates on docs page speed [`1bcabdba`](https://github.com/AlexRogalskiy/java-patterns/commit/1bcabdba) +- Updated with the latest blog posts [`13076e84`](https://github.com/AlexRogalskiy/java-patterns/commit/13076e84) +- docs: updates on docs page speed [`5baab865`](https://github.com/AlexRogalskiy/java-patterns/commit/5baab865) +- GitHub traffic [`952eb99d`](https://github.com/AlexRogalskiy/java-patterns/commit/952eb99d) +- Updated with the latest blog posts [`f969c6a8`](https://github.com/AlexRogalskiy/java-patterns/commit/f969c6a8) +- Updated with the latest blog posts [`5279a021`](https://github.com/AlexRogalskiy/java-patterns/commit/5279a021) +- Updated with the latest blog posts [`a22e6b9c`](https://github.com/AlexRogalskiy/java-patterns/commit/a22e6b9c) +- docs: updates on docs page speed [`993af68a`](https://github.com/AlexRogalskiy/java-patterns/commit/993af68a) +- Updated with the latest blog posts [`dedfb5cc`](https://github.com/AlexRogalskiy/java-patterns/commit/dedfb5cc) +- Updated with the latest blog posts [`fe92f5a8`](https://github.com/AlexRogalskiy/java-patterns/commit/fe92f5a8) +- docs: updates on docs page speed [`2ed00c4d`](https://github.com/AlexRogalskiy/java-patterns/commit/2ed00c4d) +- Updates on files [`b771837a`](https://github.com/AlexRogalskiy/java-patterns/commit/b771837a) +- Updated with the latest blog posts [`35ad7a67`](https://github.com/AlexRogalskiy/java-patterns/commit/35ad7a67) +- Updated with the latest blog posts [`66af4235`](https://github.com/AlexRogalskiy/java-patterns/commit/66af4235) +- Updated with the latest blog posts [`1ebd1ef4`](https://github.com/AlexRogalskiy/java-patterns/commit/1ebd1ef4) +- docs: updates on docs page speed [`530df492`](https://github.com/AlexRogalskiy/java-patterns/commit/530df492) +- Updated with the latest blog posts [`82d33d26`](https://github.com/AlexRogalskiy/java-patterns/commit/82d33d26) +- Updated with the latest blog posts [`790fb168`](https://github.com/AlexRogalskiy/java-patterns/commit/790fb168) +- docs: updates on docs page speed [`d8b1163c`](https://github.com/AlexRogalskiy/java-patterns/commit/d8b1163c) +- Updated with the latest blog posts [`693474fa`](https://github.com/AlexRogalskiy/java-patterns/commit/693474fa) +- Updated with the latest blog posts [`58658f6d`](https://github.com/AlexRogalskiy/java-patterns/commit/58658f6d) +- Updated with the latest blog posts [`57184292`](https://github.com/AlexRogalskiy/java-patterns/commit/57184292) +- docs: updates on docs page speed [`a162ceb6`](https://github.com/AlexRogalskiy/java-patterns/commit/a162ceb6) +- Optimised images with calibre/image-actions [`6f19bfc6`](https://github.com/AlexRogalskiy/java-patterns/commit/6f19bfc6) +- Updates on files [`e16d0088`](https://github.com/AlexRogalskiy/java-patterns/commit/e16d0088) +- Updated with the latest blog posts [`6ca1394a`](https://github.com/AlexRogalskiy/java-patterns/commit/6ca1394a) +- Updated with the latest blog posts [`abd1f726`](https://github.com/AlexRogalskiy/java-patterns/commit/abd1f726) +- docs: updates on docs page speed [`2e706f2f`](https://github.com/AlexRogalskiy/java-patterns/commit/2e706f2f) +- Updated with the latest blog posts [`29a1992d`](https://github.com/AlexRogalskiy/java-patterns/commit/29a1992d) +- Updated with the latest blog posts [`6d046ca0`](https://github.com/AlexRogalskiy/java-patterns/commit/6d046ca0) +- Updated with the latest blog posts [`c5f9db16`](https://github.com/AlexRogalskiy/java-patterns/commit/c5f9db16) +- Updated with the latest blog posts [`bdaf89ba`](https://github.com/AlexRogalskiy/java-patterns/commit/bdaf89ba) +- Updated with the latest blog posts [`cc160a3c`](https://github.com/AlexRogalskiy/java-patterns/commit/cc160a3c) +- Updated with the latest blog posts [`0c029931`](https://github.com/AlexRogalskiy/java-patterns/commit/0c029931) +- Updated with the latest blog posts [`fee08dcf`](https://github.com/AlexRogalskiy/java-patterns/commit/fee08dcf) +- Updated with the latest blog posts [`cc0d2ec8`](https://github.com/AlexRogalskiy/java-patterns/commit/cc0d2ec8) +- Updated with the latest blog posts [`c9edece2`](https://github.com/AlexRogalskiy/java-patterns/commit/c9edece2) +- Updated with the latest blog posts [`b86d78a5`](https://github.com/AlexRogalskiy/java-patterns/commit/b86d78a5) +- docs: updates on docs page speed [`264a8178`](https://github.com/AlexRogalskiy/java-patterns/commit/264a8178) +- GitHub traffic [`1b04c00b`](https://github.com/AlexRogalskiy/java-patterns/commit/1b04c00b) +- Auto update markdown TOC [`351fd930`](https://github.com/AlexRogalskiy/java-patterns/commit/351fd930) +- Updates on files [`16348efb`](https://github.com/AlexRogalskiy/java-patterns/commit/16348efb) +- Updates on files [`ee158fb4`](https://github.com/AlexRogalskiy/java-patterns/commit/ee158fb4) +- Updated with the latest blog posts [`6cab2094`](https://github.com/AlexRogalskiy/java-patterns/commit/6cab2094) +- docs: updates on docs page speed [`e310587e`](https://github.com/AlexRogalskiy/java-patterns/commit/e310587e) +- Updates on files [`4369af7f`](https://github.com/AlexRogalskiy/java-patterns/commit/4369af7f) +- Updates on files [`7ecfdba1`](https://github.com/AlexRogalskiy/java-patterns/commit/7ecfdba1) +- Updated with the latest blog posts [`1641b918`](https://github.com/AlexRogalskiy/java-patterns/commit/1641b918) +- Updated with the latest blog posts [`c21ad482`](https://github.com/AlexRogalskiy/java-patterns/commit/c21ad482) +- docs: updates on docs page speed [`70e369b0`](https://github.com/AlexRogalskiy/java-patterns/commit/70e369b0) +- Updates on files [`ee6f6da2`](https://github.com/AlexRogalskiy/java-patterns/commit/ee6f6da2) +- Updated with the latest blog posts [`079dc58f`](https://github.com/AlexRogalskiy/java-patterns/commit/079dc58f) +- Updated with the latest blog posts [`8c50b086`](https://github.com/AlexRogalskiy/java-patterns/commit/8c50b086) +- Updated with the latest blog posts [`427ef6e9`](https://github.com/AlexRogalskiy/java-patterns/commit/427ef6e9) +- Updated with the latest blog posts [`987ab2c1`](https://github.com/AlexRogalskiy/java-patterns/commit/987ab2c1) +- docs: updates on docs page speed [`1f0565cc`](https://github.com/AlexRogalskiy/java-patterns/commit/1f0565cc) +- Updated with the latest blog posts [`0e648045`](https://github.com/AlexRogalskiy/java-patterns/commit/0e648045) +- Updated with the latest blog posts [`14e066db`](https://github.com/AlexRogalskiy/java-patterns/commit/14e066db) +- docs: updates on docs page speed [`60995f9d`](https://github.com/AlexRogalskiy/java-patterns/commit/60995f9d) +- Updated with the latest blog posts [`10c4149c`](https://github.com/AlexRogalskiy/java-patterns/commit/10c4149c) +- Updated with the latest blog posts [`a0204b3e`](https://github.com/AlexRogalskiy/java-patterns/commit/a0204b3e) +- Updated with the latest blog posts [`3789b26d`](https://github.com/AlexRogalskiy/java-patterns/commit/3789b26d) +- Updated with the latest blog posts [`8d3f4537`](https://github.com/AlexRogalskiy/java-patterns/commit/8d3f4537) +- docs: updates on docs page speed [`c7ebaa0d`](https://github.com/AlexRogalskiy/java-patterns/commit/c7ebaa0d) +- Updated with the latest blog posts [`b86f13e7`](https://github.com/AlexRogalskiy/java-patterns/commit/b86f13e7) +- Updated with the latest blog posts [`64d97028`](https://github.com/AlexRogalskiy/java-patterns/commit/64d97028) +- Updated with the latest blog posts [`1aafcc53`](https://github.com/AlexRogalskiy/java-patterns/commit/1aafcc53) +- docs: updates on docs page speed [`59e2be9e`](https://github.com/AlexRogalskiy/java-patterns/commit/59e2be9e) +- Optimised images with calibre/image-actions [`d4c1a9c3`](https://github.com/AlexRogalskiy/java-patterns/commit/d4c1a9c3) +- Updates on files [`ec94bea2`](https://github.com/AlexRogalskiy/java-patterns/commit/ec94bea2) +- Updated with the latest blog posts [`0264c404`](https://github.com/AlexRogalskiy/java-patterns/commit/0264c404) +- docs: updates on docs page speed [`6dd557b5`](https://github.com/AlexRogalskiy/java-patterns/commit/6dd557b5) +- GitHub traffic [`be62cea9`](https://github.com/AlexRogalskiy/java-patterns/commit/be62cea9) +- Updated with the latest blog posts [`617ad1aa`](https://github.com/AlexRogalskiy/java-patterns/commit/617ad1aa) +- Updated with the latest blog posts [`c8a4cbc7`](https://github.com/AlexRogalskiy/java-patterns/commit/c8a4cbc7) +- docs: updates on docs page speed [`8a64843a`](https://github.com/AlexRogalskiy/java-patterns/commit/8a64843a) +- Updates on files [`fe53faca`](https://github.com/AlexRogalskiy/java-patterns/commit/fe53faca) +- Updates on files [`6a0d7a6a`](https://github.com/AlexRogalskiy/java-patterns/commit/6a0d7a6a) +- Updated with the latest blog posts [`11f46fcd`](https://github.com/AlexRogalskiy/java-patterns/commit/11f46fcd) +- Updated with the latest blog posts [`39de4c7c`](https://github.com/AlexRogalskiy/java-patterns/commit/39de4c7c) +- docs: updates on docs page speed [`e1812e9f`](https://github.com/AlexRogalskiy/java-patterns/commit/e1812e9f) +- Updated with the latest blog posts [`6aa16485`](https://github.com/AlexRogalskiy/java-patterns/commit/6aa16485) +- Updated with the latest blog posts [`0e6d9652`](https://github.com/AlexRogalskiy/java-patterns/commit/0e6d9652) +- Updated with the latest blog posts [`29ab585a`](https://github.com/AlexRogalskiy/java-patterns/commit/29ab585a) +- docs: updates on docs page speed [`12823425`](https://github.com/AlexRogalskiy/java-patterns/commit/12823425) +- Updated with the latest blog posts [`657d5688`](https://github.com/AlexRogalskiy/java-patterns/commit/657d5688) +- Updated with the latest blog posts [`f9328ecc`](https://github.com/AlexRogalskiy/java-patterns/commit/f9328ecc) +- Updated with the latest blog posts [`b0fbfeaf`](https://github.com/AlexRogalskiy/java-patterns/commit/b0fbfeaf) +- Updated with the latest blog posts [`f45cf1b3`](https://github.com/AlexRogalskiy/java-patterns/commit/f45cf1b3) +- docs: updates on docs page speed [`28ecc850`](https://github.com/AlexRogalskiy/java-patterns/commit/28ecc850) +- Updated with the latest blog posts [`851b5a54`](https://github.com/AlexRogalskiy/java-patterns/commit/851b5a54) +- Updated with the latest blog posts [`5f7a9356`](https://github.com/AlexRogalskiy/java-patterns/commit/5f7a9356) +- Updated with the latest blog posts [`d3a413b2`](https://github.com/AlexRogalskiy/java-patterns/commit/d3a413b2) +- Updated with the latest blog posts [`7edc783d`](https://github.com/AlexRogalskiy/java-patterns/commit/7edc783d) +- Updated with the latest blog posts [`bf6168af`](https://github.com/AlexRogalskiy/java-patterns/commit/bf6168af) +- docs: updates on docs page speed [`932ca0a9`](https://github.com/AlexRogalskiy/java-patterns/commit/932ca0a9) +- Updated with the latest blog posts [`ef4401ca`](https://github.com/AlexRogalskiy/java-patterns/commit/ef4401ca) +- Updated with the latest blog posts [`371b1de1`](https://github.com/AlexRogalskiy/java-patterns/commit/371b1de1) +- Updated with the latest blog posts [`d15713fd`](https://github.com/AlexRogalskiy/java-patterns/commit/d15713fd) +- Updated with the latest blog posts [`a2faad59`](https://github.com/AlexRogalskiy/java-patterns/commit/a2faad59) +- Updated with the latest blog posts [`a799e5f7`](https://github.com/AlexRogalskiy/java-patterns/commit/a799e5f7) +- Updated with the latest blog posts [`8b1fb414`](https://github.com/AlexRogalskiy/java-patterns/commit/8b1fb414) +- Updated with the latest blog posts [`9f3e9581`](https://github.com/AlexRogalskiy/java-patterns/commit/9f3e9581) +- Updated with the latest blog posts [`6babcb65`](https://github.com/AlexRogalskiy/java-patterns/commit/6babcb65) +- Updated with the latest blog posts [`cfc211a7`](https://github.com/AlexRogalskiy/java-patterns/commit/cfc211a7) +- Updated with the latest blog posts [`c105e2f3`](https://github.com/AlexRogalskiy/java-patterns/commit/c105e2f3) +- docs: updates on docs page speed [`7a468fd0`](https://github.com/AlexRogalskiy/java-patterns/commit/7a468fd0) +- Auto update markdown TOC [`44f3574c`](https://github.com/AlexRogalskiy/java-patterns/commit/44f3574c) +- Updates on files [`2355ac47`](https://github.com/AlexRogalskiy/java-patterns/commit/2355ac47) +- Updates on files [`58ded1dd`](https://github.com/AlexRogalskiy/java-patterns/commit/58ded1dd) +- Updates on files [`e415590c`](https://github.com/AlexRogalskiy/java-patterns/commit/e415590c) +- Updates on files [`0614464b`](https://github.com/AlexRogalskiy/java-patterns/commit/0614464b) +- Updates on files [`0c1310f7`](https://github.com/AlexRogalskiy/java-patterns/commit/0c1310f7) +- Updates on files [`cc9a04a2`](https://github.com/AlexRogalskiy/java-patterns/commit/cc9a04a2) +- Updates on files [`834dafc3`](https://github.com/AlexRogalskiy/java-patterns/commit/834dafc3) +- Updates on files [`4b4c2b41`](https://github.com/AlexRogalskiy/java-patterns/commit/4b4c2b41) +- Updates on files [`79bff082`](https://github.com/AlexRogalskiy/java-patterns/commit/79bff082) +- Updates on files [`52235b5a`](https://github.com/AlexRogalskiy/java-patterns/commit/52235b5a) +- Updates on files [`47c65370`](https://github.com/AlexRogalskiy/java-patterns/commit/47c65370) +- Updates on files [`ba3bc26b`](https://github.com/AlexRogalskiy/java-patterns/commit/ba3bc26b) +- Updates on files [`c37dbb1b`](https://github.com/AlexRogalskiy/java-patterns/commit/c37dbb1b) +- Updates on files [`1f8975bc`](https://github.com/AlexRogalskiy/java-patterns/commit/1f8975bc) +- Updates on files [`aa26c50a`](https://github.com/AlexRogalskiy/java-patterns/commit/aa26c50a) +- Updates on files [`6edda7f4`](https://github.com/AlexRogalskiy/java-patterns/commit/6edda7f4) +- Updates on files [`e15e292f`](https://github.com/AlexRogalskiy/java-patterns/commit/e15e292f) +- Updates on files [`e90de677`](https://github.com/AlexRogalskiy/java-patterns/commit/e90de677) +- Updates on files [`9a5c1922`](https://github.com/AlexRogalskiy/java-patterns/commit/9a5c1922) +- updates on files [`69ce981f`](https://github.com/AlexRogalskiy/java-patterns/commit/69ce981f) +- Updates on files [`6e0fa211`](https://github.com/AlexRogalskiy/java-patterns/commit/6e0fa211) +- Updates on files [`3b7dcc40`](https://github.com/AlexRogalskiy/java-patterns/commit/3b7dcc40) +- Updated with the latest blog posts [`3507c6c7`](https://github.com/AlexRogalskiy/java-patterns/commit/3507c6c7) +- Updated with the latest blog posts [`6e562058`](https://github.com/AlexRogalskiy/java-patterns/commit/6e562058) +- Updated with the latest blog posts [`a63fe081`](https://github.com/AlexRogalskiy/java-patterns/commit/a63fe081) +- Updated with the latest blog posts [`cf216e30`](https://github.com/AlexRogalskiy/java-patterns/commit/cf216e30) +- Updated with the latest blog posts [`c8011ec8`](https://github.com/AlexRogalskiy/java-patterns/commit/c8011ec8) +- Updated with the latest blog posts [`9eddd066`](https://github.com/AlexRogalskiy/java-patterns/commit/9eddd066) +- Updated with the latest blog posts [`544304de`](https://github.com/AlexRogalskiy/java-patterns/commit/544304de) +- Updated with the latest blog posts [`faec67f1`](https://github.com/AlexRogalskiy/java-patterns/commit/faec67f1) +- Updated with the latest blog posts [`afd29ab1`](https://github.com/AlexRogalskiy/java-patterns/commit/afd29ab1) +- Updated with the latest blog posts [`559d8c10`](https://github.com/AlexRogalskiy/java-patterns/commit/559d8c10) +- Updates on files [`6ffbefc5`](https://github.com/AlexRogalskiy/java-patterns/commit/6ffbefc5) +- Updates on files [`0bee9449`](https://github.com/AlexRogalskiy/java-patterns/commit/0bee9449) +- Updates on files [`4066f86c`](https://github.com/AlexRogalskiy/java-patterns/commit/4066f86c) +- Updates on files [`6540b5cb`](https://github.com/AlexRogalskiy/java-patterns/commit/6540b5cb) +- Updates on files [`bf988a6b`](https://github.com/AlexRogalskiy/java-patterns/commit/bf988a6b) +- Updates on files [`dfce3359`](https://github.com/AlexRogalskiy/java-patterns/commit/dfce3359) +- Updates on files [`f4e2f5e7`](https://github.com/AlexRogalskiy/java-patterns/commit/f4e2f5e7) +- Optimised images with calibre/image-actions [`a15704ce`](https://github.com/AlexRogalskiy/java-patterns/commit/a15704ce) +- Updates on files [`0c8d3c26`](https://github.com/AlexRogalskiy/java-patterns/commit/0c8d3c26) +- docs: updates on docs page speed [`b5a2c00a`](https://github.com/AlexRogalskiy/java-patterns/commit/b5a2c00a) +- Auto update markdown TOC [`6c11a686`](https://github.com/AlexRogalskiy/java-patterns/commit/6c11a686) +- Updates on files [`12d1d7ff`](https://github.com/AlexRogalskiy/java-patterns/commit/12d1d7ff) +- GitHub traffic [`813b296e`](https://github.com/AlexRogalskiy/java-patterns/commit/813b296e) +- Updates on files [`38740689`](https://github.com/AlexRogalskiy/java-patterns/commit/38740689) +- Updates on files [`c74cff94`](https://github.com/AlexRogalskiy/java-patterns/commit/c74cff94) +- Updates on files [`871f9565`](https://github.com/AlexRogalskiy/java-patterns/commit/871f9565) +- Updated with the latest blog posts [`3b3dad47`](https://github.com/AlexRogalskiy/java-patterns/commit/3b3dad47) +- docs: updates on docs page speed [`c4a8ca1e`](https://github.com/AlexRogalskiy/java-patterns/commit/c4a8ca1e) +- Updates on files [`4dab2732`](https://github.com/AlexRogalskiy/java-patterns/commit/4dab2732) +- Updated with the latest blog posts [`ad47c6e6`](https://github.com/AlexRogalskiy/java-patterns/commit/ad47c6e6) +- Updated with the latest blog posts [`c5b44731`](https://github.com/AlexRogalskiy/java-patterns/commit/c5b44731) +- Updated with the latest blog posts [`dc63d2c8`](https://github.com/AlexRogalskiy/java-patterns/commit/dc63d2c8) +- Updated with the latest blog posts [`ab0b474f`](https://github.com/AlexRogalskiy/java-patterns/commit/ab0b474f) +- Updated with the latest blog posts [`36a3b193`](https://github.com/AlexRogalskiy/java-patterns/commit/36a3b193) +- Updated with the latest blog posts [`d7b62e5d`](https://github.com/AlexRogalskiy/java-patterns/commit/d7b62e5d) +- Updated with the latest blog posts [`af6d52df`](https://github.com/AlexRogalskiy/java-patterns/commit/af6d52df) +- Updated with the latest blog posts [`3755b02b`](https://github.com/AlexRogalskiy/java-patterns/commit/3755b02b) +- Updated with the latest blog posts [`e4ff85c4`](https://github.com/AlexRogalskiy/java-patterns/commit/e4ff85c4) +- Updated with the latest blog posts [`cc283786`](https://github.com/AlexRogalskiy/java-patterns/commit/cc283786) +- Updates on files [`3f845e5c`](https://github.com/AlexRogalskiy/java-patterns/commit/3f845e5c) +- Updates on files [`f890c806`](https://github.com/AlexRogalskiy/java-patterns/commit/f890c806) +- docs: updates on docs page speed [`92739ebc`](https://github.com/AlexRogalskiy/java-patterns/commit/92739ebc) +- Updates on files [`877a4b8a`](https://github.com/AlexRogalskiy/java-patterns/commit/877a4b8a) +- Auto update markdown TOC [`51c9b664`](https://github.com/AlexRogalskiy/java-patterns/commit/51c9b664) +- Updates on files [`ff4547f0`](https://github.com/AlexRogalskiy/java-patterns/commit/ff4547f0) +- Updates on files [`70731fc5`](https://github.com/AlexRogalskiy/java-patterns/commit/70731fc5) +- Updates on files [`1e2fcbbb`](https://github.com/AlexRogalskiy/java-patterns/commit/1e2fcbbb) +- Updates on files [`103349fb`](https://github.com/AlexRogalskiy/java-patterns/commit/103349fb) +- Updates on files [`e526ed68`](https://github.com/AlexRogalskiy/java-patterns/commit/e526ed68) +- Updated with the latest blog posts [`0ac1f57d`](https://github.com/AlexRogalskiy/java-patterns/commit/0ac1f57d) +- Updated with the latest blog posts [`94958ed8`](https://github.com/AlexRogalskiy/java-patterns/commit/94958ed8) +- Updated with the latest blog posts [`8c5df2f6`](https://github.com/AlexRogalskiy/java-patterns/commit/8c5df2f6) +- Updated with the latest blog posts [`d6a8f8fc`](https://github.com/AlexRogalskiy/java-patterns/commit/d6a8f8fc) +- Updated with the latest blog posts [`009a0564`](https://github.com/AlexRogalskiy/java-patterns/commit/009a0564) +- Updated with the latest blog posts [`5d65c928`](https://github.com/AlexRogalskiy/java-patterns/commit/5d65c928) +- Updated with the latest blog posts [`155a4983`](https://github.com/AlexRogalskiy/java-patterns/commit/155a4983) +- Updated with the latest blog posts [`bed21c6d`](https://github.com/AlexRogalskiy/java-patterns/commit/bed21c6d) +- Updated with the latest blog posts [`c74ebb1b`](https://github.com/AlexRogalskiy/java-patterns/commit/c74ebb1b) +- Updated with the latest blog posts [`054460b2`](https://github.com/AlexRogalskiy/java-patterns/commit/054460b2) +- docs: updates on docs page speed [`c1f6c4d0`](https://github.com/AlexRogalskiy/java-patterns/commit/c1f6c4d0) +- Updates on files [`8581fbaf`](https://github.com/AlexRogalskiy/java-patterns/commit/8581fbaf) +- Auto update markdown TOC [`b8f9c2c8`](https://github.com/AlexRogalskiy/java-patterns/commit/b8f9c2c8) +- Updates on files [`0c9c6075`](https://github.com/AlexRogalskiy/java-patterns/commit/0c9c6075) +- Updates on files [`d094a65c`](https://github.com/AlexRogalskiy/java-patterns/commit/d094a65c) +- Updated with the latest blog posts [`fa3d5ad3`](https://github.com/AlexRogalskiy/java-patterns/commit/fa3d5ad3) +- Updated with the latest blog posts [`f497524c`](https://github.com/AlexRogalskiy/java-patterns/commit/f497524c) +- Updated with the latest blog posts [`ebc2058e`](https://github.com/AlexRogalskiy/java-patterns/commit/ebc2058e) +- Updated with the latest blog posts [`2a0a3c6f`](https://github.com/AlexRogalskiy/java-patterns/commit/2a0a3c6f) +- Updated with the latest blog posts [`4d9b24f2`](https://github.com/AlexRogalskiy/java-patterns/commit/4d9b24f2) +- Updated with the latest blog posts [`c06f7c34`](https://github.com/AlexRogalskiy/java-patterns/commit/c06f7c34) +- Updated with the latest blog posts [`bfd3b23a`](https://github.com/AlexRogalskiy/java-patterns/commit/bfd3b23a) +- Updated with the latest blog posts [`d13e408a`](https://github.com/AlexRogalskiy/java-patterns/commit/d13e408a) +- Updated with the latest blog posts [`617e6703`](https://github.com/AlexRogalskiy/java-patterns/commit/617e6703) +- Updated with the latest blog posts [`60f4c45f`](https://github.com/AlexRogalskiy/java-patterns/commit/60f4c45f) +- docs: updates on docs page speed [`22ec0785`](https://github.com/AlexRogalskiy/java-patterns/commit/22ec0785) +- Auto update markdown TOC [`a4354409`](https://github.com/AlexRogalskiy/java-patterns/commit/a4354409) +- Updates on files [`58c0d3f5`](https://github.com/AlexRogalskiy/java-patterns/commit/58c0d3f5) +- Updates on files [`ddd8b344`](https://github.com/AlexRogalskiy/java-patterns/commit/ddd8b344) +- Updated with the latest blog posts [`83f8e26f`](https://github.com/AlexRogalskiy/java-patterns/commit/83f8e26f) +- Updated with the latest blog posts [`f7c323ea`](https://github.com/AlexRogalskiy/java-patterns/commit/f7c323ea) +- Updated with the latest blog posts [`27da9669`](https://github.com/AlexRogalskiy/java-patterns/commit/27da9669) +- Updated with the latest blog posts [`92f1a91e`](https://github.com/AlexRogalskiy/java-patterns/commit/92f1a91e) +- Updated with the latest blog posts [`f3c352b7`](https://github.com/AlexRogalskiy/java-patterns/commit/f3c352b7) +- Updated with the latest blog posts [`04e6deed`](https://github.com/AlexRogalskiy/java-patterns/commit/04e6deed) +- Updated with the latest blog posts [`0effb3fb`](https://github.com/AlexRogalskiy/java-patterns/commit/0effb3fb) +- Updated with the latest blog posts [`7a68a8f6`](https://github.com/AlexRogalskiy/java-patterns/commit/7a68a8f6) +- Updated with the latest blog posts [`9a43d882`](https://github.com/AlexRogalskiy/java-patterns/commit/9a43d882) +- Updated with the latest blog posts [`e926faaf`](https://github.com/AlexRogalskiy/java-patterns/commit/e926faaf) +- docs: updates on docs page speed [`8da373f5`](https://github.com/AlexRogalskiy/java-patterns/commit/8da373f5) +- Auto update markdown TOC [`57823ba7`](https://github.com/AlexRogalskiy/java-patterns/commit/57823ba7) +- Updates on files [`bf64d9e2`](https://github.com/AlexRogalskiy/java-patterns/commit/bf64d9e2) +- Updates on files [`2bf398fe`](https://github.com/AlexRogalskiy/java-patterns/commit/2bf398fe) +- Optimised images with calibre/image-actions [`0ef888ef`](https://github.com/AlexRogalskiy/java-patterns/commit/0ef888ef) +- Updates on files [`60010a18`](https://github.com/AlexRogalskiy/java-patterns/commit/60010a18) +- Updated with the latest blog posts [`64c4dfbd`](https://github.com/AlexRogalskiy/java-patterns/commit/64c4dfbd) +- Updated with the latest blog posts [`1d1ef77b`](https://github.com/AlexRogalskiy/java-patterns/commit/1d1ef77b) +- Updated with the latest blog posts [`b8f8093a`](https://github.com/AlexRogalskiy/java-patterns/commit/b8f8093a) +- Updated with the latest blog posts [`19691de1`](https://github.com/AlexRogalskiy/java-patterns/commit/19691de1) +- docs: updates on docs page speed [`37a26e35`](https://github.com/AlexRogalskiy/java-patterns/commit/37a26e35) +- Updated with the latest blog posts [`72ed7395`](https://github.com/AlexRogalskiy/java-patterns/commit/72ed7395) +- docs: updates on docs page speed [`74e81416`](https://github.com/AlexRogalskiy/java-patterns/commit/74e81416) +- GitHub traffic [`107b6ac3`](https://github.com/AlexRogalskiy/java-patterns/commit/107b6ac3) +- Updates on files [`5dafd869`](https://github.com/AlexRogalskiy/java-patterns/commit/5dafd869) +- Updated with the latest blog posts [`d64df519`](https://github.com/AlexRogalskiy/java-patterns/commit/d64df519) +- Updated with the latest blog posts [`0d4be42c`](https://github.com/AlexRogalskiy/java-patterns/commit/0d4be42c) +- docs: updates on docs page speed [`83d7b27b`](https://github.com/AlexRogalskiy/java-patterns/commit/83d7b27b) +- Updated with the latest blog posts [`7f7e8001`](https://github.com/AlexRogalskiy/java-patterns/commit/7f7e8001) +- Updated with the latest blog posts [`53cab7ef`](https://github.com/AlexRogalskiy/java-patterns/commit/53cab7ef) +- docs: updates on docs page speed [`59a04252`](https://github.com/AlexRogalskiy/java-patterns/commit/59a04252) +- Updates on files [`59ebe04e`](https://github.com/AlexRogalskiy/java-patterns/commit/59ebe04e) +- Updates on files [`fd99a498`](https://github.com/AlexRogalskiy/java-patterns/commit/fd99a498) +- Updates on files [`12a5c8d5`](https://github.com/AlexRogalskiy/java-patterns/commit/12a5c8d5) +- Updates on files [`aa94eb38`](https://github.com/AlexRogalskiy/java-patterns/commit/aa94eb38) +- Updates on files [`ea6e4a53`](https://github.com/AlexRogalskiy/java-patterns/commit/ea6e4a53) +- Updates on files [`04c9cb1a`](https://github.com/AlexRogalskiy/java-patterns/commit/04c9cb1a) +- Updates on files [`8f2d6467`](https://github.com/AlexRogalskiy/java-patterns/commit/8f2d6467) +- Updates on files [`06223fd0`](https://github.com/AlexRogalskiy/java-patterns/commit/06223fd0) +- Updated with the latest blog posts [`517770c1`](https://github.com/AlexRogalskiy/java-patterns/commit/517770c1) +- Updated with the latest blog posts [`ea273009`](https://github.com/AlexRogalskiy/java-patterns/commit/ea273009) +- docs: updates on docs page speed [`e68a09ce`](https://github.com/AlexRogalskiy/java-patterns/commit/e68a09ce) +- Updates on files [`b33060a4`](https://github.com/AlexRogalskiy/java-patterns/commit/b33060a4) +- Updates on files [`c847992b`](https://github.com/AlexRogalskiy/java-patterns/commit/c847992b) +- Updates on files [`13d87228`](https://github.com/AlexRogalskiy/java-patterns/commit/13d87228) +- Updates on files [`5446f5f2`](https://github.com/AlexRogalskiy/java-patterns/commit/5446f5f2) +- Updates on files [`2f720e93`](https://github.com/AlexRogalskiy/java-patterns/commit/2f720e93) +- Updates on files [`561e9226`](https://github.com/AlexRogalskiy/java-patterns/commit/561e9226) +- Updates on files [`ec27d555`](https://github.com/AlexRogalskiy/java-patterns/commit/ec27d555) +- Updates on files [`a51d497f`](https://github.com/AlexRogalskiy/java-patterns/commit/a51d497f) +- Updates on files [`ec84c687`](https://github.com/AlexRogalskiy/java-patterns/commit/ec84c687) +- Updates on okteto [`fcf161ca`](https://github.com/AlexRogalskiy/java-patterns/commit/fcf161ca) +- Updates on files [`08bcb67c`](https://github.com/AlexRogalskiy/java-patterns/commit/08bcb67c) +- Updated with the latest blog posts [`dfe2595c`](https://github.com/AlexRogalskiy/java-patterns/commit/dfe2595c) +- docs: updates on docs page speed [`53c702b7`](https://github.com/AlexRogalskiy/java-patterns/commit/53c702b7) +- Updates on files [`aa61239a`](https://github.com/AlexRogalskiy/java-patterns/commit/aa61239a) +- Updated with the latest blog posts [`e81eaa02`](https://github.com/AlexRogalskiy/java-patterns/commit/e81eaa02) +- Updated with the latest blog posts [`61ded500`](https://github.com/AlexRogalskiy/java-patterns/commit/61ded500) +- docs: updates on docs page speed [`97a3e160`](https://github.com/AlexRogalskiy/java-patterns/commit/97a3e160) +- Updates on files [`4d18e2f5`](https://github.com/AlexRogalskiy/java-patterns/commit/4d18e2f5) +- Updates on files [`0e2a95e2`](https://github.com/AlexRogalskiy/java-patterns/commit/0e2a95e2) +- Updated with the latest blog posts [`974bcad1`](https://github.com/AlexRogalskiy/java-patterns/commit/974bcad1) +- docs: updates on docs page speed [`1ee42436`](https://github.com/AlexRogalskiy/java-patterns/commit/1ee42436) +- Optimised images with calibre/image-actions [`c38bdb5f`](https://github.com/AlexRogalskiy/java-patterns/commit/c38bdb5f) +- Updates on files [`29f3428d`](https://github.com/AlexRogalskiy/java-patterns/commit/29f3428d) +- Updated with the latest blog posts [`13acf94f`](https://github.com/AlexRogalskiy/java-patterns/commit/13acf94f) +- GitHub traffic [`0c506473`](https://github.com/AlexRogalskiy/java-patterns/commit/0c506473) +- Updated with the latest blog posts [`cfa4f7c2`](https://github.com/AlexRogalskiy/java-patterns/commit/cfa4f7c2) +- docs: updates on docs page speed [`0b921ba9`](https://github.com/AlexRogalskiy/java-patterns/commit/0b921ba9) +- Updated with the latest blog posts [`f59f90aa`](https://github.com/AlexRogalskiy/java-patterns/commit/f59f90aa) +- Updated with the latest blog posts [`beea6795`](https://github.com/AlexRogalskiy/java-patterns/commit/beea6795) +- docs: updates on docs page speed [`32e12415`](https://github.com/AlexRogalskiy/java-patterns/commit/32e12415) +- Updated with the latest blog posts [`50b6a4bd`](https://github.com/AlexRogalskiy/java-patterns/commit/50b6a4bd) +- Updated with the latest blog posts [`eb108143`](https://github.com/AlexRogalskiy/java-patterns/commit/eb108143) +- docs: updates on docs page speed [`f168c779`](https://github.com/AlexRogalskiy/java-patterns/commit/f168c779) +- Updated with the latest blog posts [`8ee8e7aa`](https://github.com/AlexRogalskiy/java-patterns/commit/8ee8e7aa) +- Updated with the latest blog posts [`50bf64e7`](https://github.com/AlexRogalskiy/java-patterns/commit/50bf64e7) +- Updated with the latest blog posts [`32edbf29`](https://github.com/AlexRogalskiy/java-patterns/commit/32edbf29) +- docs: updates on docs page speed [`8834b05d`](https://github.com/AlexRogalskiy/java-patterns/commit/8834b05d) +- Updated with the latest blog posts [`efee2016`](https://github.com/AlexRogalskiy/java-patterns/commit/efee2016) +- Updated with the latest blog posts [`9d8a37d9`](https://github.com/AlexRogalskiy/java-patterns/commit/9d8a37d9) +- Updated with the latest blog posts [`e57af2cd`](https://github.com/AlexRogalskiy/java-patterns/commit/e57af2cd) +- Updated with the latest blog posts [`d399f6b4`](https://github.com/AlexRogalskiy/java-patterns/commit/d399f6b4) +- docs: updates on docs page speed [`2803db3d`](https://github.com/AlexRogalskiy/java-patterns/commit/2803db3d) +- Updated with the latest blog posts [`c3567813`](https://github.com/AlexRogalskiy/java-patterns/commit/c3567813) +- Updated with the latest blog posts [`88b8b4a1`](https://github.com/AlexRogalskiy/java-patterns/commit/88b8b4a1) +- docs: updates on docs page speed [`afd79e04`](https://github.com/AlexRogalskiy/java-patterns/commit/afd79e04) +- Updated with the latest blog posts [`f2f5e98b`](https://github.com/AlexRogalskiy/java-patterns/commit/f2f5e98b) +- docs: updates on docs page speed [`7727ceea`](https://github.com/AlexRogalskiy/java-patterns/commit/7727ceea) +- GitHub traffic [`ccb0c815`](https://github.com/AlexRogalskiy/java-patterns/commit/ccb0c815) +- Updated with the latest blog posts [`e38f0619`](https://github.com/AlexRogalskiy/java-patterns/commit/e38f0619) +- docs: updates on docs page speed [`16a1dc88`](https://github.com/AlexRogalskiy/java-patterns/commit/16a1dc88) +- Updated with the latest blog posts [`4483380d`](https://github.com/AlexRogalskiy/java-patterns/commit/4483380d) +- Updated with the latest blog posts [`f3752c0f`](https://github.com/AlexRogalskiy/java-patterns/commit/f3752c0f) +- docs: updates on docs page speed [`a4780c91`](https://github.com/AlexRogalskiy/java-patterns/commit/a4780c91) +- Updated with the latest blog posts [`47d6495f`](https://github.com/AlexRogalskiy/java-patterns/commit/47d6495f) +- Updated with the latest blog posts [`f2fb1a13`](https://github.com/AlexRogalskiy/java-patterns/commit/f2fb1a13) +- docs: updates on docs page speed [`d7e5eecd`](https://github.com/AlexRogalskiy/java-patterns/commit/d7e5eecd) +- Updated with the latest blog posts [`bde9b89d`](https://github.com/AlexRogalskiy/java-patterns/commit/bde9b89d) +- docs: updates on docs page speed [`3473f85d`](https://github.com/AlexRogalskiy/java-patterns/commit/3473f85d) +- Updated with the latest blog posts [`efb19b38`](https://github.com/AlexRogalskiy/java-patterns/commit/efb19b38) +- Updated with the latest blog posts [`ec4ec2af`](https://github.com/AlexRogalskiy/java-patterns/commit/ec4ec2af) +- docs: updates on docs page speed [`5d4f9d74`](https://github.com/AlexRogalskiy/java-patterns/commit/5d4f9d74) +- Updated with the latest blog posts [`36f242fd`](https://github.com/AlexRogalskiy/java-patterns/commit/36f242fd) +- docs: updates on docs page speed [`4853327a`](https://github.com/AlexRogalskiy/java-patterns/commit/4853327a) +- Updated with the latest blog posts [`e7da6abf`](https://github.com/AlexRogalskiy/java-patterns/commit/e7da6abf) +- Updated with the latest blog posts [`105d82b6`](https://github.com/AlexRogalskiy/java-patterns/commit/105d82b6) +- docs: updates on docs page speed [`de9f6c99`](https://github.com/AlexRogalskiy/java-patterns/commit/de9f6c99) +- GitHub traffic [`3ddb24c8`](https://github.com/AlexRogalskiy/java-patterns/commit/3ddb24c8) +- Updated with the latest blog posts [`6c2cbb29`](https://github.com/AlexRogalskiy/java-patterns/commit/6c2cbb29) +- docs: updates on docs page speed [`c5bdf56d`](https://github.com/AlexRogalskiy/java-patterns/commit/c5bdf56d) +- Updated with the latest blog posts [`3c1092d0`](https://github.com/AlexRogalskiy/java-patterns/commit/3c1092d0) +- Updated with the latest blog posts [`b9f38e1b`](https://github.com/AlexRogalskiy/java-patterns/commit/b9f38e1b) +- docs: updates on docs page speed [`eeefd9b0`](https://github.com/AlexRogalskiy/java-patterns/commit/eeefd9b0) +- Updated with the latest blog posts [`db719fbf`](https://github.com/AlexRogalskiy/java-patterns/commit/db719fbf) +- Updated with the latest blog posts [`7846a0df`](https://github.com/AlexRogalskiy/java-patterns/commit/7846a0df) +- docs: updates on docs page speed [`4180f0ae`](https://github.com/AlexRogalskiy/java-patterns/commit/4180f0ae) +- Updated with the latest blog posts [`a2ec0c71`](https://github.com/AlexRogalskiy/java-patterns/commit/a2ec0c71) +- Updated with the latest blog posts [`a962e1c3`](https://github.com/AlexRogalskiy/java-patterns/commit/a962e1c3) +- Updated with the latest blog posts [`8fb98431`](https://github.com/AlexRogalskiy/java-patterns/commit/8fb98431) +- Updated with the latest blog posts [`d87f2268`](https://github.com/AlexRogalskiy/java-patterns/commit/d87f2268) +- Updated with the latest blog posts [`097eed72`](https://github.com/AlexRogalskiy/java-patterns/commit/097eed72) +- Updated with the latest blog posts [`09c5b19b`](https://github.com/AlexRogalskiy/java-patterns/commit/09c5b19b) +- Updated with the latest blog posts [`6cd2e6c6`](https://github.com/AlexRogalskiy/java-patterns/commit/6cd2e6c6) +- Updated with the latest blog posts [`bee57190`](https://github.com/AlexRogalskiy/java-patterns/commit/bee57190) +- Updated with the latest blog posts [`0b6200c1`](https://github.com/AlexRogalskiy/java-patterns/commit/0b6200c1) +- Updated with the latest blog posts [`64adac44`](https://github.com/AlexRogalskiy/java-patterns/commit/64adac44) +- docs: updates on docs page speed [`f22aec99`](https://github.com/AlexRogalskiy/java-patterns/commit/f22aec99) +- Added info on workflows [`50901d23`](https://github.com/AlexRogalskiy/java-patterns/commit/50901d23) +- Auto update markdown TOC [`8afa1b5b`](https://github.com/AlexRogalskiy/java-patterns/commit/8afa1b5b) +- Added info on workflows [`866f5002`](https://github.com/AlexRogalskiy/java-patterns/commit/866f5002) +- Updated with the latest blog posts [`6518af8f`](https://github.com/AlexRogalskiy/java-patterns/commit/6518af8f) +- Updated with the latest blog posts [`f5e5c7d4`](https://github.com/AlexRogalskiy/java-patterns/commit/f5e5c7d4) +- Updated with the latest blog posts [`288cbf94`](https://github.com/AlexRogalskiy/java-patterns/commit/288cbf94) +- Updated with the latest blog posts [`72f69eb3`](https://github.com/AlexRogalskiy/java-patterns/commit/72f69eb3) +- Updated with the latest blog posts [`fce9de38`](https://github.com/AlexRogalskiy/java-patterns/commit/fce9de38) +- Updated with the latest blog posts [`f6e08587`](https://github.com/AlexRogalskiy/java-patterns/commit/f6e08587) +- Updated with the latest blog posts [`1ce4e725`](https://github.com/AlexRogalskiy/java-patterns/commit/1ce4e725) +- Updated with the latest blog posts [`6436762a`](https://github.com/AlexRogalskiy/java-patterns/commit/6436762a) +- Updated with the latest blog posts [`c744bf5d`](https://github.com/AlexRogalskiy/java-patterns/commit/c744bf5d) +- Updated with the latest blog posts [`82990d3d`](https://github.com/AlexRogalskiy/java-patterns/commit/82990d3d) +- docs: updates on docs page speed [`e69410d9`](https://github.com/AlexRogalskiy/java-patterns/commit/e69410d9) +- :arrow_up: Updates @tilt.dev/tilt-inspector to v0.1.8 [`dcdd6f32`](https://github.com/AlexRogalskiy/java-patterns/commit/dcdd6f32) +- :arrow_up: Updates Matticusau/pr-helper action to v1.3.0 [`56f349b5`](https://github.com/AlexRogalskiy/java-patterns/commit/56f349b5) +- :arrow_up: Updates JamesIves/github-pages-deploy-action action to v4.1.4 [`aebf8faf`](https://github.com/AlexRogalskiy/java-patterns/commit/aebf8faf) +- Added info on workflows [`77677d9a`](https://github.com/AlexRogalskiy/java-patterns/commit/77677d9a) +- Auto update markdown TOC [`29729ecc`](https://github.com/AlexRogalskiy/java-patterns/commit/29729ecc) +- Added info on workflows [`559a857a`](https://github.com/AlexRogalskiy/java-patterns/commit/559a857a) +- Optimised images with calibre/image-actions [`863f80cb`](https://github.com/AlexRogalskiy/java-patterns/commit/863f80cb) +- Added info on workflows [`82bcfbcd`](https://github.com/AlexRogalskiy/java-patterns/commit/82bcfbcd) +- Auto update markdown TOC [`8d784172`](https://github.com/AlexRogalskiy/java-patterns/commit/8d784172) +- Added info on workflows [`f53fc01c`](https://github.com/AlexRogalskiy/java-patterns/commit/f53fc01c) +- Updated with the latest blog posts [`23ea2786`](https://github.com/AlexRogalskiy/java-patterns/commit/23ea2786) +- Updated with the latest blog posts [`9eec6c89`](https://github.com/AlexRogalskiy/java-patterns/commit/9eec6c89) +- Updated with the latest blog posts [`9f9e1a4e`](https://github.com/AlexRogalskiy/java-patterns/commit/9f9e1a4e) +- Updated with the latest blog posts [`9b8870b5`](https://github.com/AlexRogalskiy/java-patterns/commit/9b8870b5) +- Updated with the latest blog posts [`49155069`](https://github.com/AlexRogalskiy/java-patterns/commit/49155069) +- Updated with the latest blog posts [`dda8e506`](https://github.com/AlexRogalskiy/java-patterns/commit/dda8e506) +- Updated with the latest blog posts [`7b82051c`](https://github.com/AlexRogalskiy/java-patterns/commit/7b82051c) +- Updated with the latest blog posts [`1a3b2740`](https://github.com/AlexRogalskiy/java-patterns/commit/1a3b2740) +- Updated with the latest blog posts [`04d7fd46`](https://github.com/AlexRogalskiy/java-patterns/commit/04d7fd46) +- Updated with the latest blog posts [`65dcd87a`](https://github.com/AlexRogalskiy/java-patterns/commit/65dcd87a) +- docs: updates on docs page speed [`4c6ca12c`](https://github.com/AlexRogalskiy/java-patterns/commit/4c6ca12c) +- Auto update markdown TOC [`5fe1bc24`](https://github.com/AlexRogalskiy/java-patterns/commit/5fe1bc24) +- Added info on workflows [`3b039291`](https://github.com/AlexRogalskiy/java-patterns/commit/3b039291) +- Auto update markdown TOC [`a02da0d6`](https://github.com/AlexRogalskiy/java-patterns/commit/a02da0d6) +- Added info on workflows [`be962ada`](https://github.com/AlexRogalskiy/java-patterns/commit/be962ada) +- Added info on workflows [`fb3f8912`](https://github.com/AlexRogalskiy/java-patterns/commit/fb3f8912) +- Added info on workflows [`325214b8`](https://github.com/AlexRogalskiy/java-patterns/commit/325214b8) +- Auto update markdown TOC [`89744ebb`](https://github.com/AlexRogalskiy/java-patterns/commit/89744ebb) +- Added info on workflows [`860c6c85`](https://github.com/AlexRogalskiy/java-patterns/commit/860c6c85) +- Updated with the latest blog posts [`0c4b8ff7`](https://github.com/AlexRogalskiy/java-patterns/commit/0c4b8ff7) +- docs: updates on docs page speed [`de80be67`](https://github.com/AlexRogalskiy/java-patterns/commit/de80be67) +- GitHub traffic [`da2c0e9f`](https://github.com/AlexRogalskiy/java-patterns/commit/da2c0e9f) +- Updated with the latest blog posts [`93b6b911`](https://github.com/AlexRogalskiy/java-patterns/commit/93b6b911) +- docs: updates on docs page speed [`bb6fcfac`](https://github.com/AlexRogalskiy/java-patterns/commit/bb6fcfac) +- Auto update markdown TOC [`281ce47c`](https://github.com/AlexRogalskiy/java-patterns/commit/281ce47c) +- Added info on workflows [`36ae8eca`](https://github.com/AlexRogalskiy/java-patterns/commit/36ae8eca) +- Updated with the latest blog posts [`3cb865c5`](https://github.com/AlexRogalskiy/java-patterns/commit/3cb865c5) +- Updated with the latest blog posts [`7ad4b9c0`](https://github.com/AlexRogalskiy/java-patterns/commit/7ad4b9c0) +- Updated with the latest blog posts [`91ec0d4f`](https://github.com/AlexRogalskiy/java-patterns/commit/91ec0d4f) +- Updated with the latest blog posts [`b3c8084c`](https://github.com/AlexRogalskiy/java-patterns/commit/b3c8084c) +- Updated with the latest blog posts [`58c518a7`](https://github.com/AlexRogalskiy/java-patterns/commit/58c518a7) +- Updated with the latest blog posts [`323348e3`](https://github.com/AlexRogalskiy/java-patterns/commit/323348e3) +- Updated with the latest blog posts [`1d343aa0`](https://github.com/AlexRogalskiy/java-patterns/commit/1d343aa0) +- Updated with the latest blog posts [`54e871b8`](https://github.com/AlexRogalskiy/java-patterns/commit/54e871b8) +- Updated with the latest blog posts [`fa64b34b`](https://github.com/AlexRogalskiy/java-patterns/commit/fa64b34b) +- Updated with the latest blog posts [`cb9583bc`](https://github.com/AlexRogalskiy/java-patterns/commit/cb9583bc) +- docs: updates on docs page speed [`869b57d1`](https://github.com/AlexRogalskiy/java-patterns/commit/869b57d1) +- Added info on workflows [`f1bb643d`](https://github.com/AlexRogalskiy/java-patterns/commit/f1bb643d) +- Auto update markdown TOC [`29074b82`](https://github.com/AlexRogalskiy/java-patterns/commit/29074b82) +- Added info on workflows [`0a6f8372`](https://github.com/AlexRogalskiy/java-patterns/commit/0a6f8372) +- Updated with the latest blog posts [`11ca5a6b`](https://github.com/AlexRogalskiy/java-patterns/commit/11ca5a6b) +- Updated with the latest blog posts [`c2ec221b`](https://github.com/AlexRogalskiy/java-patterns/commit/c2ec221b) +- Updated with the latest blog posts [`d3b04ab8`](https://github.com/AlexRogalskiy/java-patterns/commit/d3b04ab8) +- Updated with the latest blog posts [`10912b0a`](https://github.com/AlexRogalskiy/java-patterns/commit/10912b0a) +- Updated with the latest blog posts [`c8cb3aad`](https://github.com/AlexRogalskiy/java-patterns/commit/c8cb3aad) +- Updated with the latest blog posts [`1614c84f`](https://github.com/AlexRogalskiy/java-patterns/commit/1614c84f) +- Updated with the latest blog posts [`7f04978b`](https://github.com/AlexRogalskiy/java-patterns/commit/7f04978b) +- Updated with the latest blog posts [`ba9de623`](https://github.com/AlexRogalskiy/java-patterns/commit/ba9de623) +- Updated with the latest blog posts [`51115ee5`](https://github.com/AlexRogalskiy/java-patterns/commit/51115ee5) +- Updated with the latest blog posts [`fc9846db`](https://github.com/AlexRogalskiy/java-patterns/commit/fc9846db) +- docs: updates on docs page speed [`b7727518`](https://github.com/AlexRogalskiy/java-patterns/commit/b7727518) +- Added info on workflows [`abcc9bb6`](https://github.com/AlexRogalskiy/java-patterns/commit/abcc9bb6) +- Auto update markdown TOC [`0bddb479`](https://github.com/AlexRogalskiy/java-patterns/commit/0bddb479) +- Added info on workflows [`118755a6`](https://github.com/AlexRogalskiy/java-patterns/commit/118755a6) +- Added info on workflows [`fffe314d`](https://github.com/AlexRogalskiy/java-patterns/commit/fffe314d) +- Auto update markdown TOC [`9975adbe`](https://github.com/AlexRogalskiy/java-patterns/commit/9975adbe) +- Added info on workflows [`85db37f7`](https://github.com/AlexRogalskiy/java-patterns/commit/85db37f7) +- Updated with the latest blog posts [`9e4ff161`](https://github.com/AlexRogalskiy/java-patterns/commit/9e4ff161) +- Updated with the latest blog posts [`d983bf64`](https://github.com/AlexRogalskiy/java-patterns/commit/d983bf64) +- Updated with the latest blog posts [`cb758499`](https://github.com/AlexRogalskiy/java-patterns/commit/cb758499) +- docs: updates on docs page speed [`fe652f65`](https://github.com/AlexRogalskiy/java-patterns/commit/fe652f65) +- Auto update markdown TOC [`cf3de998`](https://github.com/AlexRogalskiy/java-patterns/commit/cf3de998) +- Added info on workflows [`709f1478`](https://github.com/AlexRogalskiy/java-patterns/commit/709f1478) +- Updated with the latest blog posts [`3999bd3b`](https://github.com/AlexRogalskiy/java-patterns/commit/3999bd3b) +- Updated with the latest blog posts [`389aba0b`](https://github.com/AlexRogalskiy/java-patterns/commit/389aba0b) +- Updated with the latest blog posts [`f4ed7452`](https://github.com/AlexRogalskiy/java-patterns/commit/f4ed7452) +- Updated with the latest blog posts [`3ab31692`](https://github.com/AlexRogalskiy/java-patterns/commit/3ab31692) +- Updated with the latest blog posts [`5443bc02`](https://github.com/AlexRogalskiy/java-patterns/commit/5443bc02) +- Updated with the latest blog posts [`cb84e9fb`](https://github.com/AlexRogalskiy/java-patterns/commit/cb84e9fb) +- Updated with the latest blog posts [`764ffb11`](https://github.com/AlexRogalskiy/java-patterns/commit/764ffb11) +- Updated with the latest blog posts [`1b1ba4d0`](https://github.com/AlexRogalskiy/java-patterns/commit/1b1ba4d0) +- Updated with the latest blog posts [`3000f9bb`](https://github.com/AlexRogalskiy/java-patterns/commit/3000f9bb) +- Updated with the latest blog posts [`2028944f`](https://github.com/AlexRogalskiy/java-patterns/commit/2028944f) +- docs: updates on docs page speed [`33ff9bc7`](https://github.com/AlexRogalskiy/java-patterns/commit/33ff9bc7) +- Added info on workflows [`25e29d8e`](https://github.com/AlexRogalskiy/java-patterns/commit/25e29d8e) +- Auto update markdown TOC [`45fc21e4`](https://github.com/AlexRogalskiy/java-patterns/commit/45fc21e4) +- Added info on workflows [`862d72b5`](https://github.com/AlexRogalskiy/java-patterns/commit/862d72b5) +- Optimised images with calibre/image-actions [`c1fe6f7c`](https://github.com/AlexRogalskiy/java-patterns/commit/c1fe6f7c) +- Added info on workflows [`41242790`](https://github.com/AlexRogalskiy/java-patterns/commit/41242790) +- Auto update markdown TOC [`a3d24706`](https://github.com/AlexRogalskiy/java-patterns/commit/a3d24706) +- Added info on workflows [`c06fc3b8`](https://github.com/AlexRogalskiy/java-patterns/commit/c06fc3b8) +- Updated with the latest blog posts [`34aaad20`](https://github.com/AlexRogalskiy/java-patterns/commit/34aaad20) +- docs: updates on docs page speed [`545b6a43`](https://github.com/AlexRogalskiy/java-patterns/commit/545b6a43) +- Updated with the latest blog posts [`d68a4ee5`](https://github.com/AlexRogalskiy/java-patterns/commit/d68a4ee5) +- docs: updates on docs page speed [`b8b9d455`](https://github.com/AlexRogalskiy/java-patterns/commit/b8b9d455) +- GitHub traffic [`d38e4fe3`](https://github.com/AlexRogalskiy/java-patterns/commit/d38e4fe3) +- Updated with the latest blog posts [`72ad5377`](https://github.com/AlexRogalskiy/java-patterns/commit/72ad5377) +- docs: updates on docs page speed [`00769f9c`](https://github.com/AlexRogalskiy/java-patterns/commit/00769f9c) +- Optimised images with calibre/image-actions [`8813c7fd`](https://github.com/AlexRogalskiy/java-patterns/commit/8813c7fd) +- Added info on workflows [`4b64d946`](https://github.com/AlexRogalskiy/java-patterns/commit/4b64d946) +- Updated with the latest blog posts [`4cd3c939`](https://github.com/AlexRogalskiy/java-patterns/commit/4cd3c939) +- Updated with the latest blog posts [`f3a352be`](https://github.com/AlexRogalskiy/java-patterns/commit/f3a352be) +- Updated with the latest blog posts [`6fb31eaf`](https://github.com/AlexRogalskiy/java-patterns/commit/6fb31eaf) +- Updated with the latest blog posts [`5701cc42`](https://github.com/AlexRogalskiy/java-patterns/commit/5701cc42) +- Updated with the latest blog posts [`3b7ff2e3`](https://github.com/AlexRogalskiy/java-patterns/commit/3b7ff2e3) +- Updated with the latest blog posts [`ebde0769`](https://github.com/AlexRogalskiy/java-patterns/commit/ebde0769) +- Updated with the latest blog posts [`bfbede0b`](https://github.com/AlexRogalskiy/java-patterns/commit/bfbede0b) +- Updated with the latest blog posts [`c3400f70`](https://github.com/AlexRogalskiy/java-patterns/commit/c3400f70) +- Updated with the latest blog posts [`70b3f898`](https://github.com/AlexRogalskiy/java-patterns/commit/70b3f898) +- Updated with the latest blog posts [`fb66cb45`](https://github.com/AlexRogalskiy/java-patterns/commit/fb66cb45) +- docs: updates on docs page speed [`42c260db`](https://github.com/AlexRogalskiy/java-patterns/commit/42c260db) +- Auto update markdown TOC [`f39c72e5`](https://github.com/AlexRogalskiy/java-patterns/commit/f39c72e5) +- Added info on workflows [`62d97498`](https://github.com/AlexRogalskiy/java-patterns/commit/62d97498) +- Updated with the latest blog posts [`35a47ce2`](https://github.com/AlexRogalskiy/java-patterns/commit/35a47ce2) +- Updated with the latest blog posts [`cbef1def`](https://github.com/AlexRogalskiy/java-patterns/commit/cbef1def) +- docs: updates on docs page speed [`5809b28b`](https://github.com/AlexRogalskiy/java-patterns/commit/5809b28b) +- Updated with the latest blog posts [`c7e4778a`](https://github.com/AlexRogalskiy/java-patterns/commit/c7e4778a) +- Updated with the latest blog posts [`df57ed25`](https://github.com/AlexRogalskiy/java-patterns/commit/df57ed25) +- Updated with the latest blog posts [`077ab2f5`](https://github.com/AlexRogalskiy/java-patterns/commit/077ab2f5) +- Updated with the latest blog posts [`4f34ac04`](https://github.com/AlexRogalskiy/java-patterns/commit/4f34ac04) +- Updated with the latest blog posts [`d7c1f0cc`](https://github.com/AlexRogalskiy/java-patterns/commit/d7c1f0cc) +- docs: updates on docs page speed [`106488f1`](https://github.com/AlexRogalskiy/java-patterns/commit/106488f1) +- Updated with the latest blog posts [`45cbdb6c`](https://github.com/AlexRogalskiy/java-patterns/commit/45cbdb6c) +- Updated with the latest blog posts [`ee90d93c`](https://github.com/AlexRogalskiy/java-patterns/commit/ee90d93c) +- docs: updates on docs page speed [`4ea30bd6`](https://github.com/AlexRogalskiy/java-patterns/commit/4ea30bd6) +- Updated with the latest blog posts [`cfa15d76`](https://github.com/AlexRogalskiy/java-patterns/commit/cfa15d76) +- docs: updates on docs page speed [`bf515376`](https://github.com/AlexRogalskiy/java-patterns/commit/bf515376) +- GitHub traffic [`acbf1a93`](https://github.com/AlexRogalskiy/java-patterns/commit/acbf1a93) +- Updated with the latest blog posts [`0a92094b`](https://github.com/AlexRogalskiy/java-patterns/commit/0a92094b) +- docs: updates on docs page speed [`07d65c7f`](https://github.com/AlexRogalskiy/java-patterns/commit/07d65c7f) +- Added info on workflows [`3ec15074`](https://github.com/AlexRogalskiy/java-patterns/commit/3ec15074) +- Updated with the latest blog posts [`5a6825c8`](https://github.com/AlexRogalskiy/java-patterns/commit/5a6825c8) +- Updated with the latest blog posts [`f63593bf`](https://github.com/AlexRogalskiy/java-patterns/commit/f63593bf) +- Updated with the latest blog posts [`9c13809c`](https://github.com/AlexRogalskiy/java-patterns/commit/9c13809c) +- Updated with the latest blog posts [`3c54e4d5`](https://github.com/AlexRogalskiy/java-patterns/commit/3c54e4d5) +- Updated with the latest blog posts [`4579faa6`](https://github.com/AlexRogalskiy/java-patterns/commit/4579faa6) +- Updated with the latest blog posts [`7af2089c`](https://github.com/AlexRogalskiy/java-patterns/commit/7af2089c) +- Updated with the latest blog posts [`bb84a0ab`](https://github.com/AlexRogalskiy/java-patterns/commit/bb84a0ab) +- Updated with the latest blog posts [`4c76b5ee`](https://github.com/AlexRogalskiy/java-patterns/commit/4c76b5ee) +- Updated with the latest blog posts [`f8b2faed`](https://github.com/AlexRogalskiy/java-patterns/commit/f8b2faed) +- Updated with the latest blog posts [`302f4454`](https://github.com/AlexRogalskiy/java-patterns/commit/302f4454) +- docs: updates on docs page speed [`ff842b00`](https://github.com/AlexRogalskiy/java-patterns/commit/ff842b00) +- Auto update markdown TOC [`00a99571`](https://github.com/AlexRogalskiy/java-patterns/commit/00a99571) +- Added info on workflows [`c5506fde`](https://github.com/AlexRogalskiy/java-patterns/commit/c5506fde) +- Updated with the latest blog posts [`c1e8bc05`](https://github.com/AlexRogalskiy/java-patterns/commit/c1e8bc05) +- Updated with the latest blog posts [`804150f0`](https://github.com/AlexRogalskiy/java-patterns/commit/804150f0) +- docs: updates on docs page speed [`d198c5ef`](https://github.com/AlexRogalskiy/java-patterns/commit/d198c5ef) +- Auto update markdown TOC [`8a4b2f3c`](https://github.com/AlexRogalskiy/java-patterns/commit/8a4b2f3c) +- Added info on workflows [`d607d6af`](https://github.com/AlexRogalskiy/java-patterns/commit/d607d6af) +- Updated with the latest blog posts [`341e86bc`](https://github.com/AlexRogalskiy/java-patterns/commit/341e86bc) +- Updated with the latest blog posts [`694d1196`](https://github.com/AlexRogalskiy/java-patterns/commit/694d1196) +- Updated with the latest blog posts [`37b6a678`](https://github.com/AlexRogalskiy/java-patterns/commit/37b6a678) +- Updated with the latest blog posts [`673324c0`](https://github.com/AlexRogalskiy/java-patterns/commit/673324c0) +- Updated with the latest blog posts [`cdfa340a`](https://github.com/AlexRogalskiy/java-patterns/commit/cdfa340a) +- Updated with the latest blog posts [`6244bc27`](https://github.com/AlexRogalskiy/java-patterns/commit/6244bc27) +- Updated with the latest blog posts [`27ee7d63`](https://github.com/AlexRogalskiy/java-patterns/commit/27ee7d63) +- Updated with the latest blog posts [`cd3f6720`](https://github.com/AlexRogalskiy/java-patterns/commit/cd3f6720) +- Updated with the latest blog posts [`8740882e`](https://github.com/AlexRogalskiy/java-patterns/commit/8740882e) +- Updated with the latest blog posts [`78b35ad0`](https://github.com/AlexRogalskiy/java-patterns/commit/78b35ad0) +- docs: updates on docs page speed [`1296cf80`](https://github.com/AlexRogalskiy/java-patterns/commit/1296cf80) +- Added info on workflows [`64a3f9a6`](https://github.com/AlexRogalskiy/java-patterns/commit/64a3f9a6) +- Added info on workflows [`1f87bf22`](https://github.com/AlexRogalskiy/java-patterns/commit/1f87bf22) +- Auto update markdown TOC [`eeec1320`](https://github.com/AlexRogalskiy/java-patterns/commit/eeec1320) +- Added info on workflows [`819dbb68`](https://github.com/AlexRogalskiy/java-patterns/commit/819dbb68) +- Optimised images with calibre/image-actions [`136f0d53`](https://github.com/AlexRogalskiy/java-patterns/commit/136f0d53) +- Added info on workflows [`29589d4f`](https://github.com/AlexRogalskiy/java-patterns/commit/29589d4f) +- Updated with the latest blog posts [`e075af63`](https://github.com/AlexRogalskiy/java-patterns/commit/e075af63) +- Updated with the latest blog posts [`a460bd96`](https://github.com/AlexRogalskiy/java-patterns/commit/a460bd96) +- Updated with the latest blog posts [`7af7594c`](https://github.com/AlexRogalskiy/java-patterns/commit/7af7594c) +- Updated with the latest blog posts [`381b17b0`](https://github.com/AlexRogalskiy/java-patterns/commit/381b17b0) +- Updated with the latest blog posts [`7e7c405a`](https://github.com/AlexRogalskiy/java-patterns/commit/7e7c405a) +- Updated with the latest blog posts [`66d403d3`](https://github.com/AlexRogalskiy/java-patterns/commit/66d403d3) +- Updated with the latest blog posts [`f3db2b21`](https://github.com/AlexRogalskiy/java-patterns/commit/f3db2b21) +- Updated with the latest blog posts [`0b177e85`](https://github.com/AlexRogalskiy/java-patterns/commit/0b177e85) +- Updated with the latest blog posts [`e459c82c`](https://github.com/AlexRogalskiy/java-patterns/commit/e459c82c) +- Updated with the latest blog posts [`de06cf27`](https://github.com/AlexRogalskiy/java-patterns/commit/de06cf27) +- docs: updates on docs page speed [`a249d7ab`](https://github.com/AlexRogalskiy/java-patterns/commit/a249d7ab) +- Auto update markdown TOC [`30d04164`](https://github.com/AlexRogalskiy/java-patterns/commit/30d04164) +- Added info on workflows [`28d68ca9`](https://github.com/AlexRogalskiy/java-patterns/commit/28d68ca9) +- Added info on workflows [`e25119fc`](https://github.com/AlexRogalskiy/java-patterns/commit/e25119fc) +- Updated with the latest blog posts [`645225c9`](https://github.com/AlexRogalskiy/java-patterns/commit/645225c9) +- docs: updates on docs page speed [`a1377a85`](https://github.com/AlexRogalskiy/java-patterns/commit/a1377a85) +- Updated with the latest blog posts [`b8dc95f0`](https://github.com/AlexRogalskiy/java-patterns/commit/b8dc95f0) +- Updated with the latest blog posts [`cb97eb10`](https://github.com/AlexRogalskiy/java-patterns/commit/cb97eb10) +- docs: updates on docs page speed [`afe2ba57`](https://github.com/AlexRogalskiy/java-patterns/commit/afe2ba57) +- GitHub traffic [`6c54f79f`](https://github.com/AlexRogalskiy/java-patterns/commit/6c54f79f) +- Updated with the latest blog posts [`c0634fd1`](https://github.com/AlexRogalskiy/java-patterns/commit/c0634fd1) +- docs: updates on docs page speed [`7ee5043c`](https://github.com/AlexRogalskiy/java-patterns/commit/7ee5043c) +- Updated with the latest blog posts [`4ccf8b52`](https://github.com/AlexRogalskiy/java-patterns/commit/4ccf8b52) +- Updated with the latest blog posts [`6e606016`](https://github.com/AlexRogalskiy/java-patterns/commit/6e606016) +- docs: updates on docs page speed [`287f3de7`](https://github.com/AlexRogalskiy/java-patterns/commit/287f3de7) +- Updated with the latest blog posts [`cc51519d`](https://github.com/AlexRogalskiy/java-patterns/commit/cc51519d) +- Updated with the latest blog posts [`cf4b9008`](https://github.com/AlexRogalskiy/java-patterns/commit/cf4b9008) +- docs: updates on docs page speed [`75be4f5e`](https://github.com/AlexRogalskiy/java-patterns/commit/75be4f5e) +- Updated with the latest blog posts [`e9fab3ea`](https://github.com/AlexRogalskiy/java-patterns/commit/e9fab3ea) +- Updated with the latest blog posts [`baeee1ad`](https://github.com/AlexRogalskiy/java-patterns/commit/baeee1ad) +- Updated with the latest blog posts [`8b26e508`](https://github.com/AlexRogalskiy/java-patterns/commit/8b26e508) +- Updated with the latest blog posts [`4e62c4f8`](https://github.com/AlexRogalskiy/java-patterns/commit/4e62c4f8) +- Updated with the latest blog posts [`9193e532`](https://github.com/AlexRogalskiy/java-patterns/commit/9193e532) +- Updated with the latest blog posts [`ba00b69d`](https://github.com/AlexRogalskiy/java-patterns/commit/ba00b69d) +- Updated with the latest blog posts [`38c2f822`](https://github.com/AlexRogalskiy/java-patterns/commit/38c2f822) +- Updated with the latest blog posts [`399efc62`](https://github.com/AlexRogalskiy/java-patterns/commit/399efc62) +- Updated with the latest blog posts [`33b68528`](https://github.com/AlexRogalskiy/java-patterns/commit/33b68528) +- Updated with the latest blog posts [`d696efe3`](https://github.com/AlexRogalskiy/java-patterns/commit/d696efe3) +- docs: updates on docs page speed [`e53fdfab`](https://github.com/AlexRogalskiy/java-patterns/commit/e53fdfab) +- Optimised images with calibre/image-actions [`e00d0619`](https://github.com/AlexRogalskiy/java-patterns/commit/e00d0619) +- Added info on workflows [`c350f8eb`](https://github.com/AlexRogalskiy/java-patterns/commit/c350f8eb) +- Auto update markdown TOC [`5dfaadac`](https://github.com/AlexRogalskiy/java-patterns/commit/5dfaadac) +- Added info on workflows [`67c6c841`](https://github.com/AlexRogalskiy/java-patterns/commit/67c6c841) +- Updated with the latest blog posts [`24bdde18`](https://github.com/AlexRogalskiy/java-patterns/commit/24bdde18) +- Updated with the latest blog posts [`44469e5b`](https://github.com/AlexRogalskiy/java-patterns/commit/44469e5b) +- docs: updates on docs page speed [`8c7d45ce`](https://github.com/AlexRogalskiy/java-patterns/commit/8c7d45ce) +- Updated with the latest blog posts [`c8c427bc`](https://github.com/AlexRogalskiy/java-patterns/commit/c8c427bc) +- docs: updates on docs page speed [`1fe5f6ff`](https://github.com/AlexRogalskiy/java-patterns/commit/1fe5f6ff) +- Updated with the latest blog posts [`c9ec638e`](https://github.com/AlexRogalskiy/java-patterns/commit/c9ec638e) +- docs: updates on docs page speed [`2c4c1746`](https://github.com/AlexRogalskiy/java-patterns/commit/2c4c1746) +- GitHub traffic [`172593a3`](https://github.com/AlexRogalskiy/java-patterns/commit/172593a3) +- Updated with the latest blog posts [`51ff1cd9`](https://github.com/AlexRogalskiy/java-patterns/commit/51ff1cd9) +- docs: updates on docs page speed [`f45322eb`](https://github.com/AlexRogalskiy/java-patterns/commit/f45322eb) +- Updated with the latest blog posts [`8a7f1e94`](https://github.com/AlexRogalskiy/java-patterns/commit/8a7f1e94) +- docs: updates on docs page speed [`0e9934f2`](https://github.com/AlexRogalskiy/java-patterns/commit/0e9934f2) +- Updated with the latest blog posts [`5edafd8b`](https://github.com/AlexRogalskiy/java-patterns/commit/5edafd8b) +- docs: updates on docs page speed [`168af22d`](https://github.com/AlexRogalskiy/java-patterns/commit/168af22d) +- Updated with the latest blog posts [`261239b7`](https://github.com/AlexRogalskiy/java-patterns/commit/261239b7) +- Updated with the latest blog posts [`7c8f6456`](https://github.com/AlexRogalskiy/java-patterns/commit/7c8f6456) +- docs: updates on docs page speed [`a9686987`](https://github.com/AlexRogalskiy/java-patterns/commit/a9686987) +- Updated with the latest blog posts [`cf8438b3`](https://github.com/AlexRogalskiy/java-patterns/commit/cf8438b3) +- Updated with the latest blog posts [`65269f9d`](https://github.com/AlexRogalskiy/java-patterns/commit/65269f9d) +- docs: updates on docs page speed [`9a084119`](https://github.com/AlexRogalskiy/java-patterns/commit/9a084119) +- Updated with the latest blog posts [`29808dad`](https://github.com/AlexRogalskiy/java-patterns/commit/29808dad) +- docs: updates on docs page speed [`fce618c1`](https://github.com/AlexRogalskiy/java-patterns/commit/fce618c1) +- Auto update markdown TOC [`7aa8e3b2`](https://github.com/AlexRogalskiy/java-patterns/commit/7aa8e3b2) +- Added info on workflows [`3e361dea`](https://github.com/AlexRogalskiy/java-patterns/commit/3e361dea) +- Updated with the latest blog posts [`17a7b791`](https://github.com/AlexRogalskiy/java-patterns/commit/17a7b791) +- Updated with the latest blog posts [`f66adaa1`](https://github.com/AlexRogalskiy/java-patterns/commit/f66adaa1) +- Updated with the latest blog posts [`eccde470`](https://github.com/AlexRogalskiy/java-patterns/commit/eccde470) +- Updated with the latest blog posts [`5b1382f3`](https://github.com/AlexRogalskiy/java-patterns/commit/5b1382f3) +- Updated with the latest blog posts [`14b7d1ea`](https://github.com/AlexRogalskiy/java-patterns/commit/14b7d1ea) +- Updated with the latest blog posts [`6fbfdac5`](https://github.com/AlexRogalskiy/java-patterns/commit/6fbfdac5) +- Updated with the latest blog posts [`34af80e4`](https://github.com/AlexRogalskiy/java-patterns/commit/34af80e4) +- Updated with the latest blog posts [`065a3b9b`](https://github.com/AlexRogalskiy/java-patterns/commit/065a3b9b) +- Updated with the latest blog posts [`1ab66da5`](https://github.com/AlexRogalskiy/java-patterns/commit/1ab66da5) +- Updated with the latest blog posts [`254bef01`](https://github.com/AlexRogalskiy/java-patterns/commit/254bef01) +- docs: updates on docs page speed [`1cda4d93`](https://github.com/AlexRogalskiy/java-patterns/commit/1cda4d93) +- GitHub traffic [`c8980a45`](https://github.com/AlexRogalskiy/java-patterns/commit/c8980a45) +- Optimised images with calibre/image-actions [`2d72732d`](https://github.com/AlexRogalskiy/java-patterns/commit/2d72732d) +- Added info on workflows [`408d93be`](https://github.com/AlexRogalskiy/java-patterns/commit/408d93be) +- Auto update markdown TOC [`116ee5e6`](https://github.com/AlexRogalskiy/java-patterns/commit/116ee5e6) +- Added info on workflows [`ba581094`](https://github.com/AlexRogalskiy/java-patterns/commit/ba581094) +- Updated with the latest blog posts [`bf05b6df`](https://github.com/AlexRogalskiy/java-patterns/commit/bf05b6df) +- docs: updates on docs page speed [`87a64f7e`](https://github.com/AlexRogalskiy/java-patterns/commit/87a64f7e) +- Auto update markdown TOC [`82da97a0`](https://github.com/AlexRogalskiy/java-patterns/commit/82da97a0) +- Added info on workflows [`c4b83a6e`](https://github.com/AlexRogalskiy/java-patterns/commit/c4b83a6e) +- GitHub traffic [`f97e1125`](https://github.com/AlexRogalskiy/java-patterns/commit/f97e1125) +- Updated with the latest blog posts [`0e9005ed`](https://github.com/AlexRogalskiy/java-patterns/commit/0e9005ed) +- Updated with the latest blog posts [`8a282ba9`](https://github.com/AlexRogalskiy/java-patterns/commit/8a282ba9) +- Updated with the latest blog posts [`9555401a`](https://github.com/AlexRogalskiy/java-patterns/commit/9555401a) +- Updated with the latest blog posts [`07e3e183`](https://github.com/AlexRogalskiy/java-patterns/commit/07e3e183) +- Updated with the latest blog posts [`ffb72f05`](https://github.com/AlexRogalskiy/java-patterns/commit/ffb72f05) +- Updated with the latest blog posts [`17030dd7`](https://github.com/AlexRogalskiy/java-patterns/commit/17030dd7) +- Updated with the latest blog posts [`11755883`](https://github.com/AlexRogalskiy/java-patterns/commit/11755883) +- Updated with the latest blog posts [`88dd726a`](https://github.com/AlexRogalskiy/java-patterns/commit/88dd726a) +- Updated with the latest blog posts [`ffad4050`](https://github.com/AlexRogalskiy/java-patterns/commit/ffad4050) +- Updated with the latest blog posts [`9e5e63b7`](https://github.com/AlexRogalskiy/java-patterns/commit/9e5e63b7) +- docs: updates on docs page speed [`d291e37f`](https://github.com/AlexRogalskiy/java-patterns/commit/d291e37f) +- Added info on workflows [`18058d0a`](https://github.com/AlexRogalskiy/java-patterns/commit/18058d0a) +- Auto update markdown TOC [`b818d8e4`](https://github.com/AlexRogalskiy/java-patterns/commit/b818d8e4) +- Added info on workflows [`56cf7751`](https://github.com/AlexRogalskiy/java-patterns/commit/56cf7751) +- Updated with the latest blog posts [`eb9d49ea`](https://github.com/AlexRogalskiy/java-patterns/commit/eb9d49ea) +- Updated with the latest blog posts [`2d4d1964`](https://github.com/AlexRogalskiy/java-patterns/commit/2d4d1964) +- Updated with the latest blog posts [`f8efda5f`](https://github.com/AlexRogalskiy/java-patterns/commit/f8efda5f) +- Updated with the latest blog posts [`6857d6da`](https://github.com/AlexRogalskiy/java-patterns/commit/6857d6da) +- Updated with the latest blog posts [`c5da6976`](https://github.com/AlexRogalskiy/java-patterns/commit/c5da6976) +- Updated with the latest blog posts [`2881ce02`](https://github.com/AlexRogalskiy/java-patterns/commit/2881ce02) +- Updated with the latest blog posts [`edb726c1`](https://github.com/AlexRogalskiy/java-patterns/commit/edb726c1) +- Updated with the latest blog posts [`060d6c20`](https://github.com/AlexRogalskiy/java-patterns/commit/060d6c20) +- Updated with the latest blog posts [`d211f68b`](https://github.com/AlexRogalskiy/java-patterns/commit/d211f68b) +- Updated with the latest blog posts [`d5a2eee8`](https://github.com/AlexRogalskiy/java-patterns/commit/d5a2eee8) +- docs: updates on docs page speed [`2aefb954`](https://github.com/AlexRogalskiy/java-patterns/commit/2aefb954) +- Added info on workflows [`0f8ec582`](https://github.com/AlexRogalskiy/java-patterns/commit/0f8ec582) +- Added info on workflows [`d14295cb`](https://github.com/AlexRogalskiy/java-patterns/commit/d14295cb) +- Auto update markdown TOC [`e7244810`](https://github.com/AlexRogalskiy/java-patterns/commit/e7244810) +- Added info on workflows [`ec543a2b`](https://github.com/AlexRogalskiy/java-patterns/commit/ec543a2b) +- Updated with the latest blog posts [`4c5eb1d3`](https://github.com/AlexRogalskiy/java-patterns/commit/4c5eb1d3) +- Updated with the latest blog posts [`32a5964f`](https://github.com/AlexRogalskiy/java-patterns/commit/32a5964f) +- docs: updates on docs page speed [`52f9690d`](https://github.com/AlexRogalskiy/java-patterns/commit/52f9690d) +- Updated with the latest blog posts [`986c03c5`](https://github.com/AlexRogalskiy/java-patterns/commit/986c03c5) +- Updated with the latest blog posts [`12496959`](https://github.com/AlexRogalskiy/java-patterns/commit/12496959) +- Updated with the latest blog posts [`32b54f9c`](https://github.com/AlexRogalskiy/java-patterns/commit/32b54f9c) +- docs: updates on docs page speed [`f1675563`](https://github.com/AlexRogalskiy/java-patterns/commit/f1675563) +- Updated with the latest blog posts [`3e4d523a`](https://github.com/AlexRogalskiy/java-patterns/commit/3e4d523a) +- docs: updates on docs page speed [`b1fcc90b`](https://github.com/AlexRogalskiy/java-patterns/commit/b1fcc90b) +- Updated with the latest blog posts [`ea1b889d`](https://github.com/AlexRogalskiy/java-patterns/commit/ea1b889d) +- docs: updates on docs page speed [`8de098d9`](https://github.com/AlexRogalskiy/java-patterns/commit/8de098d9) +- Updated with the latest blog posts [`14d1f755`](https://github.com/AlexRogalskiy/java-patterns/commit/14d1f755) +- docs: updates on docs page speed [`9e225716`](https://github.com/AlexRogalskiy/java-patterns/commit/9e225716) +- Updated with the latest blog posts [`b57d2c9d`](https://github.com/AlexRogalskiy/java-patterns/commit/b57d2c9d) +- docs: updates on docs page speed [`670b2589`](https://github.com/AlexRogalskiy/java-patterns/commit/670b2589) +- Updated with the latest blog posts [`550bbeec`](https://github.com/AlexRogalskiy/java-patterns/commit/550bbeec) +- Updated with the latest blog posts [`5c5efc8d`](https://github.com/AlexRogalskiy/java-patterns/commit/5c5efc8d) +- Updated with the latest blog posts [`3e9eafb4`](https://github.com/AlexRogalskiy/java-patterns/commit/3e9eafb4) +- docs: updates on docs page speed [`2eabf29e`](https://github.com/AlexRogalskiy/java-patterns/commit/2eabf29e) +- Updated with the latest blog posts [`866f11b0`](https://github.com/AlexRogalskiy/java-patterns/commit/866f11b0) +- Updated with the latest blog posts [`328cb501`](https://github.com/AlexRogalskiy/java-patterns/commit/328cb501) +- Updated with the latest blog posts [`a79108fd`](https://github.com/AlexRogalskiy/java-patterns/commit/a79108fd) +- Updated with the latest blog posts [`bedd273f`](https://github.com/AlexRogalskiy/java-patterns/commit/bedd273f) +- Updated with the latest blog posts [`ca7242ec`](https://github.com/AlexRogalskiy/java-patterns/commit/ca7242ec) +- Updated with the latest blog posts [`80300902`](https://github.com/AlexRogalskiy/java-patterns/commit/80300902) +- Updated with the latest blog posts [`82c3d859`](https://github.com/AlexRogalskiy/java-patterns/commit/82c3d859) +- Updated with the latest blog posts [`78523895`](https://github.com/AlexRogalskiy/java-patterns/commit/78523895) +- Updated with the latest blog posts [`a0c194fe`](https://github.com/AlexRogalskiy/java-patterns/commit/a0c194fe) +- Updated with the latest blog posts [`13b39360`](https://github.com/AlexRogalskiy/java-patterns/commit/13b39360) +- docs: updates on docs page speed [`6a7ba5ca`](https://github.com/AlexRogalskiy/java-patterns/commit/6a7ba5ca) +- Auto update markdown TOC [`398c0660`](https://github.com/AlexRogalskiy/java-patterns/commit/398c0660) +- Added info on workflows [`1f54da4e`](https://github.com/AlexRogalskiy/java-patterns/commit/1f54da4e) +- Updated with the latest blog posts [`18def2f0`](https://github.com/AlexRogalskiy/java-patterns/commit/18def2f0) +- Updated with the latest blog posts [`e6823cb1`](https://github.com/AlexRogalskiy/java-patterns/commit/e6823cb1) +- docs: updates on docs page speed [`20437d47`](https://github.com/AlexRogalskiy/java-patterns/commit/20437d47) +- Updated with the latest blog posts [`480392c7`](https://github.com/AlexRogalskiy/java-patterns/commit/480392c7) +- docs: updates on docs page speed [`fb3ff092`](https://github.com/AlexRogalskiy/java-patterns/commit/fb3ff092) +- Updated with the latest blog posts [`2d185c1b`](https://github.com/AlexRogalskiy/java-patterns/commit/2d185c1b) +- docs: updates on docs page speed [`c10dc9e1`](https://github.com/AlexRogalskiy/java-patterns/commit/c10dc9e1) +- Updated with the latest blog posts [`0be24268`](https://github.com/AlexRogalskiy/java-patterns/commit/0be24268) +- Updated with the latest blog posts [`3cc0c0a6`](https://github.com/AlexRogalskiy/java-patterns/commit/3cc0c0a6) +- docs: updates on docs page speed [`0ff43871`](https://github.com/AlexRogalskiy/java-patterns/commit/0ff43871) +- Updated with the latest blog posts [`bca1749b`](https://github.com/AlexRogalskiy/java-patterns/commit/bca1749b) +- docs: updates on docs page speed [`51d0d8bd`](https://github.com/AlexRogalskiy/java-patterns/commit/51d0d8bd) +- Updated with the latest blog posts [`ea326cf4`](https://github.com/AlexRogalskiy/java-patterns/commit/ea326cf4) +- Updated with the latest blog posts [`9d039f1e`](https://github.com/AlexRogalskiy/java-patterns/commit/9d039f1e) +- docs: updates on docs page speed [`4df172eb`](https://github.com/AlexRogalskiy/java-patterns/commit/4df172eb) +- Updated with the latest blog posts [`8b850758`](https://github.com/AlexRogalskiy/java-patterns/commit/8b850758) +- Updated with the latest blog posts [`737dde33`](https://github.com/AlexRogalskiy/java-patterns/commit/737dde33) +- docs: updates on docs page speed [`b4fb2f54`](https://github.com/AlexRogalskiy/java-patterns/commit/b4fb2f54) +- Updated with the latest blog posts [`aa25f243`](https://github.com/AlexRogalskiy/java-patterns/commit/aa25f243) +- Updated with the latest blog posts [`161a4726`](https://github.com/AlexRogalskiy/java-patterns/commit/161a4726) +- docs: updates on docs page speed [`a0d57cac`](https://github.com/AlexRogalskiy/java-patterns/commit/a0d57cac) +- Updated with the latest blog posts [`27a31336`](https://github.com/AlexRogalskiy/java-patterns/commit/27a31336) +- Updated with the latest blog posts [`f408648a`](https://github.com/AlexRogalskiy/java-patterns/commit/f408648a) +- docs: updates on docs page speed [`b0c42175`](https://github.com/AlexRogalskiy/java-patterns/commit/b0c42175) +- Updated with the latest blog posts [`d22088fb`](https://github.com/AlexRogalskiy/java-patterns/commit/d22088fb) +- docs: updates on docs page speed [`abacf14e`](https://github.com/AlexRogalskiy/java-patterns/commit/abacf14e) +- Updated with the latest blog posts [`0f8220a6`](https://github.com/AlexRogalskiy/java-patterns/commit/0f8220a6) +- docs: updates on docs page speed [`e9911c71`](https://github.com/AlexRogalskiy/java-patterns/commit/e9911c71) +- Updated with the latest blog posts [`03ebbfdb`](https://github.com/AlexRogalskiy/java-patterns/commit/03ebbfdb) +- Updated with the latest blog posts [`5a04119d`](https://github.com/AlexRogalskiy/java-patterns/commit/5a04119d) +- Updated with the latest blog posts [`34e87ea2`](https://github.com/AlexRogalskiy/java-patterns/commit/34e87ea2) +- docs: updates on docs page speed [`b012b29a`](https://github.com/AlexRogalskiy/java-patterns/commit/b012b29a) +- Updated with the latest blog posts [`32fd1459`](https://github.com/AlexRogalskiy/java-patterns/commit/32fd1459) +- docs: updates on docs page speed [`7829b248`](https://github.com/AlexRogalskiy/java-patterns/commit/7829b248) +- Updated with the latest blog posts [`98f4ba01`](https://github.com/AlexRogalskiy/java-patterns/commit/98f4ba01) +- docs: updates on docs page speed [`9eb4b298`](https://github.com/AlexRogalskiy/java-patterns/commit/9eb4b298) +- Updated with the latest blog posts [`d12413a2`](https://github.com/AlexRogalskiy/java-patterns/commit/d12413a2) +- Updated with the latest blog posts [`39ea5687`](https://github.com/AlexRogalskiy/java-patterns/commit/39ea5687) +- docs: updates on docs page speed [`d28fc9ed`](https://github.com/AlexRogalskiy/java-patterns/commit/d28fc9ed) +- Updated with the latest blog posts [`2def7c82`](https://github.com/AlexRogalskiy/java-patterns/commit/2def7c82) +- docs: updates on docs page speed [`734e42ab`](https://github.com/AlexRogalskiy/java-patterns/commit/734e42ab) +- Updated with the latest blog posts [`c638b47f`](https://github.com/AlexRogalskiy/java-patterns/commit/c638b47f) +- docs: updates on docs page speed [`744837a2`](https://github.com/AlexRogalskiy/java-patterns/commit/744837a2) +- Updated with the latest blog posts [`412183ac`](https://github.com/AlexRogalskiy/java-patterns/commit/412183ac) +- Updated with the latest blog posts [`ab2c1c5f`](https://github.com/AlexRogalskiy/java-patterns/commit/ab2c1c5f) +- docs: updates on docs page speed [`800633bb`](https://github.com/AlexRogalskiy/java-patterns/commit/800633bb) +- Updated with the latest blog posts [`400facab`](https://github.com/AlexRogalskiy/java-patterns/commit/400facab) +- Updated with the latest blog posts [`88fc1f2c`](https://github.com/AlexRogalskiy/java-patterns/commit/88fc1f2c) +- docs: updates on docs page speed [`1b35a2f5`](https://github.com/AlexRogalskiy/java-patterns/commit/1b35a2f5) +- Updated with the latest blog posts [`30304beb`](https://github.com/AlexRogalskiy/java-patterns/commit/30304beb) +- Updated with the latest blog posts [`bc35c786`](https://github.com/AlexRogalskiy/java-patterns/commit/bc35c786) +- Updated with the latest blog posts [`8d8478e8`](https://github.com/AlexRogalskiy/java-patterns/commit/8d8478e8) +- docs: updates on docs page speed [`f99063fa`](https://github.com/AlexRogalskiy/java-patterns/commit/f99063fa) +- Updated with the latest blog posts [`5bcb2850`](https://github.com/AlexRogalskiy/java-patterns/commit/5bcb2850) +- docs: updates on docs page speed [`69deadd1`](https://github.com/AlexRogalskiy/java-patterns/commit/69deadd1) +- Updated with the latest blog posts [`0edaa34d`](https://github.com/AlexRogalskiy/java-patterns/commit/0edaa34d) +- Updated with the latest blog posts [`2ca6786b`](https://github.com/AlexRogalskiy/java-patterns/commit/2ca6786b) +- docs: updates on docs page speed [`de50df8e`](https://github.com/AlexRogalskiy/java-patterns/commit/de50df8e) +- Updated with the latest blog posts [`84e5eca4`](https://github.com/AlexRogalskiy/java-patterns/commit/84e5eca4) +- Updated with the latest blog posts [`4da28526`](https://github.com/AlexRogalskiy/java-patterns/commit/4da28526) +- docs: updates on docs page speed [`49dcba68`](https://github.com/AlexRogalskiy/java-patterns/commit/49dcba68) +- Updated with the latest blog posts [`657a4c2a`](https://github.com/AlexRogalskiy/java-patterns/commit/657a4c2a) +- docs: updates on docs page speed [`f9486598`](https://github.com/AlexRogalskiy/java-patterns/commit/f9486598) +- Updated with the latest blog posts [`b76cecc9`](https://github.com/AlexRogalskiy/java-patterns/commit/b76cecc9) +- Updated with the latest blog posts [`19816666`](https://github.com/AlexRogalskiy/java-patterns/commit/19816666) +- docs: updates on docs page speed [`1fcb3882`](https://github.com/AlexRogalskiy/java-patterns/commit/1fcb3882) +- Updated with the latest blog posts [`3b59c4e8`](https://github.com/AlexRogalskiy/java-patterns/commit/3b59c4e8) +- Updated with the latest blog posts [`97697a15`](https://github.com/AlexRogalskiy/java-patterns/commit/97697a15) +- docs: updates on docs page speed [`9f86fe26`](https://github.com/AlexRogalskiy/java-patterns/commit/9f86fe26) +- docs: updates on documents [`c7a54b1c`](https://github.com/AlexRogalskiy/java-patterns/commit/c7a54b1c) +- Updated with the latest blog posts [`98f552e6`](https://github.com/AlexRogalskiy/java-patterns/commit/98f552e6) +- Updated with the latest blog posts [`cff61018`](https://github.com/AlexRogalskiy/java-patterns/commit/cff61018) +- Updated with the latest blog posts [`f394ae51`](https://github.com/AlexRogalskiy/java-patterns/commit/f394ae51) +- Updated with the latest blog posts [`bbf1df23`](https://github.com/AlexRogalskiy/java-patterns/commit/bbf1df23) +- docs: updates on docs page speed [`0e34a3ea`](https://github.com/AlexRogalskiy/java-patterns/commit/0e34a3ea) +- Updated with the latest blog posts [`c7b821f3`](https://github.com/AlexRogalskiy/java-patterns/commit/c7b821f3) +- Updated with the latest blog posts [`f57afb04`](https://github.com/AlexRogalskiy/java-patterns/commit/f57afb04) +- Updated with the latest blog posts [`cd62b0bf`](https://github.com/AlexRogalskiy/java-patterns/commit/cd62b0bf) +- Updated with the latest blog posts [`9a5048c8`](https://github.com/AlexRogalskiy/java-patterns/commit/9a5048c8) +- Updated with the latest blog posts [`8ec6561b`](https://github.com/AlexRogalskiy/java-patterns/commit/8ec6561b) +- Updated with the latest blog posts [`556f2cbb`](https://github.com/AlexRogalskiy/java-patterns/commit/556f2cbb) +- Updated with the latest blog posts [`2ac82fff`](https://github.com/AlexRogalskiy/java-patterns/commit/2ac82fff) +- Updated with the latest blog posts [`acffd7cf`](https://github.com/AlexRogalskiy/java-patterns/commit/acffd7cf) +- Updated with the latest blog posts [`c32f0615`](https://github.com/AlexRogalskiy/java-patterns/commit/c32f0615) +- Updated with the latest blog posts [`0a3d6898`](https://github.com/AlexRogalskiy/java-patterns/commit/0a3d6898) +- docs: updates on docs page speed [`6b411337`](https://github.com/AlexRogalskiy/java-patterns/commit/6b411337) +- Auto update markdown TOC [`cf8ff5f0`](https://github.com/AlexRogalskiy/java-patterns/commit/cf8ff5f0) +- docs: updates on workflows [`32837443`](https://github.com/AlexRogalskiy/java-patterns/commit/32837443) +- docs: updates on workflows [`f5fef494`](https://github.com/AlexRogalskiy/java-patterns/commit/f5fef494) +- Updated with the latest blog posts [`3dd359b4`](https://github.com/AlexRogalskiy/java-patterns/commit/3dd359b4) +- Updated with the latest blog posts [`fc66e8b2`](https://github.com/AlexRogalskiy/java-patterns/commit/fc66e8b2) +- Updated with the latest blog posts [`23768558`](https://github.com/AlexRogalskiy/java-patterns/commit/23768558) +- docs: updates on docs page speed [`f2249020`](https://github.com/AlexRogalskiy/java-patterns/commit/f2249020) +- Updated with the latest blog posts [`8e8b49b9`](https://github.com/AlexRogalskiy/java-patterns/commit/8e8b49b9) +- docs: updates on docs page speed [`4e3a7a55`](https://github.com/AlexRogalskiy/java-patterns/commit/4e3a7a55) +- Updated with the latest blog posts [`e7bbf938`](https://github.com/AlexRogalskiy/java-patterns/commit/e7bbf938) +- Updated with the latest blog posts [`f71f92c0`](https://github.com/AlexRogalskiy/java-patterns/commit/f71f92c0) +- docs: updates on docs page speed [`72bd0dfb`](https://github.com/AlexRogalskiy/java-patterns/commit/72bd0dfb) +- Updated with the latest blog posts [`b0274f4a`](https://github.com/AlexRogalskiy/java-patterns/commit/b0274f4a) +- Updated with the latest blog posts [`f035eb8f`](https://github.com/AlexRogalskiy/java-patterns/commit/f035eb8f) +- docs: updates on docs page speed [`c1feab60`](https://github.com/AlexRogalskiy/java-patterns/commit/c1feab60) +- Updated with the latest blog posts [`d0f233e2`](https://github.com/AlexRogalskiy/java-patterns/commit/d0f233e2) +- docs: updates on docs page speed [`3d2dda00`](https://github.com/AlexRogalskiy/java-patterns/commit/3d2dda00) +- Updated with the latest blog posts [`5cc4b1fd`](https://github.com/AlexRogalskiy/java-patterns/commit/5cc4b1fd) +- Updated with the latest blog posts [`49e06a60`](https://github.com/AlexRogalskiy/java-patterns/commit/49e06a60) +- Updated with the latest blog posts [`47fb2824`](https://github.com/AlexRogalskiy/java-patterns/commit/47fb2824) +- Updated with the latest blog posts [`c271d7e3`](https://github.com/AlexRogalskiy/java-patterns/commit/c271d7e3) +- docs: updates on docs page speed [`900a1b67`](https://github.com/AlexRogalskiy/java-patterns/commit/900a1b67) +- Updated with the latest blog posts [`a1451c51`](https://github.com/AlexRogalskiy/java-patterns/commit/a1451c51) +- Updated with the latest blog posts [`8863fc3f`](https://github.com/AlexRogalskiy/java-patterns/commit/8863fc3f) +- docs: updates on docs page speed [`4d96f388`](https://github.com/AlexRogalskiy/java-patterns/commit/4d96f388) +- Updated with the latest blog posts [`31e49f0e`](https://github.com/AlexRogalskiy/java-patterns/commit/31e49f0e) +- Updated with the latest blog posts [`97610415`](https://github.com/AlexRogalskiy/java-patterns/commit/97610415) +- Updated with the latest blog posts [`c119b9b4`](https://github.com/AlexRogalskiy/java-patterns/commit/c119b9b4) +- docs: updates on docs page speed [`dd2df30f`](https://github.com/AlexRogalskiy/java-patterns/commit/dd2df30f) +- Updated with the latest blog posts [`8b289848`](https://github.com/AlexRogalskiy/java-patterns/commit/8b289848) +- Updated with the latest blog posts [`f0963bf1`](https://github.com/AlexRogalskiy/java-patterns/commit/f0963bf1) +- Updated with the latest blog posts [`f1af8dff`](https://github.com/AlexRogalskiy/java-patterns/commit/f1af8dff) +- docs: updates on docs page speed [`0402c174`](https://github.com/AlexRogalskiy/java-patterns/commit/0402c174) +- Updated with the latest blog posts [`7fb72f32`](https://github.com/AlexRogalskiy/java-patterns/commit/7fb72f32) +- docs: updates on docs page speed [`c48a420e`](https://github.com/AlexRogalskiy/java-patterns/commit/c48a420e) +- Updated with the latest blog posts [`4856026e`](https://github.com/AlexRogalskiy/java-patterns/commit/4856026e) +- Updated with the latest blog posts [`29b82940`](https://github.com/AlexRogalskiy/java-patterns/commit/29b82940) +- docs: updates on docs page speed [`0e2b6413`](https://github.com/AlexRogalskiy/java-patterns/commit/0e2b6413) +- Updated with the latest blog posts [`4a5bfa1b`](https://github.com/AlexRogalskiy/java-patterns/commit/4a5bfa1b) +- Updated with the latest blog posts [`d7806ba8`](https://github.com/AlexRogalskiy/java-patterns/commit/d7806ba8) +- Updated with the latest blog posts [`c7a49c85`](https://github.com/AlexRogalskiy/java-patterns/commit/c7a49c85) +- docs: updates on docs page speed [`7d3c0a83`](https://github.com/AlexRogalskiy/java-patterns/commit/7d3c0a83) +- Updated with the latest blog posts [`8c886212`](https://github.com/AlexRogalskiy/java-patterns/commit/8c886212) +- Updated with the latest blog posts [`5f014bf9`](https://github.com/AlexRogalskiy/java-patterns/commit/5f014bf9) +- docs: updates on docs page speed [`a803f4b3`](https://github.com/AlexRogalskiy/java-patterns/commit/a803f4b3) +- Updated with the latest blog posts [`82ce6ede`](https://github.com/AlexRogalskiy/java-patterns/commit/82ce6ede) +- Updated with the latest blog posts [`8982a7d3`](https://github.com/AlexRogalskiy/java-patterns/commit/8982a7d3) +- docs: updates on docs page speed [`734ca17f`](https://github.com/AlexRogalskiy/java-patterns/commit/734ca17f) +- Updated with the latest blog posts [`832b3ff5`](https://github.com/AlexRogalskiy/java-patterns/commit/832b3ff5) +- Updated with the latest blog posts [`63f95f8b`](https://github.com/AlexRogalskiy/java-patterns/commit/63f95f8b) +- Updated with the latest blog posts [`30507f38`](https://github.com/AlexRogalskiy/java-patterns/commit/30507f38) +- Updated with the latest blog posts [`8b23c9ce`](https://github.com/AlexRogalskiy/java-patterns/commit/8b23c9ce) +- Updated with the latest blog posts [`2db14c7a`](https://github.com/AlexRogalskiy/java-patterns/commit/2db14c7a) +- docs: updates on docs page speed [`c6da1579`](https://github.com/AlexRogalskiy/java-patterns/commit/c6da1579) +- Updated with the latest blog posts [`c0b5bfa8`](https://github.com/AlexRogalskiy/java-patterns/commit/c0b5bfa8) +- Updated with the latest blog posts [`5902fd8d`](https://github.com/AlexRogalskiy/java-patterns/commit/5902fd8d) +- Updated with the latest blog posts [`93628b66`](https://github.com/AlexRogalskiy/java-patterns/commit/93628b66) +- docs: updates on docs page speed [`a8cdcecb`](https://github.com/AlexRogalskiy/java-patterns/commit/a8cdcecb) +- Updated with the latest blog posts [`992cdd98`](https://github.com/AlexRogalskiy/java-patterns/commit/992cdd98) +- Updated with the latest blog posts [`0e2baf54`](https://github.com/AlexRogalskiy/java-patterns/commit/0e2baf54) +- docs: updates on docs page speed [`4432384e`](https://github.com/AlexRogalskiy/java-patterns/commit/4432384e) +- Updated with the latest blog posts [`5b58ca66`](https://github.com/AlexRogalskiy/java-patterns/commit/5b58ca66) +- docs: updates on docs page speed [`0587b408`](https://github.com/AlexRogalskiy/java-patterns/commit/0587b408) +- Updated with the latest blog posts [`1c15fb35`](https://github.com/AlexRogalskiy/java-patterns/commit/1c15fb35) +- Updated with the latest blog posts [`5fd7577d`](https://github.com/AlexRogalskiy/java-patterns/commit/5fd7577d) +- Updated with the latest blog posts [`6d078bf6`](https://github.com/AlexRogalskiy/java-patterns/commit/6d078bf6) +- Updated with the latest blog posts [`252a0744`](https://github.com/AlexRogalskiy/java-patterns/commit/252a0744) +- docs: updates on docs page speed [`6b4551a0`](https://github.com/AlexRogalskiy/java-patterns/commit/6b4551a0) +- Updated with the latest blog posts [`76af6ab0`](https://github.com/AlexRogalskiy/java-patterns/commit/76af6ab0) +- Updated with the latest blog posts [`9da5773c`](https://github.com/AlexRogalskiy/java-patterns/commit/9da5773c) +- Updated with the latest blog posts [`56bc766d`](https://github.com/AlexRogalskiy/java-patterns/commit/56bc766d) +- Updated with the latest blog posts [`d2b022f3`](https://github.com/AlexRogalskiy/java-patterns/commit/d2b022f3) +- docs: updates on docs page speed [`2210e398`](https://github.com/AlexRogalskiy/java-patterns/commit/2210e398) +- Updated with the latest blog posts [`e98de3f3`](https://github.com/AlexRogalskiy/java-patterns/commit/e98de3f3) +- Updated with the latest blog posts [`e5566c21`](https://github.com/AlexRogalskiy/java-patterns/commit/e5566c21) +- docs: updates on docs page speed [`033400bb`](https://github.com/AlexRogalskiy/java-patterns/commit/033400bb) +- Updated with the latest blog posts [`dfc54acc`](https://github.com/AlexRogalskiy/java-patterns/commit/dfc54acc) +- Updated with the latest blog posts [`decf617e`](https://github.com/AlexRogalskiy/java-patterns/commit/decf617e) +- docs: updates on docs page speed [`72a4815a`](https://github.com/AlexRogalskiy/java-patterns/commit/72a4815a) +- Updated with the latest blog posts [`71aff3f1`](https://github.com/AlexRogalskiy/java-patterns/commit/71aff3f1) +- Updated with the latest blog posts [`5fc3d76c`](https://github.com/AlexRogalskiy/java-patterns/commit/5fc3d76c) +- docs: updates on docs page speed [`95ea9068`](https://github.com/AlexRogalskiy/java-patterns/commit/95ea9068) +- Updated with the latest blog posts [`db62c74b`](https://github.com/AlexRogalskiy/java-patterns/commit/db62c74b) +- Updated with the latest blog posts [`5909e6f4`](https://github.com/AlexRogalskiy/java-patterns/commit/5909e6f4) +- docs: updates on docs page speed [`d140026f`](https://github.com/AlexRogalskiy/java-patterns/commit/d140026f) +- Updated with the latest blog posts [`9571885c`](https://github.com/AlexRogalskiy/java-patterns/commit/9571885c) +- Updated with the latest blog posts [`029ad316`](https://github.com/AlexRogalskiy/java-patterns/commit/029ad316) +- Updated with the latest blog posts [`27796a9f`](https://github.com/AlexRogalskiy/java-patterns/commit/27796a9f) +- docs: updates on docs page speed [`520ebe4d`](https://github.com/AlexRogalskiy/java-patterns/commit/520ebe4d) +- Updated with the latest blog posts [`baf938c9`](https://github.com/AlexRogalskiy/java-patterns/commit/baf938c9) +- Updated with the latest blog posts [`dd10e901`](https://github.com/AlexRogalskiy/java-patterns/commit/dd10e901) +- Updated with the latest blog posts [`c9e89dfd`](https://github.com/AlexRogalskiy/java-patterns/commit/c9e89dfd) +- docs: updates on docs page speed [`5b9d699f`](https://github.com/AlexRogalskiy/java-patterns/commit/5b9d699f) +- Updated with the latest blog posts [`cf3f869e`](https://github.com/AlexRogalskiy/java-patterns/commit/cf3f869e) +- Updated with the latest blog posts [`be8cadf2`](https://github.com/AlexRogalskiy/java-patterns/commit/be8cadf2) +- Updated with the latest blog posts [`45c4db80`](https://github.com/AlexRogalskiy/java-patterns/commit/45c4db80) +- Updated with the latest blog posts [`9ffc0f0d`](https://github.com/AlexRogalskiy/java-patterns/commit/9ffc0f0d) +- docs: updates on docs page speed [`403346fa`](https://github.com/AlexRogalskiy/java-patterns/commit/403346fa) +- Updated with the latest blog posts [`6c380c70`](https://github.com/AlexRogalskiy/java-patterns/commit/6c380c70) +- Updated with the latest blog posts [`73bc3105`](https://github.com/AlexRogalskiy/java-patterns/commit/73bc3105) +- docs: updates on docs page speed [`d9f72b98`](https://github.com/AlexRogalskiy/java-patterns/commit/d9f72b98) +- Updated with the latest blog posts [`6fb3da30`](https://github.com/AlexRogalskiy/java-patterns/commit/6fb3da30) +- Updated with the latest blog posts [`059626c4`](https://github.com/AlexRogalskiy/java-patterns/commit/059626c4) +- Updated with the latest blog posts [`311d47e5`](https://github.com/AlexRogalskiy/java-patterns/commit/311d47e5) +- Updated with the latest blog posts [`d6e043aa`](https://github.com/AlexRogalskiy/java-patterns/commit/d6e043aa) +- docs: updates on docs page speed [`ca9f3cff`](https://github.com/AlexRogalskiy/java-patterns/commit/ca9f3cff) +- Updated with the latest blog posts [`686d38dc`](https://github.com/AlexRogalskiy/java-patterns/commit/686d38dc) +- Updated with the latest blog posts [`ee5ecc3a`](https://github.com/AlexRogalskiy/java-patterns/commit/ee5ecc3a) +- Updated with the latest blog posts [`ff30515b`](https://github.com/AlexRogalskiy/java-patterns/commit/ff30515b) +- Updated with the latest blog posts [`9bd2fef2`](https://github.com/AlexRogalskiy/java-patterns/commit/9bd2fef2) +- Updated with the latest blog posts [`c944c15b`](https://github.com/AlexRogalskiy/java-patterns/commit/c944c15b) +- Updated with the latest blog posts [`0a58b15b`](https://github.com/AlexRogalskiy/java-patterns/commit/0a58b15b) +- Updated with the latest blog posts [`0408711e`](https://github.com/AlexRogalskiy/java-patterns/commit/0408711e) +- Updated with the latest blog posts [`74089254`](https://github.com/AlexRogalskiy/java-patterns/commit/74089254) +- Updated with the latest blog posts [`df83bd62`](https://github.com/AlexRogalskiy/java-patterns/commit/df83bd62) +- Updated with the latest blog posts [`02c786c3`](https://github.com/AlexRogalskiy/java-patterns/commit/02c786c3) +- Updated with the latest blog posts [`eef32b37`](https://github.com/AlexRogalskiy/java-patterns/commit/eef32b37) +- Updated with the latest blog posts [`43fd952e`](https://github.com/AlexRogalskiy/java-patterns/commit/43fd952e) +- Updated with the latest blog posts [`aeba2abb`](https://github.com/AlexRogalskiy/java-patterns/commit/aeba2abb) +- docs: updates on docs page speed [`b17a567e`](https://github.com/AlexRogalskiy/java-patterns/commit/b17a567e) +- Auto update markdown TOC [`3356e01e`](https://github.com/AlexRogalskiy/java-patterns/commit/3356e01e) +- docs: updates on workflows [`fd77ea54`](https://github.com/AlexRogalskiy/java-patterns/commit/fd77ea54) +- Updated with the latest blog posts [`59f0efdd`](https://github.com/AlexRogalskiy/java-patterns/commit/59f0efdd) +- Updated with the latest blog posts [`a54e74e2`](https://github.com/AlexRogalskiy/java-patterns/commit/a54e74e2) +- docs: updates on docs page speed [`b6921665`](https://github.com/AlexRogalskiy/java-patterns/commit/b6921665) +- Updated with the latest blog posts [`ef3a8cb5`](https://github.com/AlexRogalskiy/java-patterns/commit/ef3a8cb5) +- Updated with the latest blog posts [`f6171d40`](https://github.com/AlexRogalskiy/java-patterns/commit/f6171d40) +- Updated with the latest blog posts [`6ebf4e1d`](https://github.com/AlexRogalskiy/java-patterns/commit/6ebf4e1d) +- Updated with the latest blog posts [`50ede0b5`](https://github.com/AlexRogalskiy/java-patterns/commit/50ede0b5) +- Updated with the latest blog posts [`a938a42b`](https://github.com/AlexRogalskiy/java-patterns/commit/a938a42b) +- Updated with the latest blog posts [`38607c09`](https://github.com/AlexRogalskiy/java-patterns/commit/38607c09) +- Updated with the latest blog posts [`a276a844`](https://github.com/AlexRogalskiy/java-patterns/commit/a276a844) +- Updated with the latest blog posts [`fe92662b`](https://github.com/AlexRogalskiy/java-patterns/commit/fe92662b) +- Updated with the latest blog posts [`9560d228`](https://github.com/AlexRogalskiy/java-patterns/commit/9560d228) +- Updated with the latest blog posts [`0182cacb`](https://github.com/AlexRogalskiy/java-patterns/commit/0182cacb) +- Updated with the latest blog posts [`16015b9d`](https://github.com/AlexRogalskiy/java-patterns/commit/16015b9d) +- Updated with the latest blog posts [`d035f32a`](https://github.com/AlexRogalskiy/java-patterns/commit/d035f32a) +- Updated with the latest blog posts [`44f841ca`](https://github.com/AlexRogalskiy/java-patterns/commit/44f841ca) +- Updated with the latest blog posts [`3e2439b4`](https://github.com/AlexRogalskiy/java-patterns/commit/3e2439b4) +- Updated with the latest blog posts [`d2347b65`](https://github.com/AlexRogalskiy/java-patterns/commit/d2347b65) +- docs: updates on docs page speed [`d6ab8a50`](https://github.com/AlexRogalskiy/java-patterns/commit/d6ab8a50) +- Auto update markdown TOC [`3491b517`](https://github.com/AlexRogalskiy/java-patterns/commit/3491b517) +- docs: updates on workflows [`55f9c207`](https://github.com/AlexRogalskiy/java-patterns/commit/55f9c207) +- Auto update markdown TOC [`634b9efc`](https://github.com/AlexRogalskiy/java-patterns/commit/634b9efc) +- docs: updates on workflows [`95d802eb`](https://github.com/AlexRogalskiy/java-patterns/commit/95d802eb) +- docs: updates on workflows [`791b1a0d`](https://github.com/AlexRogalskiy/java-patterns/commit/791b1a0d) +- Updated with the latest blog posts [`ba826016`](https://github.com/AlexRogalskiy/java-patterns/commit/ba826016) +- Updated with the latest blog posts [`466dab04`](https://github.com/AlexRogalskiy/java-patterns/commit/466dab04) +- Updated with the latest blog posts [`b0818090`](https://github.com/AlexRogalskiy/java-patterns/commit/b0818090) +- Updated with the latest blog posts [`829fa7fa`](https://github.com/AlexRogalskiy/java-patterns/commit/829fa7fa) +- Updated with the latest blog posts [`9ff3e8a6`](https://github.com/AlexRogalskiy/java-patterns/commit/9ff3e8a6) +- Updated with the latest blog posts [`980252c9`](https://github.com/AlexRogalskiy/java-patterns/commit/980252c9) +- Updated with the latest blog posts [`2ac03688`](https://github.com/AlexRogalskiy/java-patterns/commit/2ac03688) +- Updated with the latest blog posts [`e4a52412`](https://github.com/AlexRogalskiy/java-patterns/commit/e4a52412) +- Updated with the latest blog posts [`6205ff3c`](https://github.com/AlexRogalskiy/java-patterns/commit/6205ff3c) +- Updated with the latest blog posts [`86c2f201`](https://github.com/AlexRogalskiy/java-patterns/commit/86c2f201) +- Updated with the latest blog posts [`da7ad81c`](https://github.com/AlexRogalskiy/java-patterns/commit/da7ad81c) +- Updated with the latest blog posts [`62566462`](https://github.com/AlexRogalskiy/java-patterns/commit/62566462) +- Updated with the latest blog posts [`fec5389d`](https://github.com/AlexRogalskiy/java-patterns/commit/fec5389d) +- docs: updates on docs page speed [`daa76659`](https://github.com/AlexRogalskiy/java-patterns/commit/daa76659) +- Auto update markdown TOC [`c8bbec4d`](https://github.com/AlexRogalskiy/java-patterns/commit/c8bbec4d) +- docs: updates on workflows [`d4ed5710`](https://github.com/AlexRogalskiy/java-patterns/commit/d4ed5710) +- docs: updates on workflows [`1c4a5927`](https://github.com/AlexRogalskiy/java-patterns/commit/1c4a5927) +- Auto update markdown TOC [`0a1c0b12`](https://github.com/AlexRogalskiy/java-patterns/commit/0a1c0b12) +- docs: updates on workflows [`8a5bbe8e`](https://github.com/AlexRogalskiy/java-patterns/commit/8a5bbe8e) +- Auto update markdown TOC [`772f6c13`](https://github.com/AlexRogalskiy/java-patterns/commit/772f6c13) +- docs: updates on workflows [`a27d8864`](https://github.com/AlexRogalskiy/java-patterns/commit/a27d8864) +- Auto update markdown TOC [`35546917`](https://github.com/AlexRogalskiy/java-patterns/commit/35546917) +- docs: updates on workflows [`d0963137`](https://github.com/AlexRogalskiy/java-patterns/commit/d0963137) +- Auto update markdown TOC [`d5aa3b67`](https://github.com/AlexRogalskiy/java-patterns/commit/d5aa3b67) +- docs: updates on workflows [`2cd5d1aa`](https://github.com/AlexRogalskiy/java-patterns/commit/2cd5d1aa) +- Updated with the latest blog posts [`d04e57d5`](https://github.com/AlexRogalskiy/java-patterns/commit/d04e57d5) +- Updated with the latest blog posts [`3bc9c2a5`](https://github.com/AlexRogalskiy/java-patterns/commit/3bc9c2a5) +- Updated with the latest blog posts [`b5f0d549`](https://github.com/AlexRogalskiy/java-patterns/commit/b5f0d549) +- Updated with the latest blog posts [`7b05a02e`](https://github.com/AlexRogalskiy/java-patterns/commit/7b05a02e) +- Updated with the latest blog posts [`4c16da31`](https://github.com/AlexRogalskiy/java-patterns/commit/4c16da31) +- Updated with the latest blog posts [`392289cd`](https://github.com/AlexRogalskiy/java-patterns/commit/392289cd) +- Updated with the latest blog posts [`aa72a9ee`](https://github.com/AlexRogalskiy/java-patterns/commit/aa72a9ee) +- Updated with the latest blog posts [`4ffa7de8`](https://github.com/AlexRogalskiy/java-patterns/commit/4ffa7de8) +- Updated with the latest blog posts [`faa6813f`](https://github.com/AlexRogalskiy/java-patterns/commit/faa6813f) +- Updated with the latest blog posts [`421ff2c4`](https://github.com/AlexRogalskiy/java-patterns/commit/421ff2c4) +- Updated with the latest blog posts [`6c873468`](https://github.com/AlexRogalskiy/java-patterns/commit/6c873468) +- Updated with the latest blog posts [`fc583c29`](https://github.com/AlexRogalskiy/java-patterns/commit/fc583c29) +- Updated with the latest blog posts [`8896fa08`](https://github.com/AlexRogalskiy/java-patterns/commit/8896fa08) +- docs: updates on docs page speed [`075a12d1`](https://github.com/AlexRogalskiy/java-patterns/commit/075a12d1) +- Auto update markdown TOC [`a26436ec`](https://github.com/AlexRogalskiy/java-patterns/commit/a26436ec) +- docs: updates on workflows [`3073039e`](https://github.com/AlexRogalskiy/java-patterns/commit/3073039e) +- docs: updates on workflows [`afd22fcc`](https://github.com/AlexRogalskiy/java-patterns/commit/afd22fcc) +- docs: updates on workflows [`35ace2f7`](https://github.com/AlexRogalskiy/java-patterns/commit/35ace2f7) +- Auto update markdown TOC [`766b72ec`](https://github.com/AlexRogalskiy/java-patterns/commit/766b72ec) +- docs: updates on workflows [`43cf38cf`](https://github.com/AlexRogalskiy/java-patterns/commit/43cf38cf) +- Updated with the latest blog posts [`ff022085`](https://github.com/AlexRogalskiy/java-patterns/commit/ff022085) +- Updated with the latest blog posts [`8ef12444`](https://github.com/AlexRogalskiy/java-patterns/commit/8ef12444) +- Updated with the latest blog posts [`211056de`](https://github.com/AlexRogalskiy/java-patterns/commit/211056de) +- Updated with the latest blog posts [`e323953e`](https://github.com/AlexRogalskiy/java-patterns/commit/e323953e) +- Updated with the latest blog posts [`83fbe99d`](https://github.com/AlexRogalskiy/java-patterns/commit/83fbe99d) +- Updated with the latest blog posts [`402b714d`](https://github.com/AlexRogalskiy/java-patterns/commit/402b714d) +- Updated with the latest blog posts [`b8486e25`](https://github.com/AlexRogalskiy/java-patterns/commit/b8486e25) +- Updated with the latest blog posts [`2b1dcc45`](https://github.com/AlexRogalskiy/java-patterns/commit/2b1dcc45) +- Updated with the latest blog posts [`2df922ba`](https://github.com/AlexRogalskiy/java-patterns/commit/2df922ba) +- Updated with the latest blog posts [`40083cea`](https://github.com/AlexRogalskiy/java-patterns/commit/40083cea) +- Updated with the latest blog posts [`06841057`](https://github.com/AlexRogalskiy/java-patterns/commit/06841057) +- Updated with the latest blog posts [`9feb6886`](https://github.com/AlexRogalskiy/java-patterns/commit/9feb6886) +- Updated with the latest blog posts [`82f54ed0`](https://github.com/AlexRogalskiy/java-patterns/commit/82f54ed0) +- docs: updates on docs page speed [`070b41ff`](https://github.com/AlexRogalskiy/java-patterns/commit/070b41ff) +- Auto update markdown TOC [`181210da`](https://github.com/AlexRogalskiy/java-patterns/commit/181210da) +- docs: updates on workflows [`e6b14b5e`](https://github.com/AlexRogalskiy/java-patterns/commit/e6b14b5e) +- Updated with the latest blog posts [`e2373258`](https://github.com/AlexRogalskiy/java-patterns/commit/e2373258) +- Updated with the latest blog posts [`222ce630`](https://github.com/AlexRogalskiy/java-patterns/commit/222ce630) +- Updated with the latest blog posts [`9cc93ee9`](https://github.com/AlexRogalskiy/java-patterns/commit/9cc93ee9) +- docs: updates on docs page speed [`3f9d1369`](https://github.com/AlexRogalskiy/java-patterns/commit/3f9d1369) +- docs: updates on workflows [`6cbfcd8b`](https://github.com/AlexRogalskiy/java-patterns/commit/6cbfcd8b) +- docs: updates on workflows [`81eae28f`](https://github.com/AlexRogalskiy/java-patterns/commit/81eae28f) +- docs: updates on workflows [`bc87f6f1`](https://github.com/AlexRogalskiy/java-patterns/commit/bc87f6f1) +- docs: updates on workflows [`6a45f312`](https://github.com/AlexRogalskiy/java-patterns/commit/6a45f312) +- docs: updates on workflows [`aeaa9095`](https://github.com/AlexRogalskiy/java-patterns/commit/aeaa9095) +- docs: updates on workflows [`84821e86`](https://github.com/AlexRogalskiy/java-patterns/commit/84821e86) +- docs: updates on workflows [`698543e3`](https://github.com/AlexRogalskiy/java-patterns/commit/698543e3) +- docs: updates on workflows [`49b921af`](https://github.com/AlexRogalskiy/java-patterns/commit/49b921af) +- Updated with the latest blog posts [`bd3a0e7f`](https://github.com/AlexRogalskiy/java-patterns/commit/bd3a0e7f) +- docs: updates on docs page speed [`49ba99a6`](https://github.com/AlexRogalskiy/java-patterns/commit/49ba99a6) +- Updated with the latest blog posts [`a5bcd511`](https://github.com/AlexRogalskiy/java-patterns/commit/a5bcd511) +- Updated with the latest blog posts [`838fa757`](https://github.com/AlexRogalskiy/java-patterns/commit/838fa757) +- docs: updates on docs page speed [`07b6e77c`](https://github.com/AlexRogalskiy/java-patterns/commit/07b6e77c) +- Updated with the latest blog posts [`b382e918`](https://github.com/AlexRogalskiy/java-patterns/commit/b382e918) +- Updated with the latest blog posts [`159e0fcd`](https://github.com/AlexRogalskiy/java-patterns/commit/159e0fcd) +- Updated with the latest blog posts [`158eb88e`](https://github.com/AlexRogalskiy/java-patterns/commit/158eb88e) +- Updated with the latest blog posts [`e7f05e95`](https://github.com/AlexRogalskiy/java-patterns/commit/e7f05e95) +- docs: updates on docs page speed [`1fa307c8`](https://github.com/AlexRogalskiy/java-patterns/commit/1fa307c8) +- Updated with the latest blog posts [`cba20334`](https://github.com/AlexRogalskiy/java-patterns/commit/cba20334) +- Updated with the latest blog posts [`10500038`](https://github.com/AlexRogalskiy/java-patterns/commit/10500038) +- Updated with the latest blog posts [`570ee49b`](https://github.com/AlexRogalskiy/java-patterns/commit/570ee49b) +- docs: updates on docs page speed [`c9a6b897`](https://github.com/AlexRogalskiy/java-patterns/commit/c9a6b897) +- Updated with the latest blog posts [`ce6ef610`](https://github.com/AlexRogalskiy/java-patterns/commit/ce6ef610) +- Updated with the latest blog posts [`d9cf0d10`](https://github.com/AlexRogalskiy/java-patterns/commit/d9cf0d10) +- Updated with the latest blog posts [`8acf05f7`](https://github.com/AlexRogalskiy/java-patterns/commit/8acf05f7) +- docs: updates on docs page speed [`2b506e6c`](https://github.com/AlexRogalskiy/java-patterns/commit/2b506e6c) +- Updated with the latest blog posts [`dd1c0267`](https://github.com/AlexRogalskiy/java-patterns/commit/dd1c0267) +- Updated with the latest blog posts [`29c73260`](https://github.com/AlexRogalskiy/java-patterns/commit/29c73260) +- Updated with the latest blog posts [`044c1ef3`](https://github.com/AlexRogalskiy/java-patterns/commit/044c1ef3) +- Updated with the latest blog posts [`1987f51c`](https://github.com/AlexRogalskiy/java-patterns/commit/1987f51c) +- Updated with the latest blog posts [`3278ef57`](https://github.com/AlexRogalskiy/java-patterns/commit/3278ef57) +- docs: updates on docs page speed [`43dde63a`](https://github.com/AlexRogalskiy/java-patterns/commit/43dde63a) +- Updated with the latest blog posts [`d9556d85`](https://github.com/AlexRogalskiy/java-patterns/commit/d9556d85) +- Updated with the latest blog posts [`baa15b69`](https://github.com/AlexRogalskiy/java-patterns/commit/baa15b69) +- Updated with the latest blog posts [`172dadd2`](https://github.com/AlexRogalskiy/java-patterns/commit/172dadd2) +- Updated with the latest blog posts [`355af599`](https://github.com/AlexRogalskiy/java-patterns/commit/355af599) +- docs: updates on docs page speed [`dc5f6741`](https://github.com/AlexRogalskiy/java-patterns/commit/dc5f6741) +- Updated with the latest blog posts [`60271573`](https://github.com/AlexRogalskiy/java-patterns/commit/60271573) +- Updated with the latest blog posts [`d0db70ef`](https://github.com/AlexRogalskiy/java-patterns/commit/d0db70ef) +- Updated with the latest blog posts [`d7518872`](https://github.com/AlexRogalskiy/java-patterns/commit/d7518872) +- docs: updates on docs page speed [`ae7a34ec`](https://github.com/AlexRogalskiy/java-patterns/commit/ae7a34ec) +- Updated with the latest blog posts [`73557e17`](https://github.com/AlexRogalskiy/java-patterns/commit/73557e17) +- Updated with the latest blog posts [`9b3f28c7`](https://github.com/AlexRogalskiy/java-patterns/commit/9b3f28c7) +- docs: updates on docs page speed [`2619d4fa`](https://github.com/AlexRogalskiy/java-patterns/commit/2619d4fa) +- Updated with the latest blog posts [`66d558ab`](https://github.com/AlexRogalskiy/java-patterns/commit/66d558ab) +- Updated with the latest blog posts [`4b7f55f4`](https://github.com/AlexRogalskiy/java-patterns/commit/4b7f55f4) +- Updated with the latest blog posts [`5b520661`](https://github.com/AlexRogalskiy/java-patterns/commit/5b520661) +- docs: updates on docs page speed [`8d1a3a1e`](https://github.com/AlexRogalskiy/java-patterns/commit/8d1a3a1e) +- Updated with the latest blog posts [`b8b6217d`](https://github.com/AlexRogalskiy/java-patterns/commit/b8b6217d) +- Updated with the latest blog posts [`bcbe0421`](https://github.com/AlexRogalskiy/java-patterns/commit/bcbe0421) +- Updated with the latest blog posts [`03a552af`](https://github.com/AlexRogalskiy/java-patterns/commit/03a552af) +- Updated with the latest blog posts [`9ca19d79`](https://github.com/AlexRogalskiy/java-patterns/commit/9ca19d79) +- docs: updates on docs page speed [`9e0c348b`](https://github.com/AlexRogalskiy/java-patterns/commit/9e0c348b) +- Updated with the latest blog posts [`a7a63de6`](https://github.com/AlexRogalskiy/java-patterns/commit/a7a63de6) +- Updated with the latest blog posts [`4e0de605`](https://github.com/AlexRogalskiy/java-patterns/commit/4e0de605) +- Updated with the latest blog posts [`eb150945`](https://github.com/AlexRogalskiy/java-patterns/commit/eb150945) +- docs: updates on docs page speed [`f1ea3e3f`](https://github.com/AlexRogalskiy/java-patterns/commit/f1ea3e3f) +- Updated with the latest blog posts [`a4319dc8`](https://github.com/AlexRogalskiy/java-patterns/commit/a4319dc8) +- Updated with the latest blog posts [`7f7173b6`](https://github.com/AlexRogalskiy/java-patterns/commit/7f7173b6) +- Updated with the latest blog posts [`96c88b5e`](https://github.com/AlexRogalskiy/java-patterns/commit/96c88b5e) +- Updated with the latest blog posts [`917d9331`](https://github.com/AlexRogalskiy/java-patterns/commit/917d9331) +- Updated with the latest blog posts [`7e40568e`](https://github.com/AlexRogalskiy/java-patterns/commit/7e40568e) +- Updated with the latest blog posts [`59a69bdb`](https://github.com/AlexRogalskiy/java-patterns/commit/59a69bdb) +- docs: updates on docs page speed [`6622ccf4`](https://github.com/AlexRogalskiy/java-patterns/commit/6622ccf4) +- Updated with the latest blog posts [`e29ab1dd`](https://github.com/AlexRogalskiy/java-patterns/commit/e29ab1dd) +- Updated with the latest blog posts [`10b2ff4e`](https://github.com/AlexRogalskiy/java-patterns/commit/10b2ff4e) +- Updated with the latest blog posts [`4da67023`](https://github.com/AlexRogalskiy/java-patterns/commit/4da67023) +- docs: updates on docs page speed [`415fdb8c`](https://github.com/AlexRogalskiy/java-patterns/commit/415fdb8c) +- Updated with the latest blog posts [`b354f31c`](https://github.com/AlexRogalskiy/java-patterns/commit/b354f31c) +- Updated with the latest blog posts [`d7ee0873`](https://github.com/AlexRogalskiy/java-patterns/commit/d7ee0873) +- Updated with the latest blog posts [`02f850bd`](https://github.com/AlexRogalskiy/java-patterns/commit/02f850bd) +- docs: updates on docs page speed [`d5dc6bc0`](https://github.com/AlexRogalskiy/java-patterns/commit/d5dc6bc0) +- Updated with the latest blog posts [`4e427dd3`](https://github.com/AlexRogalskiy/java-patterns/commit/4e427dd3) +- Updated with the latest blog posts [`b746e243`](https://github.com/AlexRogalskiy/java-patterns/commit/b746e243) +- Updated with the latest blog posts [`03dbd41a`](https://github.com/AlexRogalskiy/java-patterns/commit/03dbd41a) +- Updated with the latest blog posts [`4755f242`](https://github.com/AlexRogalskiy/java-patterns/commit/4755f242) +- docs: updates on docs page speed [`68e7c33a`](https://github.com/AlexRogalskiy/java-patterns/commit/68e7c33a) +- Updated with the latest blog posts [`b400fccb`](https://github.com/AlexRogalskiy/java-patterns/commit/b400fccb) +- Updated with the latest blog posts [`1dbbb7e6`](https://github.com/AlexRogalskiy/java-patterns/commit/1dbbb7e6) +- Updated with the latest blog posts [`5db180a7`](https://github.com/AlexRogalskiy/java-patterns/commit/5db180a7) +- Updated with the latest blog posts [`fe680c33`](https://github.com/AlexRogalskiy/java-patterns/commit/fe680c33) +- Updated with the latest blog posts [`a81324e0`](https://github.com/AlexRogalskiy/java-patterns/commit/a81324e0) +- Updated with the latest blog posts [`b5d67958`](https://github.com/AlexRogalskiy/java-patterns/commit/b5d67958) +- docs: updates on docs page speed [`b4a5826c`](https://github.com/AlexRogalskiy/java-patterns/commit/b4a5826c) +- docs: updates on docs page speed [`6d39927b`](https://github.com/AlexRogalskiy/java-patterns/commit/6d39927b) +- docs: updates on docs page speed [`3336e397`](https://github.com/AlexRogalskiy/java-patterns/commit/3336e397) +- Updated with the latest blog posts [`2764b96f`](https://github.com/AlexRogalskiy/java-patterns/commit/2764b96f) +- Updated with the latest blog posts [`19617e8f`](https://github.com/AlexRogalskiy/java-patterns/commit/19617e8f) +- Updated with the latest blog posts [`999f1ff0`](https://github.com/AlexRogalskiy/java-patterns/commit/999f1ff0) +- Updated with the latest blog posts [`cbafc40f`](https://github.com/AlexRogalskiy/java-patterns/commit/cbafc40f) +- Updated with the latest blog posts [`cae6e567`](https://github.com/AlexRogalskiy/java-patterns/commit/cae6e567) +- docs: updates on docs page speed [`b767062d`](https://github.com/AlexRogalskiy/java-patterns/commit/b767062d) +- Updated with the latest blog posts [`5b3f3383`](https://github.com/AlexRogalskiy/java-patterns/commit/5b3f3383) +- Updated with the latest blog posts [`eabace43`](https://github.com/AlexRogalskiy/java-patterns/commit/eabace43) +- Updated with the latest blog posts [`4651348e`](https://github.com/AlexRogalskiy/java-patterns/commit/4651348e) +- docs: updates on docs page speed [`c6f120fe`](https://github.com/AlexRogalskiy/java-patterns/commit/c6f120fe) +- Updated with the latest blog posts [`125f0206`](https://github.com/AlexRogalskiy/java-patterns/commit/125f0206) +- Updated with the latest blog posts [`f4d574c2`](https://github.com/AlexRogalskiy/java-patterns/commit/f4d574c2) +- Updated with the latest blog posts [`19d75ab5`](https://github.com/AlexRogalskiy/java-patterns/commit/19d75ab5) +- docs: updates on docs page speed [`9a90c4f9`](https://github.com/AlexRogalskiy/java-patterns/commit/9a90c4f9) +- Updated with the latest blog posts [`26c200e9`](https://github.com/AlexRogalskiy/java-patterns/commit/26c200e9) +- Updated with the latest blog posts [`8e4e1896`](https://github.com/AlexRogalskiy/java-patterns/commit/8e4e1896) +- Updated with the latest blog posts [`471db372`](https://github.com/AlexRogalskiy/java-patterns/commit/471db372) +- docs: updates on docs page speed [`347b3dc6`](https://github.com/AlexRogalskiy/java-patterns/commit/347b3dc6) +- Updated with the latest blog posts [`849c8fe8`](https://github.com/AlexRogalskiy/java-patterns/commit/849c8fe8) +- Updated with the latest blog posts [`1b86f720`](https://github.com/AlexRogalskiy/java-patterns/commit/1b86f720) +- Updated with the latest blog posts [`9df31353`](https://github.com/AlexRogalskiy/java-patterns/commit/9df31353) +- Updated with the latest blog posts [`7863bda7`](https://github.com/AlexRogalskiy/java-patterns/commit/7863bda7) +- Updated with the latest blog posts [`feb8b143`](https://github.com/AlexRogalskiy/java-patterns/commit/feb8b143) +- docs: updates on docs page speed [`7a959167`](https://github.com/AlexRogalskiy/java-patterns/commit/7a959167) +- Updated with the latest blog posts [`7c61651e`](https://github.com/AlexRogalskiy/java-patterns/commit/7c61651e) +- Updated with the latest blog posts [`54abf1b2`](https://github.com/AlexRogalskiy/java-patterns/commit/54abf1b2) +- docs: updates on docs page speed [`7a3672f7`](https://github.com/AlexRogalskiy/java-patterns/commit/7a3672f7) +- Updated with the latest blog posts [`ff1f4200`](https://github.com/AlexRogalskiy/java-patterns/commit/ff1f4200) +- Updated with the latest blog posts [`6615191a`](https://github.com/AlexRogalskiy/java-patterns/commit/6615191a) +- Updated with the latest blog posts [`2ec1ab46`](https://github.com/AlexRogalskiy/java-patterns/commit/2ec1ab46) +- Updated with the latest blog posts [`ad27d92d`](https://github.com/AlexRogalskiy/java-patterns/commit/ad27d92d) +- docs: updates on docs page speed [`45885e30`](https://github.com/AlexRogalskiy/java-patterns/commit/45885e30) +- Updated with the latest blog posts [`388b081c`](https://github.com/AlexRogalskiy/java-patterns/commit/388b081c) +- Updated with the latest blog posts [`7219e3c9`](https://github.com/AlexRogalskiy/java-patterns/commit/7219e3c9) +- Updated with the latest blog posts [`bbabc7b6`](https://github.com/AlexRogalskiy/java-patterns/commit/bbabc7b6) +- docs: updates on docs page speed [`1ad54cab`](https://github.com/AlexRogalskiy/java-patterns/commit/1ad54cab) +- Updated with the latest blog posts [`cc1b0de8`](https://github.com/AlexRogalskiy/java-patterns/commit/cc1b0de8) +- Updated with the latest blog posts [`b338e86e`](https://github.com/AlexRogalskiy/java-patterns/commit/b338e86e) +- Updated with the latest blog posts [`cf7d6bd8`](https://github.com/AlexRogalskiy/java-patterns/commit/cf7d6bd8) +- Updated with the latest blog posts [`b04f89eb`](https://github.com/AlexRogalskiy/java-patterns/commit/b04f89eb) +- docs: updates on docs page speed [`ffbede0b`](https://github.com/AlexRogalskiy/java-patterns/commit/ffbede0b) +- Updated with the latest blog posts [`6ac4badf`](https://github.com/AlexRogalskiy/java-patterns/commit/6ac4badf) +- Updated with the latest blog posts [`8150fd86`](https://github.com/AlexRogalskiy/java-patterns/commit/8150fd86) +- Updated with the latest blog posts [`860c9676`](https://github.com/AlexRogalskiy/java-patterns/commit/860c9676) +- docs: updates on docs page speed [`ead1d0f5`](https://github.com/AlexRogalskiy/java-patterns/commit/ead1d0f5) +- Updated with the latest blog posts [`20a740f4`](https://github.com/AlexRogalskiy/java-patterns/commit/20a740f4) +- Updated with the latest blog posts [`a2a260e9`](https://github.com/AlexRogalskiy/java-patterns/commit/a2a260e9) +- docs: updates on docs page speed [`89aa4b90`](https://github.com/AlexRogalskiy/java-patterns/commit/89aa4b90) +- Updated with the latest blog posts [`cf705976`](https://github.com/AlexRogalskiy/java-patterns/commit/cf705976) +- Updated with the latest blog posts [`60387043`](https://github.com/AlexRogalskiy/java-patterns/commit/60387043) +- docs: updates on docs page speed [`b460c273`](https://github.com/AlexRogalskiy/java-patterns/commit/b460c273) +- Updated with the latest blog posts [`664beb89`](https://github.com/AlexRogalskiy/java-patterns/commit/664beb89) +- Updated with the latest blog posts [`6ce1496f`](https://github.com/AlexRogalskiy/java-patterns/commit/6ce1496f) +- Updated with the latest blog posts [`6c74f488`](https://github.com/AlexRogalskiy/java-patterns/commit/6c74f488) +- docs: updates on docs page speed [`84c4011e`](https://github.com/AlexRogalskiy/java-patterns/commit/84c4011e) +- Updated with the latest blog posts [`75c2fd4b`](https://github.com/AlexRogalskiy/java-patterns/commit/75c2fd4b) +- Updated with the latest blog posts [`ab2b2663`](https://github.com/AlexRogalskiy/java-patterns/commit/ab2b2663) +- Updated with the latest blog posts [`e1c418e4`](https://github.com/AlexRogalskiy/java-patterns/commit/e1c418e4) +- Updated with the latest blog posts [`d64db704`](https://github.com/AlexRogalskiy/java-patterns/commit/d64db704) +- docs: updates on docs page speed [`88efa422`](https://github.com/AlexRogalskiy/java-patterns/commit/88efa422) +- Updated with the latest blog posts [`87386f3e`](https://github.com/AlexRogalskiy/java-patterns/commit/87386f3e) +- Updated with the latest blog posts [`f25b1e36`](https://github.com/AlexRogalskiy/java-patterns/commit/f25b1e36) +- Updated with the latest blog posts [`e11b6b81`](https://github.com/AlexRogalskiy/java-patterns/commit/e11b6b81) +- Updated with the latest blog posts [`35376d43`](https://github.com/AlexRogalskiy/java-patterns/commit/35376d43) +- docs: updates on docs page speed [`fe9ec854`](https://github.com/AlexRogalskiy/java-patterns/commit/fe9ec854) +- Updated with the latest blog posts [`d2014e7b`](https://github.com/AlexRogalskiy/java-patterns/commit/d2014e7b) +- Updated with the latest blog posts [`e705ead1`](https://github.com/AlexRogalskiy/java-patterns/commit/e705ead1) +- Updated with the latest blog posts [`87e33e57`](https://github.com/AlexRogalskiy/java-patterns/commit/87e33e57) +- Updated with the latest blog posts [`9b0639b5`](https://github.com/AlexRogalskiy/java-patterns/commit/9b0639b5) +- docs: updates on docs page speed [`8864e3a5`](https://github.com/AlexRogalskiy/java-patterns/commit/8864e3a5) +- docs: updates on workflows [`436eb295`](https://github.com/AlexRogalskiy/java-patterns/commit/436eb295) +- Updated with the latest blog posts [`4eb5d9cf`](https://github.com/AlexRogalskiy/java-patterns/commit/4eb5d9cf) +- Updated with the latest blog posts [`a152e38e`](https://github.com/AlexRogalskiy/java-patterns/commit/a152e38e) +- docs: updates on docs page speed [`e13a75e5`](https://github.com/AlexRogalskiy/java-patterns/commit/e13a75e5) +- Updated with the latest blog posts [`9e436dc6`](https://github.com/AlexRogalskiy/java-patterns/commit/9e436dc6) +- Updated with the latest blog posts [`5035974d`](https://github.com/AlexRogalskiy/java-patterns/commit/5035974d) +- docs: updates on docs page speed [`52f6baf3`](https://github.com/AlexRogalskiy/java-patterns/commit/52f6baf3) +- Updated with the latest blog posts [`dc3b648d`](https://github.com/AlexRogalskiy/java-patterns/commit/dc3b648d) +- Updated with the latest blog posts [`cfab48b8`](https://github.com/AlexRogalskiy/java-patterns/commit/cfab48b8) +- Updated with the latest blog posts [`3a25ae63`](https://github.com/AlexRogalskiy/java-patterns/commit/3a25ae63) +- Updated with the latest blog posts [`d6363407`](https://github.com/AlexRogalskiy/java-patterns/commit/d6363407) +- docs: updates on docs page speed [`75d6b339`](https://github.com/AlexRogalskiy/java-patterns/commit/75d6b339) +- Updated with the latest blog posts [`439d46e9`](https://github.com/AlexRogalskiy/java-patterns/commit/439d46e9) +- Updated with the latest blog posts [`c50ea12e`](https://github.com/AlexRogalskiy/java-patterns/commit/c50ea12e) +- Updated with the latest blog posts [`88fabd16`](https://github.com/AlexRogalskiy/java-patterns/commit/88fabd16) +- Updated with the latest blog posts [`ca78376c`](https://github.com/AlexRogalskiy/java-patterns/commit/ca78376c) +- docs: updates on docs page speed [`8a6bce7d`](https://github.com/AlexRogalskiy/java-patterns/commit/8a6bce7d) +- Updated with the latest blog posts [`3e69edcd`](https://github.com/AlexRogalskiy/java-patterns/commit/3e69edcd) +- Updated with the latest blog posts [`cd46276e`](https://github.com/AlexRogalskiy/java-patterns/commit/cd46276e) +- docs: updates on docs page speed [`c932cc23`](https://github.com/AlexRogalskiy/java-patterns/commit/c932cc23) +- Updated with the latest blog posts [`58526f55`](https://github.com/AlexRogalskiy/java-patterns/commit/58526f55) +- Updated with the latest blog posts [`f7cc7d95`](https://github.com/AlexRogalskiy/java-patterns/commit/f7cc7d95) +- Updated with the latest blog posts [`2306fcf1`](https://github.com/AlexRogalskiy/java-patterns/commit/2306fcf1) +- Updated with the latest blog posts [`6dbf3766`](https://github.com/AlexRogalskiy/java-patterns/commit/6dbf3766) +- docs: updates on docs page speed [`d58749f4`](https://github.com/AlexRogalskiy/java-patterns/commit/d58749f4) +- Updated with the latest blog posts [`2d63d610`](https://github.com/AlexRogalskiy/java-patterns/commit/2d63d610) +- Updated with the latest blog posts [`1e5f9dde`](https://github.com/AlexRogalskiy/java-patterns/commit/1e5f9dde) +- Updated with the latest blog posts [`8d592d8b`](https://github.com/AlexRogalskiy/java-patterns/commit/8d592d8b) +- docs: updates on docs page speed [`9144007a`](https://github.com/AlexRogalskiy/java-patterns/commit/9144007a) +- Updated with the latest blog posts [`e172ada9`](https://github.com/AlexRogalskiy/java-patterns/commit/e172ada9) +- Updated with the latest blog posts [`b8c03b54`](https://github.com/AlexRogalskiy/java-patterns/commit/b8c03b54) +- Updated with the latest blog posts [`5e4c072a`](https://github.com/AlexRogalskiy/java-patterns/commit/5e4c072a) +- docs: updates on docs page speed [`b561372c`](https://github.com/AlexRogalskiy/java-patterns/commit/b561372c) +- Updated with the latest blog posts [`ce42a34b`](https://github.com/AlexRogalskiy/java-patterns/commit/ce42a34b) +- Updated with the latest blog posts [`6da0c11d`](https://github.com/AlexRogalskiy/java-patterns/commit/6da0c11d) +- Updated with the latest blog posts [`c07737cd`](https://github.com/AlexRogalskiy/java-patterns/commit/c07737cd) +- docs: updates on docs page speed [`be9b69bf`](https://github.com/AlexRogalskiy/java-patterns/commit/be9b69bf) +- Updated with the latest blog posts [`9f22101e`](https://github.com/AlexRogalskiy/java-patterns/commit/9f22101e) +- Updated with the latest blog posts [`a0d0e38b`](https://github.com/AlexRogalskiy/java-patterns/commit/a0d0e38b) +- Updated with the latest blog posts [`72bbe1ba`](https://github.com/AlexRogalskiy/java-patterns/commit/72bbe1ba) +- docs: updates on docs page speed [`6239baa5`](https://github.com/AlexRogalskiy/java-patterns/commit/6239baa5) +- Updated with the latest blog posts [`d00bfcee`](https://github.com/AlexRogalskiy/java-patterns/commit/d00bfcee) +- Updated with the latest blog posts [`8ba5a8b8`](https://github.com/AlexRogalskiy/java-patterns/commit/8ba5a8b8) +- Updated with the latest blog posts [`b10acd97`](https://github.com/AlexRogalskiy/java-patterns/commit/b10acd97) +- Updated with the latest blog posts [`1d339087`](https://github.com/AlexRogalskiy/java-patterns/commit/1d339087) +- docs: updates on docs page speed [`2b1ca4dd`](https://github.com/AlexRogalskiy/java-patterns/commit/2b1ca4dd) +- Updated with the latest blog posts [`43d41325`](https://github.com/AlexRogalskiy/java-patterns/commit/43d41325) +- Updated with the latest blog posts [`2e35fac6`](https://github.com/AlexRogalskiy/java-patterns/commit/2e35fac6) +- Updated with the latest blog posts [`aa8bb7b8`](https://github.com/AlexRogalskiy/java-patterns/commit/aa8bb7b8) +- Updated with the latest blog posts [`0c9ffbec`](https://github.com/AlexRogalskiy/java-patterns/commit/0c9ffbec) +- docs: updates on docs page speed [`c65e9ed5`](https://github.com/AlexRogalskiy/java-patterns/commit/c65e9ed5) +- Updated with the latest blog posts [`ee36c6e7`](https://github.com/AlexRogalskiy/java-patterns/commit/ee36c6e7) +- Updated with the latest blog posts [`a934df51`](https://github.com/AlexRogalskiy/java-patterns/commit/a934df51) +- Updated with the latest blog posts [`763ba643`](https://github.com/AlexRogalskiy/java-patterns/commit/763ba643) +- Updated with the latest blog posts [`56cb0948`](https://github.com/AlexRogalskiy/java-patterns/commit/56cb0948) +- docs: updates on docs page speed [`022eb5bd`](https://github.com/AlexRogalskiy/java-patterns/commit/022eb5bd) +- Updated with the latest blog posts [`5d04b2e2`](https://github.com/AlexRogalskiy/java-patterns/commit/5d04b2e2) +- Updated with the latest blog posts [`2f2a126d`](https://github.com/AlexRogalskiy/java-patterns/commit/2f2a126d) +- docs: updates on docs page speed [`5e9fada6`](https://github.com/AlexRogalskiy/java-patterns/commit/5e9fada6) +- Updated with the latest blog posts [`c42a3d45`](https://github.com/AlexRogalskiy/java-patterns/commit/c42a3d45) +- Updated with the latest blog posts [`229fa4fb`](https://github.com/AlexRogalskiy/java-patterns/commit/229fa4fb) +- docs: updates on docs page speed [`55f8076b`](https://github.com/AlexRogalskiy/java-patterns/commit/55f8076b) +- Updated with the latest blog posts [`56095c76`](https://github.com/AlexRogalskiy/java-patterns/commit/56095c76) +- Updated with the latest blog posts [`ea6461ef`](https://github.com/AlexRogalskiy/java-patterns/commit/ea6461ef) +- Updated with the latest blog posts [`bb8d2c32`](https://github.com/AlexRogalskiy/java-patterns/commit/bb8d2c32) +- docs: updates on docs page speed [`2df02c55`](https://github.com/AlexRogalskiy/java-patterns/commit/2df02c55) +- Updated with the latest blog posts [`4c42391e`](https://github.com/AlexRogalskiy/java-patterns/commit/4c42391e) +- Updated with the latest blog posts [`26bd2d04`](https://github.com/AlexRogalskiy/java-patterns/commit/26bd2d04) +- Updated with the latest blog posts [`c8fe5ade`](https://github.com/AlexRogalskiy/java-patterns/commit/c8fe5ade) +- Updated with the latest blog posts [`a8a2e7eb`](https://github.com/AlexRogalskiy/java-patterns/commit/a8a2e7eb) +- Updated with the latest blog posts [`1c2c7abe`](https://github.com/AlexRogalskiy/java-patterns/commit/1c2c7abe) +- docs: updates on docs page speed [`cafd0979`](https://github.com/AlexRogalskiy/java-patterns/commit/cafd0979) +- Updated with the latest blog posts [`79941710`](https://github.com/AlexRogalskiy/java-patterns/commit/79941710) +- Updated with the latest blog posts [`0497bd6c`](https://github.com/AlexRogalskiy/java-patterns/commit/0497bd6c) +- docs: updates on docs page speed [`08b80e77`](https://github.com/AlexRogalskiy/java-patterns/commit/08b80e77) +- Updated with the latest blog posts [`3787cbe2`](https://github.com/AlexRogalskiy/java-patterns/commit/3787cbe2) +- Updated with the latest blog posts [`02460096`](https://github.com/AlexRogalskiy/java-patterns/commit/02460096) +- Updated with the latest blog posts [`ae356f32`](https://github.com/AlexRogalskiy/java-patterns/commit/ae356f32) +- Updated with the latest blog posts [`19404b7a`](https://github.com/AlexRogalskiy/java-patterns/commit/19404b7a) +- docs: updates on docs page speed [`9ed3d939`](https://github.com/AlexRogalskiy/java-patterns/commit/9ed3d939) +- Updated with the latest blog posts [`e8a71356`](https://github.com/AlexRogalskiy/java-patterns/commit/e8a71356) +- Updated with the latest blog posts [`45bb82b1`](https://github.com/AlexRogalskiy/java-patterns/commit/45bb82b1) +- Updated with the latest blog posts [`a6fec4c3`](https://github.com/AlexRogalskiy/java-patterns/commit/a6fec4c3) +- Updated with the latest blog posts [`4b282927`](https://github.com/AlexRogalskiy/java-patterns/commit/4b282927) +- docs: updates on docs page speed [`7ba821f5`](https://github.com/AlexRogalskiy/java-patterns/commit/7ba821f5) +- Updated with the latest blog posts [`af5b68a3`](https://github.com/AlexRogalskiy/java-patterns/commit/af5b68a3) +- Updated with the latest blog posts [`d83c8bce`](https://github.com/AlexRogalskiy/java-patterns/commit/d83c8bce) +- Updated with the latest blog posts [`2b58cfbf`](https://github.com/AlexRogalskiy/java-patterns/commit/2b58cfbf) +- Updated with the latest blog posts [`d0316d4b`](https://github.com/AlexRogalskiy/java-patterns/commit/d0316d4b) +- Updated with the latest blog posts [`d1b4ba14`](https://github.com/AlexRogalskiy/java-patterns/commit/d1b4ba14) +- docs: updates on docs page speed [`87237957`](https://github.com/AlexRogalskiy/java-patterns/commit/87237957) +- Updated with the latest blog posts [`57c65e93`](https://github.com/AlexRogalskiy/java-patterns/commit/57c65e93) +- Updated with the latest blog posts [`ad15005a`](https://github.com/AlexRogalskiy/java-patterns/commit/ad15005a) +- Updated with the latest blog posts [`22eef066`](https://github.com/AlexRogalskiy/java-patterns/commit/22eef066) +- docs: updates on docs page speed [`8c5692d2`](https://github.com/AlexRogalskiy/java-patterns/commit/8c5692d2) +- Updated with the latest blog posts [`4463ea25`](https://github.com/AlexRogalskiy/java-patterns/commit/4463ea25) +- Updated with the latest blog posts [`44a2cbb2`](https://github.com/AlexRogalskiy/java-patterns/commit/44a2cbb2) +- docs: updates on docs page speed [`075fa020`](https://github.com/AlexRogalskiy/java-patterns/commit/075fa020) +- Create shiftleft-analysis.yml [`21cc09a3`](https://github.com/AlexRogalskiy/java-patterns/commit/21cc09a3) +- Create SECURITY.md [`8c4e494d`](https://github.com/AlexRogalskiy/java-patterns/commit/8c4e494d) +- Updated with the latest blog posts [`dfaf8bf6`](https://github.com/AlexRogalskiy/java-patterns/commit/dfaf8bf6) +- Updated with the latest blog posts [`a3ef22c5`](https://github.com/AlexRogalskiy/java-patterns/commit/a3ef22c5) +- Updated with the latest blog posts [`1a8e6c38`](https://github.com/AlexRogalskiy/java-patterns/commit/1a8e6c38) +- Updated with the latest blog posts [`2d0850b6`](https://github.com/AlexRogalskiy/java-patterns/commit/2d0850b6) +- :arrow_up: Updates wagoid/commitlint-github-action action to v2.2.5 [`ae44a47a`](https://github.com/AlexRogalskiy/java-patterns/commit/ae44a47a) +- docs: updates on docs page speed [`dbf627e5`](https://github.com/AlexRogalskiy/java-patterns/commit/dbf627e5) +- github-actions: bump wagoid/commitlint-github-action [`75e2db92`](https://github.com/AlexRogalskiy/java-patterns/commit/75e2db92) +- Updated with the latest blog posts [`021ce331`](https://github.com/AlexRogalskiy/java-patterns/commit/021ce331) +- Updated with the latest blog posts [`ce23f008`](https://github.com/AlexRogalskiy/java-patterns/commit/ce23f008) +- Updated with the latest blog posts [`1021933c`](https://github.com/AlexRogalskiy/java-patterns/commit/1021933c) +- docs: updates on docs page speed [`154cfd08`](https://github.com/AlexRogalskiy/java-patterns/commit/154cfd08) +- docs: updates on VERSION [`e236b3e0`](https://github.com/AlexRogalskiy/java-patterns/commit/e236b3e0) + +#### [v1](https://github.com/AlexRogalskiy/java-patterns/compare/v1.0...v1) + +> February 18, 2021 + + +#### [v1.0](https://github.com/AlexRogalskiy/java-patterns/compare/v1.0.1...v1.0) + +> February 18, 2021 + + +#### [v1.0.1](https://github.com/AlexRogalskiy/java-patterns/compare/1.0.1...v1.0.1) + +> February 18, 2021 + + +#### [1.0.1](https://github.com/AlexRogalskiy/java-patterns/compare/v1.5...1.0.1) + +> February 18, 2021 + +- docs: updates on workflows [`6e5b204e`](https://github.com/AlexRogalskiy/java-patterns/commit/6e5b204e) +- docs: updates on workflows [`e530cb00`](https://github.com/AlexRogalskiy/java-patterns/commit/e530cb00) +- docs: updates on workflows [`21fb5024`](https://github.com/AlexRogalskiy/java-patterns/commit/21fb5024) +- Updated with the latest blog posts [`803e8c47`](https://github.com/AlexRogalskiy/java-patterns/commit/803e8c47) +- Updated with the latest blog posts [`c556f6c9`](https://github.com/AlexRogalskiy/java-patterns/commit/c556f6c9) +- Updated with the latest blog posts [`7f69371c`](https://github.com/AlexRogalskiy/java-patterns/commit/7f69371c) +- docs: updates on docs page speed [`f8e109f7`](https://github.com/AlexRogalskiy/java-patterns/commit/f8e109f7) +- docs: updates on workflows [`dd316daf`](https://github.com/AlexRogalskiy/java-patterns/commit/dd316daf) +- :arrow_up: Updates wagoid/commitlint-github-action action to v2.2.3 [`5a2e52a0`](https://github.com/AlexRogalskiy/java-patterns/commit/5a2e52a0) +- :arrow_up: Updates Matticusau/pr-helper action to v1.2.5 [`94f59359`](https://github.com/AlexRogalskiy/java-patterns/commit/94f59359) +- Updated with the latest blog posts [`48a20c52`](https://github.com/AlexRogalskiy/java-patterns/commit/48a20c52) +- Updated with the latest blog posts [`09b6a5d2`](https://github.com/AlexRogalskiy/java-patterns/commit/09b6a5d2) +- Updated with the latest blog posts [`4c2b96a0`](https://github.com/AlexRogalskiy/java-patterns/commit/4c2b96a0) +- Updated with the latest blog posts [`02bb09c2`](https://github.com/AlexRogalskiy/java-patterns/commit/02bb09c2) +- Updated with the latest blog posts [`1dfe8f78`](https://github.com/AlexRogalskiy/java-patterns/commit/1dfe8f78) +- docs: updates on docs page speed [`2a5e0c30`](https://github.com/AlexRogalskiy/java-patterns/commit/2a5e0c30) +- docs: updates on workflows [`0fe4ef24`](https://github.com/AlexRogalskiy/java-patterns/commit/0fe4ef24) +- Updated with the latest blog posts [`89b0480f`](https://github.com/AlexRogalskiy/java-patterns/commit/89b0480f) +- Updated with the latest blog posts [`ddc60600`](https://github.com/AlexRogalskiy/java-patterns/commit/ddc60600) +- Updated with the latest blog posts [`de984c21`](https://github.com/AlexRogalskiy/java-patterns/commit/de984c21) +- docs: updates on docs page speed [`8099b8af`](https://github.com/AlexRogalskiy/java-patterns/commit/8099b8af) +- github-actions: bump wagoid/commitlint-github-action [`7e265d34`](https://github.com/AlexRogalskiy/java-patterns/commit/7e265d34) +- Updated with the latest blog posts [`02998622`](https://github.com/AlexRogalskiy/java-patterns/commit/02998622) +- Updated with the latest blog posts [`4db4ae00`](https://github.com/AlexRogalskiy/java-patterns/commit/4db4ae00) +- Updated with the latest blog posts [`530fb205`](https://github.com/AlexRogalskiy/java-patterns/commit/530fb205) +- docs: updates on docs page speed [`2cf3922f`](https://github.com/AlexRogalskiy/java-patterns/commit/2cf3922f) +- Updated with the latest blog posts [`9f2a156d`](https://github.com/AlexRogalskiy/java-patterns/commit/9f2a156d) +- Updated with the latest blog posts [`37714021`](https://github.com/AlexRogalskiy/java-patterns/commit/37714021) +- Updated with the latest blog posts [`0d6f96c0`](https://github.com/AlexRogalskiy/java-patterns/commit/0d6f96c0) +- Updated with the latest blog posts [`f4dbeb3e`](https://github.com/AlexRogalskiy/java-patterns/commit/f4dbeb3e) +- docs: updates on docs page speed [`eb8245ee`](https://github.com/AlexRogalskiy/java-patterns/commit/eb8245ee) +- Updated with the latest blog posts [`b58b17e6`](https://github.com/AlexRogalskiy/java-patterns/commit/b58b17e6) +- Updated with the latest blog posts [`68f9c399`](https://github.com/AlexRogalskiy/java-patterns/commit/68f9c399) +- Updated with the latest blog posts [`4026e917`](https://github.com/AlexRogalskiy/java-patterns/commit/4026e917) +- Updated with the latest blog posts [`aa2a4230`](https://github.com/AlexRogalskiy/java-patterns/commit/aa2a4230) +- Updated with the latest blog posts [`c93b9e2a`](https://github.com/AlexRogalskiy/java-patterns/commit/c93b9e2a) +- docs: updates on docs page speed [`f8d3fda9`](https://github.com/AlexRogalskiy/java-patterns/commit/f8d3fda9) +- Updated with the latest blog posts [`e762b485`](https://github.com/AlexRogalskiy/java-patterns/commit/e762b485) +- Updated with the latest blog posts [`7747e47b`](https://github.com/AlexRogalskiy/java-patterns/commit/7747e47b) +- Updated with the latest blog posts [`6c5caf9b`](https://github.com/AlexRogalskiy/java-patterns/commit/6c5caf9b) +- Updated with the latest blog posts [`27d8db61`](https://github.com/AlexRogalskiy/java-patterns/commit/27d8db61) +- Updated with the latest blog posts [`d45a574e`](https://github.com/AlexRogalskiy/java-patterns/commit/d45a574e) +- docs: updates on docs page speed [`b8eede1e`](https://github.com/AlexRogalskiy/java-patterns/commit/b8eede1e) +- github-actions: bump Matticusau/pr-helper from v1.2.4 to v1.2.5 [`8360f863`](https://github.com/AlexRogalskiy/java-patterns/commit/8360f863) +- Updated with the latest blog posts [`91f8fe47`](https://github.com/AlexRogalskiy/java-patterns/commit/91f8fe47) +- Updated with the latest blog posts [`f7ba5ebb`](https://github.com/AlexRogalskiy/java-patterns/commit/f7ba5ebb) +- Updated with the latest blog posts [`518baeb5`](https://github.com/AlexRogalskiy/java-patterns/commit/518baeb5) +- docs: updates on docs page speed [`b1a4f827`](https://github.com/AlexRogalskiy/java-patterns/commit/b1a4f827) +- github-actions: bump JamesIves/github-pages-deploy-action [`8522603a`](https://github.com/AlexRogalskiy/java-patterns/commit/8522603a) +- docs: updates on workflows [`a76073bf`](https://github.com/AlexRogalskiy/java-patterns/commit/a76073bf) +- Updated with the latest blog posts [`9457ffef`](https://github.com/AlexRogalskiy/java-patterns/commit/9457ffef) +- Updated with the latest blog posts [`3cf7a7a7`](https://github.com/AlexRogalskiy/java-patterns/commit/3cf7a7a7) +- Updated with the latest blog posts [`0a6752ad`](https://github.com/AlexRogalskiy/java-patterns/commit/0a6752ad) +- Updated with the latest blog posts [`640ad20e`](https://github.com/AlexRogalskiy/java-patterns/commit/640ad20e) +- Updated with the latest blog posts [`2da555a7`](https://github.com/AlexRogalskiy/java-patterns/commit/2da555a7) +- Updated with the latest blog posts [`1388d129`](https://github.com/AlexRogalskiy/java-patterns/commit/1388d129) +- docs: updates on docs page speed [`0f4cc4ae`](https://github.com/AlexRogalskiy/java-patterns/commit/0f4cc4ae) +- :arrow_up: Updates JamesIves/github-pages-deploy-action action to v4 [`1c254614`](https://github.com/AlexRogalskiy/java-patterns/commit/1c254614) +- docs: updates on workflows [`e3b6edf2`](https://github.com/AlexRogalskiy/java-patterns/commit/e3b6edf2) +- docs: updates on workflows [`38c9df06`](https://github.com/AlexRogalskiy/java-patterns/commit/38c9df06) +- docs: updates on workflows [`1fd0792a`](https://github.com/AlexRogalskiy/java-patterns/commit/1fd0792a) +- Updated with the latest blog posts [`892f4199`](https://github.com/AlexRogalskiy/java-patterns/commit/892f4199) +- Updated with the latest blog posts [`f1bdbc51`](https://github.com/AlexRogalskiy/java-patterns/commit/f1bdbc51) +- docs: updates on docs page speed [`7dafc350`](https://github.com/AlexRogalskiy/java-patterns/commit/7dafc350) +- github-actions: bump actions/cache from v2 to v2.1.4 [`1605d46a`](https://github.com/AlexRogalskiy/java-patterns/commit/1605d46a) +- github-actions: bump mondeja/remove-labels-gh-action from v1.0.0 to v1 [`6e262ec1`](https://github.com/AlexRogalskiy/java-patterns/commit/6e262ec1) +- Updated with the latest blog posts [`cc08b25b`](https://github.com/AlexRogalskiy/java-patterns/commit/cc08b25b) +- Updated with the latest blog posts [`840f9649`](https://github.com/AlexRogalskiy/java-patterns/commit/840f9649) +- docs: updates on docs page speed [`7926ccaa`](https://github.com/AlexRogalskiy/java-patterns/commit/7926ccaa) +- docs: updates on workflows [`f5b3bb1c`](https://github.com/AlexRogalskiy/java-patterns/commit/f5b3bb1c) +- Optimised images with calibre/image-actions [`71b9572d`](https://github.com/AlexRogalskiy/java-patterns/commit/71b9572d) +- docs: updates on workflows [`be5b4f23`](https://github.com/AlexRogalskiy/java-patterns/commit/be5b4f23) +- docs: updates on workflows [`5c295296`](https://github.com/AlexRogalskiy/java-patterns/commit/5c295296) +- Auto update markdown TOC [`7f99ab06`](https://github.com/AlexRogalskiy/java-patterns/commit/7f99ab06) +- docs: updates on workflows [`74424a48`](https://github.com/AlexRogalskiy/java-patterns/commit/74424a48) +- Auto update markdown TOC [`cca58fb5`](https://github.com/AlexRogalskiy/java-patterns/commit/cca58fb5) +- docs: updates on workflows [`57b45c0f`](https://github.com/AlexRogalskiy/java-patterns/commit/57b45c0f) +- docs: updates on workflows [`17c4f144`](https://github.com/AlexRogalskiy/java-patterns/commit/17c4f144) +- docs: updates on workflows [`5fe0ab78`](https://github.com/AlexRogalskiy/java-patterns/commit/5fe0ab78) +- docs: updates on workflows [`62442629`](https://github.com/AlexRogalskiy/java-patterns/commit/62442629) +- docs: updates on open graph cards [`5bdfa553`](https://github.com/AlexRogalskiy/java-patterns/commit/5bdfa553) +- docs: updates on workflows [`5185c15c`](https://github.com/AlexRogalskiy/java-patterns/commit/5185c15c) +- docs: updates on workflows [`348ddea6`](https://github.com/AlexRogalskiy/java-patterns/commit/348ddea6) +- docs: updates on workflows [`0d272d92`](https://github.com/AlexRogalskiy/java-patterns/commit/0d272d92) +- docs: updates on open graph cards [`86fad23e`](https://github.com/AlexRogalskiy/java-patterns/commit/86fad23e) +- Delete **Java Design patterns**%20for social media platforms: alexander-rogalsky.gitbook.io.png [`0ff51c93`](https://github.com/AlexRogalskiy/java-patterns/commit/0ff51c93) +- docs: updates on workflows [`4b77dc40`](https://github.com/AlexRogalskiy/java-patterns/commit/4b77dc40) +- :arrow_up: Updates wagoid/commitlint-github-action action to v2.2.0 [`34961aee`](https://github.com/AlexRogalskiy/java-patterns/commit/34961aee) +- docs: updates on open graph cards [`00c2fda8`](https://github.com/AlexRogalskiy/java-patterns/commit/00c2fda8) +- docs: updates on workflows [`87312df7`](https://github.com/AlexRogalskiy/java-patterns/commit/87312df7) +- docs: updates on workflows [`24133b3a`](https://github.com/AlexRogalskiy/java-patterns/commit/24133b3a) +- docs: updates on open graph cards [`b07b4063`](https://github.com/AlexRogalskiy/java-patterns/commit/b07b4063) +- docs: updates on workflows [`e68991d9`](https://github.com/AlexRogalskiy/java-patterns/commit/e68991d9) +- Optimised images with calibre/image-actions [`6fd58c4e`](https://github.com/AlexRogalskiy/java-patterns/commit/6fd58c4e) +- docs: updates on workflows [`9f929316`](https://github.com/AlexRogalskiy/java-patterns/commit/9f929316) +- docs: updates on open graph cards [`40c01972`](https://github.com/AlexRogalskiy/java-patterns/commit/40c01972) +- docs: updates on workflows [`e8b00f6f`](https://github.com/AlexRogalskiy/java-patterns/commit/e8b00f6f) +- docs: updates on open graph cards [`3936ce9e`](https://github.com/AlexRogalskiy/java-patterns/commit/3936ce9e) +- docs: updates on workflows [`31507e48`](https://github.com/AlexRogalskiy/java-patterns/commit/31507e48) +- docs: updates on workflows [`b29264fd`](https://github.com/AlexRogalskiy/java-patterns/commit/b29264fd) +- Updated with the latest blog posts [`62122d9b`](https://github.com/AlexRogalskiy/java-patterns/commit/62122d9b) +- Updated with the latest blog posts [`130f7ff2`](https://github.com/AlexRogalskiy/java-patterns/commit/130f7ff2) +- Updated with the latest blog posts [`2aeb86ba`](https://github.com/AlexRogalskiy/java-patterns/commit/2aeb86ba) +- docs: updates on docs page speed [`006f93b6`](https://github.com/AlexRogalskiy/java-patterns/commit/006f93b6) +- docs: updates on workflows [`67db9081`](https://github.com/AlexRogalskiy/java-patterns/commit/67db9081) +- docs: updates on workflows [`613f68d4`](https://github.com/AlexRogalskiy/java-patterns/commit/613f68d4) +- Updated with the latest blog posts [`5ef9f99c`](https://github.com/AlexRogalskiy/java-patterns/commit/5ef9f99c) +- Updated with the latest blog posts [`25ca815e`](https://github.com/AlexRogalskiy/java-patterns/commit/25ca815e) +- Updated with the latest blog posts [`6a739523`](https://github.com/AlexRogalskiy/java-patterns/commit/6a739523) +- Updated with the latest blog posts [`d5495152`](https://github.com/AlexRogalskiy/java-patterns/commit/d5495152) +- docs: updates on docs page speed [`1ec83223`](https://github.com/AlexRogalskiy/java-patterns/commit/1ec83223) +- docs: updates on workflows [`a4a3bae9`](https://github.com/AlexRogalskiy/java-patterns/commit/a4a3bae9) +- docs: updates on workflows [`4ab84063`](https://github.com/AlexRogalskiy/java-patterns/commit/4ab84063) +- docs: updates on workflows [`fa91d0c1`](https://github.com/AlexRogalskiy/java-patterns/commit/fa91d0c1) +- Updated with the latest blog posts [`cd7da5a2`](https://github.com/AlexRogalskiy/java-patterns/commit/cd7da5a2) +- Updated with the latest blog posts [`312d950b`](https://github.com/AlexRogalskiy/java-patterns/commit/312d950b) +- docs: updates on docs page speed [`f0f0c862`](https://github.com/AlexRogalskiy/java-patterns/commit/f0f0c862) +- docs: updates on docs page speed [`3b59195a`](https://github.com/AlexRogalskiy/java-patterns/commit/3b59195a) +- docs: updates on workflows [`31832649`](https://github.com/AlexRogalskiy/java-patterns/commit/31832649) +- docs: updates on workflows [`ed54da9e`](https://github.com/AlexRogalskiy/java-patterns/commit/ed54da9e) +- docs: updates on workflows [`8e97dabe`](https://github.com/AlexRogalskiy/java-patterns/commit/8e97dabe) +- docs: updates on workflows [`d9eac639`](https://github.com/AlexRogalskiy/java-patterns/commit/d9eac639) +- docs: updates on workflows [`e7666e03`](https://github.com/AlexRogalskiy/java-patterns/commit/e7666e03) +- docs: updates on workflows [`46fec277`](https://github.com/AlexRogalskiy/java-patterns/commit/46fec277) +- docs: updates on workflows [`74896e00`](https://github.com/AlexRogalskiy/java-patterns/commit/74896e00) +- docs: updates on workflows [`da66f3c3`](https://github.com/AlexRogalskiy/java-patterns/commit/da66f3c3) +- Updated with the latest blog posts [`d5e681ce`](https://github.com/AlexRogalskiy/java-patterns/commit/d5e681ce) +- Updated with the latest blog posts [`46195383`](https://github.com/AlexRogalskiy/java-patterns/commit/46195383) +- Updated with the latest blog posts [`9eb03db6`](https://github.com/AlexRogalskiy/java-patterns/commit/9eb03db6) +- Updated with the latest blog posts [`a418e5d9`](https://github.com/AlexRogalskiy/java-patterns/commit/a418e5d9) +- Updated with the latest blog posts [`5288bc48`](https://github.com/AlexRogalskiy/java-patterns/commit/5288bc48) +- Updated with the latest blog posts [`eec7cdda`](https://github.com/AlexRogalskiy/java-patterns/commit/eec7cdda) +- docs: updates on docs page speed [`9b4d528c`](https://github.com/AlexRogalskiy/java-patterns/commit/9b4d528c) +- Updated with the latest blog posts [`6d1e87d2`](https://github.com/AlexRogalskiy/java-patterns/commit/6d1e87d2) +- docs: updates on docs page speed [`c11b7957`](https://github.com/AlexRogalskiy/java-patterns/commit/c11b7957) +- docs: updates on workflows [`30029e6a`](https://github.com/AlexRogalskiy/java-patterns/commit/30029e6a) +- docs: updates on docs page speed [`36eb0de2`](https://github.com/AlexRogalskiy/java-patterns/commit/36eb0de2) +- docs: updates on workflows [`e8733ec3`](https://github.com/AlexRogalskiy/java-patterns/commit/e8733ec3) +- docs: updates on workflows [`719b74f3`](https://github.com/AlexRogalskiy/java-patterns/commit/719b74f3) +- Auto update markdown TOC [`a5a3c4b5`](https://github.com/AlexRogalskiy/java-patterns/commit/a5a3c4b5) +- docs: updates on workflows [`a7865041`](https://github.com/AlexRogalskiy/java-patterns/commit/a7865041) +- Updated with the latest blog posts [`d4764fba`](https://github.com/AlexRogalskiy/java-patterns/commit/d4764fba) +- docs: updates on workflows [`b5b2ef57`](https://github.com/AlexRogalskiy/java-patterns/commit/b5b2ef57) +- Auto update markdown TOC [`1ba02def`](https://github.com/AlexRogalskiy/java-patterns/commit/1ba02def) +- docs: updates on workflows [`370d9c69`](https://github.com/AlexRogalskiy/java-patterns/commit/370d9c69) +- docs: updates on workflows [`afece72b`](https://github.com/AlexRogalskiy/java-patterns/commit/afece72b) +- docs: updates on workflows [`de689346`](https://github.com/AlexRogalskiy/java-patterns/commit/de689346) +- docs: updates on workflows [`c2ab6d4e`](https://github.com/AlexRogalskiy/java-patterns/commit/c2ab6d4e) +- docs: updates on workflows [`5aee2499`](https://github.com/AlexRogalskiy/java-patterns/commit/5aee2499) +- docs: updates on workflows [`2f0382f2`](https://github.com/AlexRogalskiy/java-patterns/commit/2f0382f2) +- Auto update markdown TOC [`6c67abee`](https://github.com/AlexRogalskiy/java-patterns/commit/6c67abee) +- docs: updates on workflows [`d4105fdd`](https://github.com/AlexRogalskiy/java-patterns/commit/d4105fdd) +- Optimised images with calibre/image-actions [`9eacb6e4`](https://github.com/AlexRogalskiy/java-patterns/commit/9eacb6e4) +- docs: updates on workflows [`f263ce3c`](https://github.com/AlexRogalskiy/java-patterns/commit/f263ce3c) +- Auto update markdown TOC [`f3c63aa2`](https://github.com/AlexRogalskiy/java-patterns/commit/f3c63aa2) +- docs: updates on workflows [`e94dc33d`](https://github.com/AlexRogalskiy/java-patterns/commit/e94dc33d) +- Auto update markdown TOC [`c1b38db4`](https://github.com/AlexRogalskiy/java-patterns/commit/c1b38db4) +- docs: updates on workflows [`7d17b3d6`](https://github.com/AlexRogalskiy/java-patterns/commit/7d17b3d6) +- Updated with the latest blog posts [`fd3869a6`](https://github.com/AlexRogalskiy/java-patterns/commit/fd3869a6) +- Updated with the latest blog posts [`af0392e9`](https://github.com/AlexRogalskiy/java-patterns/commit/af0392e9) +- Compress Images [`0c4b60e8`](https://github.com/AlexRogalskiy/java-patterns/commit/0c4b60e8) +- Auto update markdown TOC [`3433495d`](https://github.com/AlexRogalskiy/java-patterns/commit/3433495d) +- Auto update markdown TOC [`67ca0dbc`](https://github.com/AlexRogalskiy/java-patterns/commit/67ca0dbc) +- docs: updates on workflows [`e072904b`](https://github.com/AlexRogalskiy/java-patterns/commit/e072904b) +- Auto update markdown TOC [`bbb149de`](https://github.com/AlexRogalskiy/java-patterns/commit/bbb149de) +- Auto update markdown TOC [`417ee872`](https://github.com/AlexRogalskiy/java-patterns/commit/417ee872) +- docs: updates on workflows [`a2aea0e0`](https://github.com/AlexRogalskiy/java-patterns/commit/a2aea0e0) +- Auto update markdown TOC [`67b7238b`](https://github.com/AlexRogalskiy/java-patterns/commit/67b7238b) +- Updated with the latest blog posts [`62855691`](https://github.com/AlexRogalskiy/java-patterns/commit/62855691) +- Updated with the latest blog posts [`0dff0cd2`](https://github.com/AlexRogalskiy/java-patterns/commit/0dff0cd2) +- Updated with the latest blog posts [`be170962`](https://github.com/AlexRogalskiy/java-patterns/commit/be170962) +- Auto update markdown TOC [`197dd37f`](https://github.com/AlexRogalskiy/java-patterns/commit/197dd37f) +- :arrow_up: Updates actions/checkout action to v2 [`9e56418c`](https://github.com/AlexRogalskiy/java-patterns/commit/9e56418c) +- docs: updates on workflows [`49d925d7`](https://github.com/AlexRogalskiy/java-patterns/commit/49d925d7) +- Auto update markdown TOC [`98d4d536`](https://github.com/AlexRogalskiy/java-patterns/commit/98d4d536) +- github-actions: bump Dunning-Kruger/unlock-issues from v1 to v1.1 [`5edb7c09`](https://github.com/AlexRogalskiy/java-patterns/commit/5edb7c09) +- github-actions: update actions/github-script requirement to v3.1 [`f5a0581c`](https://github.com/AlexRogalskiy/java-patterns/commit/f5a0581c) +- github-actions: bump prologic/action-remark-lint from v0.0.5 to v2 [`5d2d2498`](https://github.com/AlexRogalskiy/java-patterns/commit/5d2d2498) +- github-actions: bump actions/setup-node from v1 to v2.1.4 [`12b7d131`](https://github.com/AlexRogalskiy/java-patterns/commit/12b7d131) +- github-actions: bump dessant/lock-threads from v2.0.1 to v2.0.3 [`2abfdb2f`](https://github.com/AlexRogalskiy/java-patterns/commit/2abfdb2f) +- github-actions: bump wagoid/commitlint-github-action [`4d9956d3`](https://github.com/AlexRogalskiy/java-patterns/commit/4d9956d3) +- docs: updates on workflows [`c8e304f4`](https://github.com/AlexRogalskiy/java-patterns/commit/c8e304f4) +- Auto update markdown TOC [`8ce182e2`](https://github.com/AlexRogalskiy/java-patterns/commit/8ce182e2) +- docs: updates on workflows [`3f37ed2c`](https://github.com/AlexRogalskiy/java-patterns/commit/3f37ed2c) +- Updated with the latest blog posts [`1b9017ac`](https://github.com/AlexRogalskiy/java-patterns/commit/1b9017ac) +- Updated with the latest blog posts [`223efcfa`](https://github.com/AlexRogalskiy/java-patterns/commit/223efcfa) +- Updated with the latest blog posts [`39a89fae`](https://github.com/AlexRogalskiy/java-patterns/commit/39a89fae) +- Updated with the latest blog posts [`f372b17a`](https://github.com/AlexRogalskiy/java-patterns/commit/f372b17a) +- Auto update markdown TOC [`5627686f`](https://github.com/AlexRogalskiy/java-patterns/commit/5627686f) +- Auto update markdown TOC [`5ed1e920`](https://github.com/AlexRogalskiy/java-patterns/commit/5ed1e920) +- docs: updates on docs [`10b5fc7e`](https://github.com/AlexRogalskiy/java-patterns/commit/10b5fc7e) +- docs: updates on docs [`27d85a6f`](https://github.com/AlexRogalskiy/java-patterns/commit/27d85a6f) +- docs: updates on documentation [`a22a4516`](https://github.com/AlexRogalskiy/java-patterns/commit/a22a4516) +- docs: updates on documentation [`188f7d2c`](https://github.com/AlexRogalskiy/java-patterns/commit/188f7d2c) +- Auto update markdown TOC [`32a81390`](https://github.com/AlexRogalskiy/java-patterns/commit/32a81390) +- Auto update markdown TOC [`3f6cd313`](https://github.com/AlexRogalskiy/java-patterns/commit/3f6cd313) +- docs: updates on documentation [`dfd75818`](https://github.com/AlexRogalskiy/java-patterns/commit/dfd75818) +- docs: updates on documentation [`e211e580`](https://github.com/AlexRogalskiy/java-patterns/commit/e211e580) +- Auto update markdown TOC [`38dd270d`](https://github.com/AlexRogalskiy/java-patterns/commit/38dd270d) +- Auto update markdown TOC [`634607ad`](https://github.com/AlexRogalskiy/java-patterns/commit/634607ad) +- Auto update markdown TOC [`c0171f30`](https://github.com/AlexRogalskiy/java-patterns/commit/c0171f30) +- docs: updates on documentation [`366969d4`](https://github.com/AlexRogalskiy/java-patterns/commit/366969d4) +- docs: updates on VERSION [`e174a88d`](https://github.com/AlexRogalskiy/java-patterns/commit/e174a88d) +- Auto update markdown TOC [`9aca7501`](https://github.com/AlexRogalskiy/java-patterns/commit/9aca7501) + +#### [v1.5](https://github.com/AlexRogalskiy/java-patterns/compare/v1.4...v1.5) + +> January 29, 2021 + +- docs: updates on documentation [`e8a2882d`](https://github.com/AlexRogalskiy/java-patterns/commit/e8a2882d) +- docs: updates on documentation [`6c254940`](https://github.com/AlexRogalskiy/java-patterns/commit/6c254940) +- Updated with the latest blog posts [`c70a17ef`](https://github.com/AlexRogalskiy/java-patterns/commit/c70a17ef) +- docs: updates on documentation [`c1335409`](https://github.com/AlexRogalskiy/java-patterns/commit/c1335409) +- Update VERSION [`0634d5ee`](https://github.com/AlexRogalskiy/java-patterns/commit/0634d5ee) + +#### [v1.4](https://github.com/AlexRogalskiy/java-patterns/compare/v1.3...v1.4) + +> January 29, 2021 + +- docs: updates on documentation [`194ba7da`](https://github.com/AlexRogalskiy/java-patterns/commit/194ba7da) +- Update VERSION [`65f164af`](https://github.com/AlexRogalskiy/java-patterns/commit/65f164af) + +#### [v1.3](https://github.com/AlexRogalskiy/java-patterns/compare/v1.2...v1.3) + +> January 29, 2021 + +- Auto update markdown TOC [`144ffe9a`](https://github.com/AlexRogalskiy/java-patterns/commit/144ffe9a) +- docs: updates on documentation [`d6473019`](https://github.com/AlexRogalskiy/java-patterns/commit/d6473019) +- Update VERSION [`8dd2d3e7`](https://github.com/AlexRogalskiy/java-patterns/commit/8dd2d3e7) +- Update VERSION [`6bcf6d15`](https://github.com/AlexRogalskiy/java-patterns/commit/6bcf6d15) +- Auto update markdown TOC [`ee510014`](https://github.com/AlexRogalskiy/java-patterns/commit/ee510014) + +#### [v1.2](https://github.com/AlexRogalskiy/java-patterns/compare/v1.1...v1.2) + +> January 29, 2021 + +- docs: updates on documentation [`6420d590`](https://github.com/AlexRogalskiy/java-patterns/commit/6420d590) + +#### [v1.1](https://github.com/AlexRogalskiy/java-patterns/compare/1.0...v1.1) + +> January 29, 2021 + +- docs: updates on documentation [`4533e172`](https://github.com/AlexRogalskiy/java-patterns/commit/4533e172) +- docs: updates on documentation [`24dbb4ab`](https://github.com/AlexRogalskiy/java-patterns/commit/24dbb4ab) +- docs: updates on documentation [`cb3df8a2`](https://github.com/AlexRogalskiy/java-patterns/commit/cb3df8a2) +- Auto update markdown TOC [`b2960072`](https://github.com/AlexRogalskiy/java-patterns/commit/b2960072) +- Auto update markdown TOC [`e9023e81`](https://github.com/AlexRogalskiy/java-patterns/commit/e9023e81) diff --git a/CHART_CATEGORIES b/CHART_CATEGORIES new file mode 100644 index 00000000000..f7a893f9b4a --- /dev/null +++ b/CHART_CATEGORIES @@ -0,0 +1,3 @@ +Documentation +Wiki +E-Learning diff --git a/CHECKLIST.yml b/CHECKLIST.yml new file mode 100644 index 00000000000..98f80a22e1a --- /dev/null +++ b/CHECKLIST.yml @@ -0,0 +1,6 @@ +paths: + 'charts/*/values.yaml': + - 'Is the PR adding a new container? Please reviewer, add it to the models + (internal process)' + - 'Is the PR adding a new parameter? Please, ensure it’s documented in the + README.md' diff --git a/CITATION.cff b/CITATION.cff new file mode 100644 index 00000000000..6d88d9639aa --- /dev/null +++ b/CITATION.cff @@ -0,0 +1,9 @@ +cff-version: 1.1.0 +message: "If you use this software, please cite it as below." +authors: + - family-names: Alexander + given-names: Rogalsky + orcid: https://zenodo.org/badge/latestdoi/329967283 +title: AlexRogalskiy/java-patterns: 1.6 +version: 1.6 +date-released: 2017-12-18 diff --git a/CNAME b/CNAME new file mode 100644 index 00000000000..fb7095d8584 --- /dev/null +++ b/CNAME @@ -0,0 +1 @@ +https://alexander-rogalsky.gitbook.io/java-patterns diff --git a/CODEOWNERS b/CODEOWNERS new file mode 100644 index 00000000000..88fee30f367 --- /dev/null +++ b/CODEOWNERS @@ -0,0 +1,12 @@ +# Configuration for the GitHub feature to automatically request reviews from the code owners when a pull request +# changes any owned files. + +# Use this file to define individuals or teams that are responsible for code in a repository. +# Read more: + +# To allow mergify to auto-merge, we must in general not assign code owners to files + +# References: +# https://github.com/blog/2392-introducing-code-owners +# https://help.github.com/articles/about-codeowners +* @AlexRogalskiy diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md new file mode 100644 index 00000000000..f475915d111 --- /dev/null +++ b/CONTRIBUTING.md @@ -0,0 +1,81 @@ +# Contributing + +When contributing to this repository, please first discuss the change you wish to make via issue, email, or +any other method with the owners of this repository before making a change. + +Please note we have a code of conduct, please follow it in all your interactions with the project. + +## Pull Request Process + +1. Ensure any install or build dependencies are removed before the end of the layer when doing a build. +2. Update the README.md with details of changes to the interface, this includes new environment variables, + exposed ports, useful file locations and container parameters. +3. Increase the version numbers in any examples files and the README.md to the new version that this Pull + Request would represent. The versioning scheme we use is [SemVer](http://semver.org/). +4. You may merge the Pull Request in once you have the sign-off of two other developers, or if you do not have + permission to do that, you may request the second reviewer to merge it for you. + +## Code of Conduct + +### Our Pledge + +In the interest of fostering an open and welcoming environment, we as contributors and maintainers pledge to +making participation in our project and our community a harassment-free experience for everyone, regardless of +age, body size, disability, ethnicity, gender identity and expression, level of experience, nationality, +personal appearance, race, religion, or sexual identity and orientation. + +### Our Standards + +Examples of behavior that contributes to creating a positive environment include: + +- Using welcoming and inclusive language +- Being respectful of differing viewpoints and experiences +- Gracefully accepting constructive criticism +- Focusing on what is best for the community +- Showing empathy towards other community members + +Examples of unacceptable behavior by participants include: + +- The use of sexualized language or imagery and unwelcome sexual attention or advances +- Trolling, insulting/derogatory comments, and personal or political attacks +- Public or private harassment +- Publishing others' private information, such as a physical or electronic address, without explicit + permission +- Other conduct which could reasonably be considered inappropriate in a professional setting + +### Our Responsibilities + +Project maintainers are responsible for clarifying the standards of acceptable behavior and are expected to +take appropriate and fair corrective action in response to any instances of unacceptable behavior. + +Project maintainers 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, or to ban temporarily or +permanently any contributor for other behaviors that they deem inappropriate, threatening, offensive, or +harmful. + +### Scope + +This Code of Conduct applies both within project spaces and in public spaces when an individual is +representing the project or its community. Examples of representing a project or community include using an +official project e-mail address, posting via an official social media account, or acting as an appointed +representative at an online or offline event. Representation of a project may be further defined and clarified +by project maintainers. + +### Enforcement + +Instances of abusive, harassing, or otherwise unacceptable behavior may be reported by contacting the project +team at \[INSERT EMAIL ADDRESS]. All complaints will be reviewed and investigated and will result in a +response that is deemed necessary and appropriate to the circumstances. The project team is obligated to +maintain confidentiality with regard to the reporter of an incident. Further details of specific enforcement +policies may be posted separately. + +Project maintainers who do not follow or enforce the Code of Conduct in good faith may face temporary or +permanent repercussions as determined by other members of the project's leadership. + +### Attribution + +This Code of Conduct is adapted from the [Contributor Covenant][homepage], version 1.4, available at +[http://contributor-covenant.org/version/1/4][version] + +[homepage]: http://contributor-covenant.org +[version]: http://contributor-covenant.org/version/1/4/ diff --git a/HOWTO.md b/HOWTO.md new file mode 100644 index 00000000000..10230068886 --- /dev/null +++ b/HOWTO.md @@ -0,0 +1,42 @@ +# HOWTO Guide + +## Steps + +To manage python project packages you can use - `pip-compile-multi` utility. + +To pin packages to the current versions you should run the following command: + +```shell +$ pip-compile-multi -n local -n testwin +``` + +It produces files `base.txt`, `test.txt`, `local.txt` and `testwin.txt` with recursively retrieved hard-pinned +package versions. + +The second command takes these `.txt` files and produce `.hash` files with attached package hashes: + +```shell +$ pip-compile-multi -n local -n testwin -g local -g testwin -i txt -o hash +``` + +To automate this tasks you can use `tox` utility with the following configuration: + +```ini +[testenv:upgrade] +basepython = python3.9 +deps = pip-compile-multi +commands = + pip-compile-multi -n local -n testwin + pip-compile-multi -n local -n testwin -g local -g testwin -i txt -o hash +``` + +To execute tox upgrade configuration you should run: + +```shell +$ tox -e upgrade +``` + +## Links + +[tox](https://tox.readthedocs.io/en/latest/) +[pip-compile-multi](https://pip-compile-multi.readthedocs.io/en/latest/) diff --git a/Makefile b/Makefile new file mode 100644 index 00000000000..2db023dc6fa --- /dev/null +++ b/Makefile @@ -0,0 +1,966 @@ +################################################################################ +# Dependencies # +################################################################################ + +# MAKE_DIRS stores makefile directories +MAKE_DIRS := makefiles + +include $(foreach dir,$(MAKE_DIRS),$(sort $(wildcard $(dir)/*.mk))) +include $(foreach dir,$(MAKE_DIRS),$(sort $(wildcard $(dir)/*/*.mk))) + +################################################################################ +# Variables # +################################################################################ + +# Since we rely on paths relative to the makefile location, abort if make isn't being run from there. +$(if $(findstring "..",$(MAKEFILE_LIST)),$(error Please only invoke this makefile from the directory it resides in)) +# Make sure that all required utilities can be located. +UTILS_CHECK := $(or $(shell which $(UTILS) >/dev/null && echo 'ok'),$(error Did you forget to install $(UTILS) after cloning the repo? At least one of the required supporting utilities not found: $(UTILS))) + +# DOCKER_REGISTRY defines docker registry +DOCKER_REGISTRY := docker.io +# DOCKER_ORG defines docker organization +DOCKER_ORG := nullables +# DOCKER_IMAGE_NAME defines docker image name +DOCKER_IMAGE_NAME := styled-java-patterns +# IMAGE_NAME defines image name +IMAGE_NAME := $(DOCKER_REGISTRY)/$(DOCKER_ORG)/$(DOCKER_IMAGE_NAME):$(DOCKER_VERSION) +# MUTABLE_IMAGE_NAME defines mutable image name +MUTABLE_IMAGE_NAME := $(DOCKER_REGISTRY)/$(DOCKER_ORG)/$(DOCKER_IMAGE_NAME):$(MUTABLE_DOCKER_VERSION) +# OKTETO_IMAGE_NAME defines okteto image name +OKTETO_IMAGE_NAME := okteto/$(DOCKER_IMAGE_NAME) +# DOCKER_HUB_IMAGE_NAME defines docker hub image name +DOCKER_HUB_IMAGE_NAME := alexanderr/$(DOCKER_IMAGE_NAME) + +# CLUSTER_NAME defines cluster name +CLUSTER_NAME := backend-java-patterns +# CLUSTER_NAMESPACE defines cluster namespace +CLUSTER_NAMESPACE := webapp + +# SHELL stores the shell that the Makefile uses. +SHELL := $(shell if [ -x "$$BASH" ]; then echo $$BASH; \ + else if [ -x /bin/bash ]; then echo /bin/bash -o errexit -o nounset; \ + else echo sh; fi; fi) +# PYTHON_CMD stores python binary +PYTHON_CMD := $(shell command -v python3 2> /dev/null || type -p python) +# HELMFILE_CMD stores helmfile binary +HELMFILE_CMD := $(shell command -v helmfile 2> /dev/null || type -p helmfile) +# SED_CMD stores stream editor binary +SED_CMD := $(shell command -v gsed 2> /dev/null || command -v sed 2> /dev/null || type -p sed) +# DOCKER_CMD stores docker binary +DOCKER_CMD := $(shell command -v docker 2> /dev/null || command -v podman 2> /dev/null || type -p docker) +# DOCKER_COMPOSE_CMD stores docker-compose binary +DOCKER_COMPOSE_CMD := $(shell command -v docker-compose 2> /dev/null || command -v docker compose 2> /dev/null || type -p docker-compose) +# NPM_CMD stores npm binary +NPM_CMD := $(shell command -v npm 2> /dev/null || type -p npm) +# SKAFFOLD_CMD stores skaffold binary +SKAFFOLD_CMD := $(shell command -v skaffold 2> /dev/null || type -p skaffold) +# TILT_CMD stores tilt binary +TILT_CMD := $(shell command -v tilt 2> /dev/null || type -p tilt) +# HELM_CMD stores helm binary +HELM_CMD := $(shell command -v helm 2> /dev/null || type -p helm) +# OKTETO_CMD stores okteto binary +OKTETO_CMD := $(shell command -v okteto 2> /dev/null || type -p okteto) +# GIT_CMD stores git binary +GIT_CMD := $(shell command -v git 2> /dev/null || type -p git) + +# DOCKER_DIR stores docker configurations +DOCKER_DIR := $(GIT_ROOT_DIR) +# SCRIPT_DIR stores script configurations +SCRIPT_DIR := scripts + +# VERBOSE stores logging output verbosity +VERBOSE := false + +# VENV_NAME stores virtual environment name +VENV_NAME := venv +# VENV_BIN stores virtual environment binary directory +VENV_BIN := $(VENV_NAME)/bin +# VENV_PIP stores virtual environment pip binary +VENV_PIP := $(VENV_BIN)/pip3 +# VENV_PYTHON stores virtual environment python binary +VENV_PYTHON := $(VENV_BIN)/python3 + +# PIP_OPTS stores pip options +PIP_OPTS := --disable-pip-version-check --no-cache-dir +# PIP_BUILD_OPTS stores pip build options +PIP_BUILD_OPTS := $(PIP_OPTS) --no-compile --prefer-binary +# MKDOCS_BUILD_OPTS stores mkdocs build options +MKDOCS_BUILD_OPTS := --clean --strict --verbose --config-file mkdocs.yml +# MKDOCS_DEPLOY_OPTS stores mkdocs deploy options +MKDOCS_DEPLOY_OPTS := --verbose --clean --force --remote-branch gh-pages +# MKDOCS_SERVE_OPTS stores mkdocs serve options +MKDOCS_SERVE_OPTS := --verbose --dirtyreload --dev-addr=0.0.0.0:8000 --config-file mkdocs.yml +# HTMLTEST stores htmltest binary +HTMLTEST := htmltest +# HTMLTEST_OPTS stores htmltest binary arguments +HTMLTEST_OPTS := --skip-external --conf .htmltest.yml + +# CHART_RELEASE_DIR stores chart release folder +CHART_RELEASE_DIR := release +# GITHUB_PAGES_DIR stores github pages folder +GITHUB_PAGES_DIR := site + +# REQUIRED_TOOLS stores required binary tools +REQUIRED_TOOLS := $(UTILS) + +# SAVE_LOG stores make logs +SAVE_LOG = 2>&1 | tee "$(PWD)/logs/$(DOCKER_IMAGE_NAME).log" + +# VARS stores printing variables +VARS += DOCKER_IMAGE_NAME +VARS += IMAGE_NAME MUTABLE_IMAGE_NAME +VARS += MUTABLE_IMAGE_NAME +VARS += OKTETO_IMAGE_NAME +VARS += DOCKER_HUB_IMAGE_NAME +VARS += SHELL +VARS += SED_CMD +VARS += DOCKER_CMD +VARS += DOCKER_COMPOSE_CMD +VARS += PYTHON_CMD +VARS += NPM_CMD +VARS += SKAFFOLD_CMD +VARS += TILT_CMD +VARS += HELM_CMD +VARS += GIT_CMD +VARS += DOCKER_DIR +VARS += VERBOSE + +################################################################################ +# Targets # +################################################################################ + +# Run all by default when "make" is invoked. +.DEFAULT_GOAL := help + +$(REQUIRED_TOOLS): + @hash $@ 2>/dev/null || (echo "please install $@" && exit 1) + +# Check docker image running. +.PHONY: _check_docker_image +_check_docker_image: + @if [[ -n "$$($(AT)$(DOCKER_CMD) ps --format '{{ .Names }}' --filter name="^/$(IMAGE_NAME)\$$")" ]]; then \ + printf "**************************************************************************\n" ; \ + printf "Not launching new container because old container is still running.\n"; \ + printf "Exit all running container shells gracefully or kill the container with\n\n"; \ + printf " docker kill %s\n\n" "$(IMAGE_NAME)" ; \ + printf "**************************************************************************\n" ; \ + exit 9 ; \ + fi + +# Default target (by virtue of being the first non '.'-prefixed in the file). +.PHONY: _no-target-specified +_no-target-specified: + $(error Please specify the target to make - `make list` shows targets) + +# Create virtual environment. +.PHONY: _venv +_venv: + $(AT)virtualenv $(VENV_NAME) + . $(VENV_BIN)/activate + $(AT)echo + $(AT)echo "$(COLOR_RED)Virtual env created. The source pages are in $(VENV_NAME) directory.$(COLOR_NORMAL)" + $(AT)echo + +# Create environment variables +.PHONY: _check_env +_check_env: +ifneq ($(SYS_OS),Windows_NT) +ifneq ($(SYS_OS), Darwin) + $(AT)echo USER_ID=$(UID) >> .env + $(AT)echo GROUP_ID=$(GID) >> .env +endif +endif + +# Create help information. +.PHONY: help +##= all: to run linting & format tasks +##= clean: to remove temporary directories +##= deps: to install dependencies +##= diff: to list modified files +##= dirs: to list directories +##= docker-build: to build docker image +##= docker-start: to start docker image +##= docker-stop: to stop docker image +##= docker-restart: to restart docker image +##= gh-pages: to create new version of documentation and publish on GitHub pages +##= git-authors: to lint git authors +##= git-pull: to pull remote changes +##= helm-dev: to lint and create helm package +##= helm-lint: to lint helm charts +##= helm-package: to package helm chart +##= helm-start: to run k8s cluster +##= helm-stop : to stop k8s cluster +##= skaffold-start: to run containers via skaffold +##= skaffold-stop : to destroy containers via skaffold +##= help: to list all make targets with description +##= install-pip: to install python pip module +##= list: to list all make targets +##= local-install: to install dependencies locally +##= local-build: to build documentation locally +##= local-run: to run documentation locally +##= okteto: to build okteto image +##= tilt-start: to start development k8s cluster +##= tilt-stop: to stop development k8s cluster +##= venv-build: to build documentation in virtual environment +##= venv-run: to run documentation in virtual environment +##= versions: to list commands versions +help: + $(AT)echo + $(AT)echo + $(AT)echo "Please use [make ] where is one of:" + $(AT)echo + $(AT)$(SED_CMD) -n 's/^##=//p' $(MAKEFILE_LIST) 2>/dev/null | column -t -s ':' | $(SED_CMD) -e 's/^/ /' + $(AT)echo + $(AT)echo + +# Lists all targets defined in this makefile. +.PHONY: list +list: + $(AT)$(MAKE) -pRrn : -f $(MAKEFILE_LIST) 2>/dev/null | awk -v RS= -F: '/^# File/,/^# Finished Make data base/ {if ($$1 !~ "^[#.]") {print $$1}}' | command grep -v -e '^[^[:alnum:]]' -e '^$@$$command ' | sort + +# Lists all dirs. +.PHONY: dirs +dirs: + $(AT)echo + $(AT)echo "$(COLOR_RED)🌟 Running dirs command$(COLOR_NORMAL)" + $(AT)echo + $(AT)echo "$(shell ls -ad -- */)" + $(AT)echo + $(AT)echo "$(COLOR_RED)Directory list finished.$(COLOR_NORMAL)" + $(AT)echo + +# Run version command. +.PHONY: versions +versions: + $(AT)echo + $(AT)echo "$(COLOR_RED)🌟 Running versions command.$(COLOR_NORMAL)" + $(AT)echo + $(AT)$(DOCKER_CMD) --version + $(AT)echo + $(AT)$(TILT_CMD) version + $(AT)echo + $(AT)$(HELM_CMD) version + $(AT)echo + $(AT)echo + $(AT)echo "$(COLOR_RED)Versions list finished.$(COLOR_NORMAL)" + $(AT)echo + +# Clean removes all temporary files. +.PHONY: clean +clean: + $(AT)echo + $(AT)echo "$(COLOR_RED)🌟 Running clean command.$(COLOR_NORMAL)" + $(AT)echo + $(AT)rm -rf $(TMP_BASE) + $(AT)rm -rf $(CHART_RELEASE_DIR) + $(AT)rm -rf $(GITHUB_PAGES_DIR) + $(AT)rm -rf $(VENV_NAME) + $(AT)echo + $(AT)echo "$(COLOR_RED)Clean finished.$(COLOR_NORMAL)" + $(AT)echo + +# Ensures that the git workspace is clean. +.PHONY: _ensure-clean +_ensure-clean: + $(AT)[ -z "$$(($(GIT_CMD) status --porcelain --untracked-files=no || echo err) | command grep -v 'CHANGELOG.md')" ] || { echo "Workspace is not clean; please commit changes first." >&2; exit 2; } + +# Ensure docker tag command. +.PHONY: _ensure-docker-tag +_ensure-docker-tag: +ifndef DOCKER_TAG + $(error Please invoke with `make DOCKER_TAG= docker-build`) +endif + +# Ensure skaffold tag command. +.PHONY: _ensure-skaffold-tag +_ensure-skaffold-tag: +ifndef SKAFFOLD_TAG + $(error Please invoke with `make SKAFFOLD_TAG=[ docker | helm | kubectl | kustomize ] skaffold[ start | stop ]`) +endif + +# Run docker scan command. +.PHONY: docker-scan +docker-scan: + $(AT)echo + $(AT)echo "$(COLOR_RED)🌟 Running docker-scan command.$(COLOR_NORMAL)" + $(AT)echo + $(AT)$(DOCKER_CMD) scan --json --group-issues --dependency-tree --file Dockerfile "$(IMAGE_NAME)" $(SAVE_LOG) + $(AT)echo + $(AT)echo "$(COLOR_RED)Docker scan command finished.$(COLOR_NORMAL)" + $(AT)echo + +# Run docker table command. +.PHONY: docker-table +docker-table: + $(AT)echo + $(AT)echo "$(COLOR_RED)🌟 Running docker-table command.$(COLOR_NORMAL)" + $(AT)echo + $(AT)$(DOCKER_CMD) ps --format "table {{.Image}}\t{{.Ports}}\t{{.Names}}" $(SAVE_LOG) + $(AT)echo + $(AT)echo "$(COLOR_RED)Docker table command finished.$(COLOR_NORMAL)" + $(AT)echo + +# Run docker code lint command. +.PHONY: docker-code-lint +docker-code-lint: + $(AT)echo + $(AT)echo "$(COLOR_RED)🌟 Running docker-code-lint command.$(COLOR_NORMAL)" + $(AT)echo + $(AT)$(DOCKER_CMD) run \ + --interactive \ + $(DOCKER_FLAGS) \ + --platform=linux/amd64 \ + --rm \ + --ulimit memlock=-1:-1 \ + --user $(SYS_USER_GROUP) \ + --volume $(PWD)/:/data/project/ \ + --publish 8080:8080 \ + jetbrains/qodana-jvm-community --show-report \ + $(SAVE_LOG) + $(AT)echo + $(AT)echo "$(COLOR_RED)Docker code lint command finished.$(COLOR_NORMAL)" + $(AT)echo + +# Run docker pandoc command. +.PHONY: docker-pandoc +docker-pandoc: + $(AT)echo + $(AT)echo "$(COLOR_RED)🌟 Running docker-pandoc command.$(COLOR_NORMAL)" + $(AT)echo + $(AT)$(DOCKER_CMD) run \ + --interactive \ + $(DOCKER_FLAGS) \ + --platform=linux/amd64 \ + --rm \ + --user $(SYS_USER_GROUP) \ + --volume "$(PWD):/data" \ + pandoc/latex README.md -o README.pdf \ + $(SAVE_LOG) + $(AT)echo + $(AT)echo "$(COLOR_RED)Docker pandoc command finished.$(COLOR_NORMAL)" + $(AT)echo + +# Run docker clean command. +.PHONY: docker-clean +docker-clean: docker-stop docker-remove + +# Run docker remove container command. +.PHONY: docker-remove +docker-remove: + $(AT)echo + $(AT)echo "$(COLOR_RED)🌟 Running docker-remove command.$(COLOR_NORMAL)" + $(AT)echo + $(AT)$(DOCKER_CMD) container rm --force "$(DOCKER_IMAGE_NAME)" > /dev/null + $(AT)echo + $(AT)echo "$(COLOR_RED)Docker remove command finished.$(COLOR_NORMAL)" + $(AT)echo + +# Run docker remove all images command. +.PHONY: docker-remove-all +docker-remove-all: + $(AT)echo + $(AT)echo "$(COLOR_RED)🌟 Running docker-remove-all command.$(COLOR_NORMAL)" + $(AT)echo + $(AT)$(DOCKER_CMD) images | grep $(DOCKER_IMAGE_NAME) | awk '{print $3}' | xargs --no-run-if-empty $(DOCKER_CMD) rmi --force + $(AT)echo + $(AT)echo "$(COLOR_RED)Docker remove all command finished.$(COLOR_NORMAL)" + $(AT)echo + +# Run docker build command. +.PHONY: docker-build +docker-build: _ensure-docker-tag + $(AT)echo + $(AT)echo "$(COLOR_RED)🌟 Running docker-build command.$(COLOR_NORMAL)" + $(AT)echo + $(AT)chmod +x $(SCRIPT_DIR)/docker-build.sh + $(AT)$(SCRIPT_DIR)/docker-build.sh $(DOCKER_TAG) $@ + $(AT)echo + $(AT)echo "$(COLOR_RED)Docker build command finished.$(COLOR_NORMAL)" + $(AT)echo + +# Run docker rebuild command. +.PHONY: docker-rebuild +docker-rebuild: _ensure-docker-tag + $(AT)echo + $(AT)echo "$(COLOR_RED)🌟 Running docker-rebuild command.$(COLOR_NORMAL)" + $(AT)echo + $(AT)chmod +x $(SCRIPT_DIR)/docker-rebuild.sh + $(AT)$(SCRIPT_DIR)/docker-rebuild.sh $(DOCKER_TAG) $@ + $(AT)echo + $(AT)echo "$(COLOR_RED)Docker rebuild command finished.$(COLOR_NORMAL)" + $(AT)echo + +# Run docker start command. +.PHONY: docker-start +docker-start: _check_docker_image + $(AT)echo + $(AT)echo "$(COLOR_RED)🌟 Running docker-start command.$(COLOR_NORMAL)" + $(AT)echo + $(AT)chmod +x $(SCRIPT_DIR)/docker-compose.sh + $(AT)$(SCRIPT_DIR)/docker-compose.sh start $@ + $(AT)echo + $(AT)echo "$(COLOR_RED)Docker start command finished.$(COLOR_NORMAL)" + $(AT)echo + +# Run docker stop command. +.PHONY: docker-stop +docker-stop: + $(AT)echo + $(AT)echo "$(COLOR_RED)🌟 Running docker-stop command.$(COLOR_NORMAL)" + $(AT)echo + $(AT)chmod +x $(SCRIPT_DIR)/docker-compose.sh + $(AT)$(SCRIPT_DIR)/docker-compose.sh stop $@ + $(AT)echo + $(AT)echo "$(COLOR_RED)Docker stop command finished.$(COLOR_NORMAL)" + $(AT)echo + +# Run docker restart command. +.PHONY: docker-restart +docker-restart: + $(AT)echo + $(AT)echo "$(COLOR_RED)🌟 Running docker-restart command.$(COLOR_NORMAL)" + $(AT)echo + $(AT)chmod +x $(SCRIPT_DIR)/docker-compose.sh + $(AT)$(SCRIPT_DIR)/docker-compose.sh restart $@ + $(AT)echo + $(AT)echo "$(COLOR_RED)Docker restart command finished.$(COLOR_NORMAL)" + $(AT)echo + +# Run docker logs command. +.PHONY: docker-logs +docker-logs: + $(AT)echo + $(AT)echo "$(COLOR_RED)🌟 Running docker-logs command.$(COLOR_NORMAL)" + $(AT)echo + $(AT)chmod +x $(SCRIPT_DIR)/docker-compose.sh + $(AT)$(SCRIPT_DIR)/docker-compose.sh logs $@ + $(AT)echo + $(AT)echo "$(COLOR_RED)Docker logs command finished.$(COLOR_NORMAL)" + $(AT)echo + +# Run docker ps command. +.PHONY: docker-ps +docker-ps: + $(AT)echo + $(AT)echo "$(COLOR_RED)🌟 Running docker-ps command.$(COLOR_NORMAL)" + $(AT)echo + $(AT)chmod +x $(SCRIPT_DIR)/docker-compose.sh + $(AT)$(SCRIPT_DIR)/docker-compose.sh ps $@ + $(AT)echo + $(AT)echo "$(COLOR_RED)Docker ps command finished.$(COLOR_NORMAL)" + $(AT)echo + +# Run docker pull command. +.PHONY: docker-pull +docker-pull: + $(AT)echo + $(AT)echo "$(COLOR_RED)🌟 Running docker-pull command.$(COLOR_NORMAL)" + $(AT)echo + $(AT)chmod +x $(SCRIPT_DIR)/docker-compose.sh + $(AT)$(SCRIPT_DIR)/docker-compose.sh pull $@ + $(AT)echo + $(AT)echo "$(COLOR_RED)Docker pull command finished.$(COLOR_NORMAL)" + $(AT)echo + +# Run tilt start command. +.PHONY: tilt-start +tilt-start: + $(AT)echo + $(AT)echo "$(COLOR_RED)🌟 Running tilt-start command.$(COLOR_NORMAL)" + $(AT)echo + $(AT)$(TILT_CMD) up + $(AT)echo + $(AT)echo "$(COLOR_RED)Tilt start command finished.$(COLOR_NORMAL)" + $(AT)echo + +# Run tilt stop command. +.PHONY: tilt-stop +tilt-stop: + $(AT)echo + $(AT)echo "$(COLOR_RED)🌟 Running tilt-stop command.$(COLOR_NORMAL)" + $(AT)echo + $(AT)$(TILT_CMD) down --delete-namespaces + $(AT)echo + $(AT)echo "$(COLOR_RED)Tilt stop command finished.$(COLOR_NORMAL)" + $(AT)echo + +# Run skaffold deploy command. +.PHONY: skaffold-start +skaffold-start: _ensure-skaffold-tag + $(AT)echo + $(AT)echo "$(COLOR_RED)🌟 Running skaffold-start command.$(COLOR_NORMAL)" + $(AT)echo + ## kubectl config use-context docker-desktop + $(AT)SKAFFOLD_NO_PRUNE=true $(SKAFFOLD_CMD) dev --filename='skaffold.$(SKAFFOLD_TAG).yaml' --timestamps=false --update-check=true --interactive=true --no-prune=false --cache-artifacts=true + $(AT)echo + $(AT)echo "$(COLOR_RED)Skaffold start command finished.$(COLOR_NORMAL)" + $(AT)echo + +# Run skaffold destroy command. +.PHONY: skaffold-stop +skaffold-stop: _ensure-skaffold-tag + $(AT)echo + $(AT)echo "$(COLOR_RED)🌟 Running skaffold-stop command.$(COLOR_NORMAL)" + $(AT)echo + ## kubectl config use-context docker-desktop + $(AT)$(SKAFFOLD_CMD) delete --filename='skaffold.$(SKAFFOLD_TAG).yaml' + $(AT)echo + $(AT)echo "$(COLOR_RED)Skaffold stop command finished.$(COLOR_NORMAL)" + $(AT)echo + +# Run helm lint command. +.PHONY: helm-lint +helm-lint: + $(AT)echo + $(AT)echo "$(COLOR_RED)🌟 Running helm-lint command.$(COLOR_NORMAL)" + $(AT)echo + $(AT)$(HELM_CMD) lint charts --values charts/values.yaml + $(AT)echo + $(AT)echo "$(COLOR_RED)Helm lint command finished.$(COLOR_NORMAL)" + $(AT)echo + +# Run helm start command. +.PHONY: helm-start +helm-start: + $(AT)echo + $(AT)echo "$(COLOR_RED)🌟 Running helm-start command.$(COLOR_NORMAL)" + $(AT)echo + $(AT)$(HELM_CMD) upgrade charts $(CLUSTER_NAME) --install --values charts/values.yaml --debug --atomic --create-namespace --timeout 8m0s --namespace $(CLUSTER_NAMESPACE) + $(AT)echo + $(AT)echo "$(COLOR_RED)Helm start command finished.$(COLOR_NORMAL)" + $(AT)echo + +# Run helm stop command. +.PHONY: helm-stop +helm-stop: + $(AT)echo + $(AT)echo "$(COLOR_RED)🌟 Running helm-stop command.$(COLOR_NORMAL)" + $(AT)echo + $(AT)$(HELM_CMD) uninstall $(CLUSTER_NAME) --namespace $(CLUSTER_NAMESPACE) + $(AT)echo + +# Run helm delete command. +.PHONY: helm-delete +helm-delete: + $(AT)echo + $(AT)echo "$(COLOR_RED)🌟 Running helm-delete command.$(COLOR_NORMAL)" + $(AT)echo + $(AT)$(HELM_CMD) delete --purge $(CLUSTER_NAME) --namespace $(CLUSTER_NAMESPACE) + $(AT)echo + +# Run helm package command. +.PHONY: helm-package +helm-package: + $(AT)echo + $(AT)echo "$(COLOR_RED)🌟 Running helm-package command.$(COLOR_NORMAL)" + $(AT)echo + $(AT)mkdir -p $(CHART_RELEASE_DIR)/charts + $(AT)$(HELM_CMD) package charts --dependency-update --destination $(CHART_RELEASE_DIR)/charts + $(AT)echo + $(AT)echo "$(COLOR_RED)Helm packages build finished.$(COLOR_NORMAL)" + $(AT)echo + +# Run helm dev command. +.PHONY: helm-dev +helm-dev: clean helm-lint helm-package + +# Run okteto build command. +.PHONY: okteto +okteto: + $(AT)echo + $(AT)echo "$(COLOR_RED)🌟 Running okteto-build command.$(COLOR_NORMAL)" + $(AT)echo + $(AT)$(OKTETO_CMD) build -t $(DOCKER_HUB_IMAGE_NAME) . + $(AT)$(OKTETO_CMD) build -t $(OKTETO_IMAGE_NAME) . + $(AT)echo + $(AT)echo "$(COLOR_RED)Okteto images build finished.$(COLOR_NORMAL)" + $(AT)echo + +# Run python local pip install command. +.PHONY: python-install-pip +python-install-pip: + $(AT)echo + $(AT)echo "$(COLOR_RED)🌟 Running install-pip command locally.$(COLOR_NORMAL)" + $(AT)echo + $(AT)wget $(WGET_OPTS) https://bootstrap.pypa.io/get-pip.py -O $(TMPDIR)/get-pip.py + $(AT)$(PYTHON_CMD) $(TMPDIR)/get-pip.py + $(AT)echo + $(AT)echo "$(COLOR_RED)Pip installed.$(COLOR_NORMAL)" + $(AT)echo + +# Run python local install command. +.PHONY: python-install +python-install: python-install-pip + $(AT)echo + $(AT)echo "$(COLOR_RED)🌟 Running pip-install command locally.$(COLOR_NORMAL)" + $(AT)echo + $(AT)$(PYTHON_CMD) -m pip install $(PIP_BUILD_OPTS) -r ./requirements/local.hash $@ + $(AT)echo + $(AT)echo "$(COLOR_RED)Python dependencies installation finished.$(COLOR_NORMAL)" + $(AT)echo + +# Run python local build command. +.PHONY: python-build +python-build: python-install + $(AT)echo + $(AT)echo "$(COLOR_RED)🌟 Running mkdocs-build command locally.$(COLOR_NORMAL)" + $(AT)echo + $(AT)$(PYTHON_CMD) -m mkdocs build $(MKDOCS_BUILD_OPTS) $@ + $(AT)echo + $(AT)echo "$(COLOR_RED)Python documentation build finished.$(COLOR_NORMAL)" + $(AT)echo + +# Run python local run command. +.PHONY: python-run +python-run: python-build + $(AT)echo + $(AT)echo "$(COLOR_RED)🌟 Running mkdocs-serve command locally.$(COLOR_NORMAL)" + $(AT)echo + $(AT)$(PYTHON_CMD) -m mkdocs serve $(MKDOCS_SERVE_OPTS) $@ + +# Run python local freeze command. +.PHONY: python-local-freeze +python-local-freeze: + $(AT)echo + $(AT)echo "$(COLOR_RED)🌟 Running python dependencies freeze locally.$(COLOR_NORMAL)" + $(AT)echo + $(AT)$(PYTHON_CMD) -m pip freeze $(PIP_OPTS) -r ./docs/requirements.txt $@ > ./docs/requirements_frozen.txt + $(AT)echo + $(AT)echo "$(COLOR_RED)Python dependencies local freeze finished.$(COLOR_NORMAL)" + $(AT)echo + $(AT)exit + +# Run python venv install command. +.PHONY: python-venv-install +python-venv-install: _venv + $(AT)echo + $(AT)echo "$(COLOR_RED)🌟 Running pip-install command in venv.$(COLOR_NORMAL)" + $(AT)echo + $(AT)$(VENV_PYTHON) -m pip install $(PIP_BUILD_OPTS) -r ./docs/requirements.txt $@ + $(AT)echo + $(AT)echo "$(COLOR_RED)Python dependencies installation finished. The sources are in $(VENV_NAME) directory.$(COLOR_NORMAL)" + $(AT)echo + $(AT)exit + +# Run python venv build command. +.PHONY: python-venv-build +python-venv-build: python-venv-install + $(AT)echo + $(AT)echo "$(COLOR_RED)🌟 Running mkdocs-build command in venv.$(COLOR_NORMAL)" + $(AT)echo + $(AT)$(VENV_PYTHON) -m mkdocs build $(MKDOCS_BUILD_OPTS) $@ + $(AT)echo + $(AT)echo "$(COLOR_RED)Python dependencies build finished. The source pages are in $(VENV_NAME) directory.$(COLOR_NORMAL)" + $(AT)echo + $(AT)exit + +# Run python venv run command. +.PHONY: python-venv-run +python-venv-run: python-venv-build + $(AT)echo + $(AT)echo "$(COLOR_RED)🌟 Running mkdocs-serve command in venv.$(COLOR_NORMAL)" + $(AT)echo + $(AT)$(VENV_PYTHON) -m mkdocs serve $(MKDOCS_SERVE_OPTS) $@ + +# Run github pages deploy command. +.PHONY: gh-pages +gh-pages: + $(AT)echo + $(AT)echo "$(COLOR_RED)🌟 Running mkdocs gh-deploy command.$(COLOR_NORMAL)" + $(AT)echo + $(AT)$(PYTHON_CMD) -m mkdocs gh-deploy $(MKDOCS_DEPLOY_OPTS) $@ + $(AT)echo + $(AT)echo "$(COLOR_RED)GitHub pages generated.$(COLOR_NORMAL)" + $(AT)echo + +# Run npm install command. +.PHONY: deps +deps: + $(AT)echo + $(AT)echo "$(COLOR_RED)🌟 Running npm-install command locally.$(COLOR_NORMAL)" + $(AT)echo + $(AT)$(NPM_CMD) install + $(AT)echo + $(AT)echo "$(COLOR_RED)Install finished.$(COLOR_NORMAL)" + $(AT)echo + +# Run npm all command. +.PHONY: all +all: + $(AT)echo + $(AT)echo "$(COLOR_RED)🌟 Running npm-all command locally.$(COLOR_NORMAL)" + $(AT)echo + $(AT)$(NPM_CMD) run all + $(AT)echo + $(AT)echo "$(COLOR_RED)Build finished.$(COLOR_NORMAL)" + $(AT)echo + +# Run git diff command. +.PHONY: git-diff +git-diff: + $(AT)echo + $(AT)echo "$(COLOR_RED)🌟 Running git-diff command.$(COLOR_NORMAL)" + $(AT)echo + $(AT)$(GIT_CMD) diff --diff-filter=d --name-only + $(AT)echo + $(AT)echo "$(COLOR_RED)Git diff command finished.$(COLOR_NORMAL)" + $(AT)echo + +# Run git authors command. +.PHONY: git-authors +git-authors: + $(AT)echo + $(AT)echo "$(COLOR_RED)🌟 Running git-authors command.$(COLOR_NORMAL)" + $(AT)echo + $(AT)find . -name ".git" -type d -exec $(GIT_CMD) --git-dir={} --work-tree="$(PWD)"/{} config --get remote.origin.url \; -exec $(GIT_CMD) --git-dir={} --work-tree="$(PWD)"/{} --no-pager shortlog -sn \; + $(AT)echo + $(AT)echo "$(COLOR_RED)Git authors command finished.$(COLOR_NORMAL)" + $(AT)echo + +# Run git pull command. +.PHONY: git-pull +git-pull: + $(AT)echo + $(AT)echo "$(COLOR_RED)🌟 Running git-pull command.$(COLOR_NORMAL)" + $(AT)echo + $(AT)find . -name ".git" -type d | xargs -P10 -I{} $(GIT_CMD) --git-dir={} --work-tree="$(PWD)"/{} pull origin master + $(AT)echo + $(AT)echo "$(COLOR_RED)Git pull command finished.$(COLOR_NORMAL)" + $(AT)echo + +# Run git branch command. +.PHONY: git-branch +git-branch: + $(AT)echo + $(AT)echo "$(COLOR_RED)🌟 Running git-branch command.$(COLOR_NORMAL)" + $(AT)echo + $(AT)$(GIT_CMD) for-each-ref --sort=committerdate refs/heads/ --format='%(HEAD) %(color:yellow)%(refname:short)%(color:reset) - %(color:red)%(objectname:short)%(color:reset) - %(contents:subject) - %(authorname) (%(color:green)%(committerdate:relative)%(color:reset))' + $(AT)echo + $(AT)echo "$(COLOR_RED)Git branch command finished.$(COLOR_NORMAL)" + $(AT)echo + +# Run git merge command. +.PHONY: git-merge +git-merge: + $(AT)echo + $(AT)echo "$(COLOR_RED)🌟 Running git-merge command.$(COLOR_NORMAL)" + $(AT)echo + $(AT)$(GIT_CMD) log $(shell git merge-base --octopus $(shell git log -1 --merges --pretty=format:%P))..$(shell git log -1 --merges --pretty=format:%H) --pretty=format:%s + $(AT)echo + $(AT)echo "$(COLOR_RED)Git merge command finished.$(COLOR_NORMAL)" + $(AT)echo + +# Run git open command. +.PHONY: git-open +git-open: + $(AT)echo + $(AT)echo "$(COLOR_RED)🌟 Running git-open command.$(COLOR_NORMAL)" + $(AT)echo + $(AT)open $(shell $(GIT_CMD) remote -v | awk "/fetch/{print $2}" | sed -Ee "s#(git@|git://)#http://#" -e "s@com:@com/@" | head -n1 | grep -Eo 'https?://[^ >]+') + $(AT)echo + $(AT)echo "$(COLOR_RED)Git open command finished.$(COLOR_NORMAL)" + $(AT)echo + +# Run git log command. +.PHONY: git-log +git-log: + $(AT)echo + $(AT)echo "$(COLOR_RED)🌟 Running git-log command.$(COLOR_NORMAL)" + $(AT)echo + $(AT)$(GIT_CMD) log \ + --decorate \ + --date="short" \ + --graph \ + --color \ + --pretty="format:%C(yellow)%h%C(reset) %ad%C(red)%d%C(reset) %C(bold normal)%s%C(reset) %G? %C(cyan)[%an]%C(reset)" \ + $(shell $(GIT_CMD) log --pretty=format:'%h' -n 6 | tail -1)..HEAD \ + | sed 's/ N / /g' \ + | sed 's/ G / 🔑 /g' + $(AT)echo + $(AT)echo "$(COLOR_RED)Git log command finished.$(COLOR_NORMAL)" + $(AT)echo + +# Run git log command. +.PHONY: git-changelog +git-changelog: release + $(AT)echo + $(AT)echo "$(COLOR_RED)🌟 Running git-changelog command.$(COLOR_NORMAL)" + $(AT)echo + $(AT)$(GIT_CMD) log $(shell $(GIT_CMD) tag | tail -n1)..HEAD --no-merges --format=%B > changelog + $(AT)echo + $(AT)echo "$(COLOR_RED)Git changelog command finished.$(COLOR_NORMAL)" + $(AT)echo + +# Run install link checker command. +.PHONY: install-link-checker +install-link-checker: + $(AT)[ -f $(SCRIPT_DIR)/$(HTMLTEST) ] || curl https://htmltest.wjdp.uk -o $(SCRIPT_DIR)/$(HTMLTEST) + +# Run setup link checker command. +.PHONY: setup-link-checker +setup-link-checker: install-link-checker + $(AT)chmod +x $(SCRIPT_DIR)/$(HTMLTEST) + $(AT)$(SCRIPT_DIR)/$(HTMLTEST) -d -b $(SCRIPT_DIR)/bin + +# Run run link checker command. +.PHONY: run-link-checker +run-link-checker: setup-link-checker + $(AT)chmod +x $(SCRIPT_DIR)/bin/$(HTMLTEST) + $(AT)$(SCRIPT_DIR)/bin/$(HTMLTEST) $(HTMLTEST_OPTS) + +# Run check links command. +.PHONY: check-links +check-links: install-link-checker setup-link-checker run-link-checker + +# Run docker graph command. +.PHONY: docker-graph +docker-graph: + $(AT)echo + $(AT)echo "$(COLOR_RED)🌟 Running docker-graph command.$(COLOR_NORMAL)" + $(AT)echo + $(AT)$(DOCKER_CMD) run \ + --platform=linux/amd64 \ + --rm \ + $DOCKER_OPTS \ + #--sysctl net.ipv4.ping_group_range="0 2147483647" + --user $(SYS_USER_GROUP) \ + --workdir /workspace \ + --volume "$(PWD)/distribution/docker-images":/workspace \ + $($(DOCKER_CMD) run --help | $(GREP_CMD) -- --pull >/dev/null && echo "--pull=always") \ + $(if $(findstring true,$(VERBOSE)),,--quiet) \ + ghcr.io/patrickhoefler/dockerfilegraph \ + $(SAVE_LOG) + $(AT)echo + +# Run docker lint command. +.PHONY: docker-lint +docker-lint: + $(AT)echo + $(AT)echo "$(COLOR_RED)🌟 Running docker-lint command.$(COLOR_NORMAL)" + $(AT)echo + $(AT)$(DOCKER_CMD) run \ + --platform=linux/amd64 \ + --rm \ + $DOCKER_OPTS \ + --user $(SYS_USER_GROUP) \ + --volume "$(PWD):/tmp/lint" \ + $($(DOCKER_CMD) run --help | $(GREP_CMD) -- --pull >/dev/null && echo "--pull=always") \ + $(if $(findstring true,$(VERBOSE)),,--quiet) \ + --env RUN_LOCAL=true \ + --env LINTER_RULES_PATH=/ \ + github/super-linter \ + $(SAVE_LOG) + $(AT)echo + +# Run docker syft command. +.PHONY: docker-syft +docker-syft: + $(AT)echo + $(AT)echo "$(COLOR_RED)🌟 Running docker-syft command.$(COLOR_NORMAL)" + $(AT)echo + $(AT)$(DOCKER_CMD) run \ + --platform=linux/amd64 \ + --rm \ + $DOCKER_OPTS \ + --user $(SYS_USER_GROUP) \ + --volume "$(PWD)/config/config.json":/config/config.json \ + $($(DOCKER_CMD) run --help | $(GREP_CMD) -- --pull >/dev/null && echo "--pull=always") \ + $(if $(findstring true,$(VERBOSE)),,--quiet) \ + --env "DOCKER_CONFIG=/config" \ + anchore/syft:latest \ + "$(IMAGE_NAME)" \ + $(SAVE_LOG) + $(AT)echo + +# Run git zip archive command. +.PHONY: git-zip +git-zip: + $(AT)echo + $(AT)echo "$(COLOR_RED)🌟 Running git-zip archive command.$(COLOR_NORMAL)" + $(AT)echo + $(AT)$(GIT_CMD) archive -o $(basename $PWD).zip HEAD + $(AT)echo + $(AT)echo "$(COLOR_RED)Git zip-archive command finished.$(COLOR_NORMAL)" + $(AT)echo + +# Run git tgz archive command. +.PHONY: git-tgz +git-tgz: + $(AT)echo + $(AT)echo "$(COLOR_RED)🌟 Running git-tgz archive command.$(COLOR_NORMAL)" + $(AT)echo + $(AT)$(GIT_CMD) archive -o $(basename $PWD).tgz HEAD + $(AT)echo + $(AT)echo "$(COLOR_RED)Git tgz-archive command finished.$(COLOR_NORMAL)" + $(AT)echo + +# Run docker clean images command. +.PHONY: docker-clean-images +docker-clean-images: + $(AT)echo + $(AT)echo "$(COLOR_RED)🌟 Running docker-clean images command.$(COLOR_NORMAL)" + $(AT)echo + echo "Cleaning images \n========================================== "; + for image in `$(DOCKER_CMD) images -qf "label=$(DOCKER_IMAGE_NAME)"`; do \ + echo "Removing image $${image} \n==========================================\n " ; \ + $(DOCKER_CMD) rmi -f $${image} || exit 1 ; \ + done + $(AT)echo + $(AT)echo "$(COLOR_RED)Docker clean images command finished.$(COLOR_NORMAL)" + $(AT)echo + +.PHONY: kcov +kcov: ## Run kcov + $(AT)echo + $(AT)echo "$(COLOR_RED)🌟 Running docker-kcov command.$(COLOR_NORMAL)" + $(AT)echo + $(AT)$(DOCKER_CMD) run \ + --rm $(DOCKER_FLAGS) \ + --user $(SYS_USER_GROUP) \ + --volume "$(PWD)":/workspace \ + -w="/workspace" \ + kcov/kcov \ + kcov \ + --bash-parse-files-in-dir=/workspace \ + --clean \ + --exclude-pattern=.coverage,.git \ + --include-pattern=.sh \ + $(SAVE_LOG) + $(AT)echo + +.PHONY: info +info: ## Gather information about the runtime environment + $(AT)echo "whoami: $$(whoami)"; \ + $(AT)echo "pwd: $$(pwd)"; \ + $(AT)echo "ls -ahl: $$(ls -ahl)"; \ + $(AT)$(DOCKER_CMD) images; \ + $(AT)$(DOCKER_CMD) ps + +.PHONY: awesome_bot +awesome_bot: ## Check style for markdown files + $(AT)gem install --user-install awesome_bot && \ + $(AT)awesome_bot --files README.md --allow-dupe --allow-redirect --set-timeout 10 --white-list www.audacityteam.org,open-music-kontrollers.ch + +.PHONY: shellcheck +shellcheck: ## Check style for shell scripts + $(AT)shellcheck --severity=style *.sh scripts/*.sh + +.PHONY: shellspec +shellspec: ## Check shell scripts specification compliance + $(AT)shellspec + +# printvars prints all the variables currently defined in our +# Makefiles. Alternatively, if a non-empty VARS variable is passed, +# only the variables matching the make pattern passed in VARS are +# displayed. +.PHONY: printvars +printvars: + $(AT): + $(foreach V, \ + $(sort $(filter $(VARS),$(.VARIABLES))), \ + $(if $(filter-out environment% default automatic, \ + $(origin $V)), \ + $(if $(QUOTED_VARS),\ + $(info $V='$(subst ','\'',$(if $(RAW_VARS),$(value $V),$($V)))'), \ + $(info $V=$(if $(RAW_VARS),$(value $V),$($V)))))) diff --git a/NOTES.md b/NOTES.md new file mode 100644 index 00000000000..fcc42b3b114 --- /dev/null +++ b/NOTES.md @@ -0,0 +1,369 @@ +# Release \[v1-1803-g56ca63f] + +Provide short description. + +## What's New in release \[v1-1803-g56ca63f]? + +Describe the release here. + +## Changelog + +- `:arrow_up`: Updates @tilt.dev/tilt-inspector to v0.1.8 +- `:arrow_up`: Updates JamesIves/github-pages-deploy-action action to v4.1.4 +- `:arrow_up`: Updates Matticusau/pr-helper action to v1.3.0 +- `:arrow_up`: Updates wagoid/commitlint-github-action action to v2.2.5 +- `Merge branch 'master' of https`://github.com/AlexRogalskiy/java-patterns +- `Merge branch 'master' of https`://github.com/AlexRogalskiy/java-patterns +- `Merge branch 'master' of https`://github.com/AlexRogalskiy/java-patterns +- `Merge branch 'master' of https`://github.com/AlexRogalskiy/java-patterns +- `Merge branch 'master' of https`://github.com/AlexRogalskiy/java-patterns +- `Merge branch 'master' of https`://github.com/AlexRogalskiy/java-patterns +- `Merge branch 'master' of https`://github.com/AlexRogalskiy/java-patterns +- `Merge branch 'master' of https`://github.com/AlexRogalskiy/java-patterns +- `Merge branch 'master' of https`://github.com/AlexRogalskiy/java-patterns +- `Merge branch 'master' of https`://github.com/AlexRogalskiy/java-patterns +- `Merge branch 'master' of https`://github.com/AlexRogalskiy/java-patterns +- `Merge branch 'master' of https`://github.com/AlexRogalskiy/java-patterns +- `Merge branch 'master' of https`://github.com/AlexRogalskiy/java-patterns +- `Merge branch 'master' of https`://github.com/AlexRogalskiy/java-patterns +- `Merge branch 'master' of https`://github.com/AlexRogalskiy/java-patterns +- `Merge branch 'master' of https`://github.com/AlexRogalskiy/java-patterns +- `Merge branch 'master' of https`://github.com/AlexRogalskiy/java-patterns +- `Merge branch 'master' of https`://github.com/AlexRogalskiy/java-patterns +- `Merge branch 'master' of https`://github.com/AlexRogalskiy/java-patterns +- `Merge branch 'master' of https`://github.com/AlexRogalskiy/java-patterns +- `Merge branch 'master' of https`://github.com/AlexRogalskiy/java-patterns +- `Merge branch 'master' of https`://github.com/AlexRogalskiy/java-patterns +- `Merge branch 'master' of https`://github.com/AlexRogalskiy/java-patterns +- `Merge branch 'master' of https`://github.com/AlexRogalskiy/java-patterns +- `Merge branch 'master' of https`://github.com/AlexRogalskiy/java-patterns +- `Merge branch 'master' of https`://github.com/AlexRogalskiy/java-patterns +- `Merge branch 'master' of https`://github.com/AlexRogalskiy/java-patterns +- `Merge branch 'master' of https`://github.com/AlexRogalskiy/java-patterns +- `Merge branch 'master' of https`://github.com/AlexRogalskiy/java-patterns +- `Merge branch 'master' of https`://github.com/AlexRogalskiy/java-patterns +- `Merge branch 'master' of https`://github.com/AlexRogalskiy/java-patterns +- `Merge branch 'master' of https`://github.com/AlexRogalskiy/java-patterns +- `Merge branch 'master' of https`://github.com/AlexRogalskiy/java-patterns +- `Merge branch 'master' of https`://github.com/AlexRogalskiy/java-patterns +- `Merge branch 'master' of https`://github.com/AlexRogalskiy/java-patterns +- `Merge branch 'master' of https`://github.com/AlexRogalskiy/java-patterns +- `Merge branch 'master' of https`://github.com/AlexRogalskiy/java-patterns +- `Merge branch 'master' of https`://github.com/AlexRogalskiy/java-patterns +- `Merge branch 'master' of https`://github.com/AlexRogalskiy/java-patterns +- `Merge branch 'master' of https`://github.com/AlexRogalskiy/java-patterns +- `Merge branch 'master' of https`://github.com/AlexRogalskiy/java-patterns +- `Merge branch 'master' of https`://github.com/AlexRogalskiy/java-patterns +- `Merge branch 'master' of https`://github.com/AlexRogalskiy/java-patterns +- `Merge branch 'master' of https`://github.com/AlexRogalskiy/java-patterns +- `Merge branch 'master' of https`://github.com/AlexRogalskiy/java-patterns +- `Merge branch 'master' of https`://github.com/AlexRogalskiy/java-patterns +- `Merge branch 'master' of https`://github.com/AlexRogalskiy/java-patterns +- `Merge branch 'master' of https`://github.com/AlexRogalskiy/java-patterns +- `Merge branch 'master' of https`://github.com/AlexRogalskiy/java-patterns +- `Merge branch 'master' of https`://github.com/AlexRogalskiy/java-patterns +- `Merge branch 'master' of https`://github.com/AlexRogalskiy/java-patterns +- `Merge branch 'master' of https`://github.com/AlexRogalskiy/java-patterns +- `Merge branch 'master' of https`://github.com/AlexRogalskiy/java-patterns +- `Merge branch 'master' of https`://github.com/AlexRogalskiy/java-patterns +- `Merge branch 'master' of https`://github.com/AlexRogalskiy/java-patterns +- `Merge branch 'master' of https`://github.com/AlexRogalskiy/java-patterns +- `Merge branch 'master' of https`://github.com/AlexRogalskiy/java-patterns +- `Merge branch 'master' of https`://github.com/AlexRogalskiy/java-patterns +- `Merge branch 'master' of https`://github.com/AlexRogalskiy/java-patterns +- `Merge branch 'master' of https`://github.com/AlexRogalskiy/java-patterns +- `Merge branch 'master' of https`://github.com/AlexRogalskiy/java-patterns +- `Merge branch 'master' of https`://github.com/AlexRogalskiy/java-patterns +- `Merge branch 'master' of https`://github.com/AlexRogalskiy/java-patterns +- `Merge branch 'master' of https`://github.com/AlexRogalskiy/java-patterns +- `Merge branch 'master' of https`://github.com/AlexRogalskiy/java-patterns +- `Merge branch 'master' of https`://github.com/AlexRogalskiy/java-patterns +- `Merge branch 'master' of https`://github.com/AlexRogalskiy/java-patterns +- `Merge branch 'master' of https`://github.com/AlexRogalskiy/java-patterns +- `Merge branch 'master' of https`://github.com/AlexRogalskiy/java-patterns +- `Merge branch 'master' of https`://github.com/AlexRogalskiy/java-patterns +- `Merge branch 'master' of https`://github.com/AlexRogalskiy/java-patterns +- `Merge branch 'master' of https`://github.com/AlexRogalskiy/java-patterns +- `Merge branch 'master' of https`://github.com/AlexRogalskiy/java-patterns +- `Merge branch 'master' of https`://github.com/AlexRogalskiy/java-patterns +- `Merge branch 'master' of https`://github.com/AlexRogalskiy/java-patterns +- `Merge branch 'master' of https`://github.com/AlexRogalskiy/java-patterns +- `Merge branch 'master' of https`://github.com/AlexRogalskiy/java-patterns +- `Merge branch 'master' of https`://github.com/AlexRogalskiy/java-patterns +- `Merge branch 'master' of https`://github.com/AlexRogalskiy/java-patterns +- `Merge branch 'master' of https`://github.com/AlexRogalskiy/java-patterns +- `Merge branch 'master' of https`://github.com/AlexRogalskiy/java-patterns +- `Merge branch 'master' of https`://github.com/AlexRogalskiy/java-patterns +- `Merge branch 'master' of https`://github.com/AlexRogalskiy/java-patterns +- `Merge branch 'master' of https`://github.com/AlexRogalskiy/java-patterns +- `Merge branch 'master' of https`://github.com/AlexRogalskiy/java-patterns +- `Merge branch 'master' of https`://github.com/AlexRogalskiy/java-patterns into master +- `Merge branch 'master' of https`://github.com/AlexRogalskiy/java-patterns into master +- `docs`: updates on VERSION +- `docs`: updates on docs page speed +- `docs`: updates on docs page speed +- `docs`: updates on docs page speed +- `docs`: updates on docs page speed +- `docs`: updates on docs page speed +- `docs`: updates on docs page speed +- `docs`: updates on docs page speed +- `docs`: updates on docs page speed +- `docs`: updates on docs page speed +- `docs`: updates on docs page speed +- `docs`: updates on docs page speed +- `docs`: updates on docs page speed +- `docs`: updates on docs page speed +- `docs`: updates on docs page speed +- `docs`: updates on docs page speed +- `docs`: updates on docs page speed +- `docs`: updates on docs page speed +- `docs`: updates on docs page speed +- `docs`: updates on docs page speed +- `docs`: updates on docs page speed +- `docs`: updates on docs page speed +- `docs`: updates on docs page speed +- `docs`: updates on docs page speed +- `docs`: updates on docs page speed +- `docs`: updates on docs page speed +- `docs`: updates on docs page speed +- `docs`: updates on docs page speed +- `docs`: updates on docs page speed +- `docs`: updates on docs page speed +- `docs`: updates on docs page speed +- `docs`: updates on docs page speed +- `docs`: updates on docs page speed +- `docs`: updates on docs page speed +- `docs`: updates on docs page speed +- `docs`: updates on docs page speed +- `docs`: updates on docs page speed +- `docs`: updates on docs page speed +- `docs`: updates on docs page speed +- `docs`: updates on docs page speed +- `docs`: updates on docs page speed +- `docs`: updates on docs page speed +- `docs`: updates on docs page speed +- `docs`: updates on docs page speed +- `docs`: updates on docs page speed +- `docs`: updates on docs page speed +- `docs`: updates on docs page speed +- `docs`: updates on docs page speed +- `docs`: updates on docs page speed +- `docs`: updates on docs page speed +- `docs`: updates on docs page speed +- `docs`: updates on docs page speed +- `docs`: updates on docs page speed +- `docs`: updates on docs page speed +- `docs`: updates on docs page speed +- `docs`: updates on docs page speed +- `docs`: updates on docs page speed +- `docs`: updates on docs page speed +- `docs`: updates on docs page speed +- `docs`: updates on docs page speed +- `docs`: updates on docs page speed +- `docs`: updates on docs page speed +- `docs`: updates on docs page speed +- `docs`: updates on docs page speed +- `docs`: updates on docs page speed +- `docs`: updates on docs page speed +- `docs`: updates on docs page speed +- `docs`: updates on docs page speed +- `docs`: updates on docs page speed +- `docs`: updates on docs page speed +- `docs`: updates on docs page speed +- `docs`: updates on docs page speed +- `docs`: updates on docs page speed +- `docs`: updates on docs page speed +- `docs`: updates on docs page speed +- `docs`: updates on docs page speed +- `docs`: updates on docs page speed +- `docs`: updates on docs page speed +- `docs`: updates on docs page speed +- `docs`: updates on docs page speed +- `docs`: updates on docs page speed +- `docs`: updates on docs page speed +- `docs`: updates on docs page speed +- `docs`: updates on docs page speed +- `docs`: updates on docs page speed +- `docs`: updates on docs page speed +- `docs`: updates on docs page speed +- `docs`: updates on docs page speed +- `docs`: updates on docs page speed +- `docs`: updates on docs page speed +- `docs`: updates on docs page speed +- `docs`: updates on docs page speed +- `docs`: updates on docs page speed +- `docs`: updates on docs page speed +- `docs`: updates on docs page speed +- `docs`: updates on docs page speed +- `docs`: updates on docs page speed +- `docs`: updates on docs page speed +- `docs`: updates on docs page speed +- `docs`: updates on docs page speed +- `docs`: updates on docs page speed +- `docs`: updates on docs page speed +- `docs`: updates on docs page speed +- `docs`: updates on docs page speed +- `docs`: updates on docs page speed +- `docs`: updates on docs page speed +- `docs`: updates on docs page speed +- `docs`: updates on docs page speed +- `docs`: updates on docs page speed +- `docs`: updates on docs page speed +- `docs`: updates on docs page speed +- `docs`: updates on docs page speed +- `docs`: updates on docs page speed +- `docs`: updates on docs page speed +- `docs`: updates on docs page speed +- `docs`: updates on docs page speed +- `docs`: updates on docs page speed +- `docs`: updates on docs page speed +- `docs`: updates on docs page speed +- `docs`: updates on docs page speed +- `docs`: updates on docs page speed +- `docs`: updates on docs page speed +- `docs`: updates on docs page speed +- `docs`: updates on docs page speed +- `docs`: updates on docs page speed +- `docs`: updates on docs page speed +- `docs`: updates on docs page speed +- `docs`: updates on docs page speed +- `docs`: updates on docs page speed +- `docs`: updates on docs page speed +- `docs`: updates on docs page speed +- `docs`: updates on docs page speed +- `docs`: updates on docs page speed +- `docs`: updates on docs page speed +- `docs`: updates on docs page speed +- `docs`: updates on docs page speed +- `docs`: updates on docs page speed +- `docs`: updates on docs page speed +- `docs`: updates on docs page speed +- `docs`: updates on docs page speed +- `docs`: updates on docs page speed +- `docs`: updates on docs page speed +- `docs`: updates on docs page speed +- `docs`: updates on docs page speed +- `docs`: updates on docs page speed +- `docs`: updates on docs page speed +- `docs`: updates on docs page speed +- `docs`: updates on docs page speed +- `docs`: updates on docs page speed +- `docs`: updates on docs page speed +- `docs`: updates on docs page speed +- `docs`: updates on docs page speed +- `docs`: updates on docs page speed +- `docs`: updates on docs page speed +- `docs`: updates on docs page speed +- `docs`: updates on docs page speed +- `docs`: updates on docs page speed +- `docs`: updates on docs page speed +- `docs`: updates on docs page speed +- `docs`: updates on docs page speed +- `docs`: updates on docs page speed +- `docs`: updates on docs page speed +- `docs`: updates on docs page speed +- `docs`: updates on docs page speed +- `docs`: updates on docs page speed +- `docs`: updates on docs page speed +- `docs`: updates on docs page speed +- `docs`: updates on docs page speed +- `docs`: updates on docs page speed +- `docs`: updates on docs page speed +- `docs`: updates on docs page speed +- `docs`: updates on docs page speed +- `docs`: updates on docs page speed +- `docs`: updates on docs page speed +- `docs`: updates on docs page speed +- `docs`: updates on docs page speed +- `docs`: updates on docs page speed +- `docs`: updates on docs page speed +- `docs`: updates on docs page speed +- `docs`: updates on docs page speed +- `docs`: updates on docs page speed +- `docs`: updates on docs page speed +- `docs`: updates on docs page speed +- `docs`: updates on docs page speed +- `docs`: updates on docs page speed +- `docs`: updates on docs page speed +- `docs`: updates on docs page speed +- `docs`: updates on docs page speed +- `docs`: updates on docs page speed +- `docs`: updates on docs page speed +- `docs`: updates on docs page speed +- `docs`: updates on docs page speed +- `docs`: updates on docs page speed +- `docs`: updates on docs page speed +- `docs`: updates on docs page speed +- `docs`: updates on docs page speed +- `docs`: updates on docs page speed +- `docs`: updates on docs page speed +- `docs`: updates on docs page speed +- `docs`: updates on docs page speed +- `docs`: updates on docs page speed +- `docs`: updates on docs page speed +- `docs`: updates on docs page speed +- `docs`: updates on docs page speed +- `docs`: updates on docs page speed +- `docs`: updates on docs page speed +- `docs`: updates on docs page speed +- `docs`: updates on docs page speed +- `docs`: updates on docs page speed +- `docs`: updates on docs page speed +- `docs`: updates on docs page speed +- `docs`: updates on docs page speed +- `docs`: updates on docs page speed +- `docs`: updates on docs page speed +- `docs`: updates on docs page speed +- `docs`: updates on docs page speed +- `docs`: updates on docs page speed +- `docs`: updates on docs page speed +- `docs`: updates on docs page speed +- `docs`: updates on docs page speed +- `docs`: updates on docs page speed +- `docs`: updates on docs page speed +- `docs`: updates on docs page speed +- `docs`: updates on docs page speed +- `docs`: updates on docs page speed +- `docs`: updates on docs page speed +- `docs`: updates on docs page speed +- `docs`: updates on docs page speed +- `docs`: updates on docs page speed +- `docs`: updates on docs page speed +- `docs`: updates on docs page speed +- `docs`: updates on docs page speed +- `docs`: updates on docs page speed +- `docs`: updates on docs page speed +- `docs`: updates on docs page speed +- `docs`: updates on docs page speed +- `docs`: updates on docs page speed +- `docs`: updates on docs page speed +- `docs`: updates on docs page speed +- `docs`: updates on documents +- `docs`: updates on workflows +- `docs`: updates on workflows +- `docs`: updates on workflows +- `docs`: updates on workflows +- `docs`: updates on workflows +- `docs`: updates on workflows +- `docs`: updates on workflows +- `docs`: updates on workflows +- `docs`: updates on workflows +- `docs`: updates on workflows +- `docs`: updates on workflows +- `docs`: updates on workflows +- `docs`: updates on workflows +- `docs`: updates on workflows +- `docs`: updates on workflows +- `docs`: updates on workflows +- `docs`: updates on workflows +- `docs`: updates on workflows +- `docs`: updates on workflows +- `docs`: updates on workflows +- `docs`: updates on workflows +- `docs`: updates on workflows +- `docs`: updates on workflows +- `docs`: updates on workflows +- `docs`: updates on workflows +- `docs`: updates on workflows +- `docs`: updates on workflows +- `github-actions`: bump wagoid/commitlint-github-action diff --git a/OSSMETADATA b/OSSMETADATA new file mode 100644 index 00000000000..b96d4a4dfa0 --- /dev/null +++ b/OSSMETADATA @@ -0,0 +1 @@ +osslifecycle=active diff --git a/README.md b/README.md index 72c00cd2503..330af3548a3 100644 --- a/README.md +++ b/README.md @@ -1,19 +1,31 @@ -# Java Design patterns +# Java Design Patterns

Java Design patterns

- + Nullable labs - + Java patterns - + Java patterns + + Java patterns + + + Gitee Java patterns + + + Codacy + + + Github stars +

![GitHub tag (latest by date)](https://img.shields.io/github/v/tag/AlexRogalskiy/java-patterns) @@ -28,19 +40,39 @@ ![GitHub search hit counter](https://img.shields.io/github/search/AlexRogalskiy/java-patterns/goto) ![GitHub Repository branches](https://badgen.net/github/branches/AlexRogalskiy/java-patterns) ![GitHub Repository dependents](https://badgen.net/github/dependents-repo/AlexRogalskiy/java-patterns) + +[![GitHub version](https://badge.fury.io/gh/AlexRogalskiy%2Fjava-patterns.svg)](https://badge.fury.io/gh/AlexRogalskiy%2Fjava-patterns) +[![Gitpod ready-to-code](https://img.shields.io/badge/Gitpod-ready--to--code-blue?logo=gitpod)](https://gitpod.io/#github.com/AlexRogalskiy/java-patterns/) +[![first-timers-only Friendly](https://img.shields.io/badge/first--timers--only-friendly-blue.svg)](http://www.firsttimersonly.com/) +[![Open Source Helpers](https://www.codetriage.com/alexrogalskiy/java-patterns/badges/users.svg)](https://www.codetriage.com/alexrogalskiy/java-patterns) +[![The Changelog](https://img.shields.io/badge/The%20Changelog-%23363-61c192.svg)](https://changelog.com/jsparty) +[![Discuss](https://img.shields.io/badge/-Discuss-blue)](https://github.com/AlexRogalskiy/java-patterns/discussions) +[![Sourcegraph](https://sourcegraph.com/github.com/AlexRogalskiy/java-patterns/-/badge.svg)](https://sourcegraph.com/github.com/AlexRogalskiy/java-patterns?badge) +[![DOI](https://zenodo.org/badge/329967283.svg)](https://zenodo.org/badge/latestdoi/329967283) [![FOSSA Status](https://app.fossa.com/api/projects/git%2Bgithub.com%2FAlexRogalskiy%2Fjava-patterns.svg?type=shield)](https://app.fossa.com/projects/git%2Bgithub.com%2FAlexRogalskiy%2Fjava-patterns?ref=badge_shield) +[![Renovatebot](https://badgen.net/badge/renovate/enabled/green?cache=300)](https://renovatebot.com/) [![Dependabot](https://img.shields.io/badge/dependabot-enabled-1f8ceb.svg?style=flat-square)](https://dependabot.com/) [![NewReleases](https://newreleases.io/badge.svg)](https://newreleases.io/github/AlexRogalskiy/java-patterns) +[![Stack Overflow](https://img.shields.io/badge/stack%20overflow-java-4183C4.svg)](https://stackoverflow.com/questions/tagged/java) +[![Reddit](https://img.shields.io/static/v1?label=reddit&message=java&style=plastic&color=4183C4&logo=reddit)](https://www.reddit.com/r/java) +[![Hashnode](https://img.shields.io/static/v1?label=hashnode&message=java&style=plastic&color=4183C4&logo=hashnode)](https://hashnode.com/n/java) [![Hits-of-Code](https://hitsofcode.com/github/alexrogalskiy/java-patterns?branch=master)](https://hitsofcode.com/github/alexrogalskiy/java-patterns?branch=master/view?branch=master) +[![Maintainability](https://api.codeclimate.com/v1/badges/97bd71c53e8145a264ec/maintainability)](https://codeclimate.com/github/AlexRogalskiy/java-patterns/maintainability) [![ComVer](https://img.shields.io/badge/ComVer-compliant-brightgreen.svg)][tags] +[![GitHub Super-Linter](https://github.com/alexrogalskiy/java-patterns/workflows/Lint%20Code%20Base/badge.svg)](https://github.com/marketplace/actions/super-linter) +[![Documentation Status](https://readthedocs.org/projects/java-patterns/badge/?version=latest)](https://java-patterns.readthedocs.io/en/latest/?badge=latest) +[![NetflixOSS Lifecycle](https://img.shields.io/osslifecycle/AlexRogalskiy/java-patterns.svg)]() +[![CI](https://github.com/AlexRogalskiy/java-patterns/workflows/CI/badge.svg)](https://github.com/AlexRogalskiy/java-patterns/actions/workflows/build.yml) +[![first-timers-only](https://img.shields.io/badge/first--timers--only-friendly-blue.svg?style=flat-square)](https://www.firsttimersonly.com/) ## 🎹 _Table of contents_ - * [Java Design patterns](#java-design-patterns) + * [Java Design Patterns](#java-design-patterns) * [Table of contents](#-table-of-contents) * [Summary](#-summary) * [Documentation](#-documentation) + * [Kubernetes](#-kubernetes) * [Statistics](#-statistics) * [Versioning](#-versioning) * [Authors](#-authors) @@ -66,6 +98,8 @@ * [DevCases posts](#devcases-posts) + + ## ☝ _Summary_

@@ -81,7 +115,8 @@

-_**Java Design Patterns**_ is intended to provide various use case scenarios and architectural concepts on prototyping adaptive applications. +**_Java Design Patterns_** is intended to provide various use case scenarios and architectural concepts on +prototyping adaptive applications. ```text mkdocs.yml # Configuration file. @@ -91,12 +126,12 @@ docs/ units/ design-patterns.md # Design patterns and architectural concepts scenarios.md # Scenarios in practice - use-cases.md # Typical use cases + use-cases.md # Typical use cases user-guide/ - changelog.md # Changelog page - code_of_conduct.md # Code of conduct page - code_owners.md # Code owners page - dependency.md # Dependency page + changelog.md # Changelog page + code_of_conduct.md # Code of conduct page + code_owners.md # Code owners page + dependency.md # Dependency page description.md # Description page faq.md # FAQ page getting-started.md # Getting started page @@ -115,89 +150,163 @@ docs/ info.md # Links page ``` + + ## 📝 _Documentation_ The Website documentation is provided by [gitbook](https://www.gitbook.com/) and can be discovered at url: -[_**Java Patterns**_][docs] +[**_Java Patterns_**][docs] -To enable documentation serving at _**localhost**_ the following steps should be considered: +To enable documentation serving at **_localhost_** you can run the following script -1\) Install/upgrade _**pip**_ command-line utility: +```shell script +./scripts/build-docs.sh +``` -```text +otherwise, the next steps should be considered: + +1\) Install/upgrade **_pip_** command-line utility: + +```shell script pip install --upgrade pip ``` -or if you need to install _**pip**_ for the first time: +or if you need to install **_pip_** for the first time: -```text +```shell script +wget --no-check-certificate https://bootstrap.pypa.io/get-pip.py python get-pip.py ``` -2\) Install the _**mkdocs**_ package using pip: +2\) Install the **_mkdocs_** package using pip: -```text +```shell script pip install mkdocs ``` or more conveniently for Windows subsystem: -```text -python -m pip install mkdocs -python -m mkdocs +```shell script +python -m pip install mkdocs --quiet +``` + +or via provided software package manager tool: + +```shell script +brew install mkdocs # macOS +sudo apt install mkdocs # Ubuntu +sudo yum install mkdocs # CentOS/RHEL ``` 3\) Install the material theme for the website: -```text -pip install mkdocs-material -pip install markdown-include +```shell script +python -m pip install mkdocs-material --quiet +python -m pip install markdown-include --quiet +... +(see requirements.txt) +... ``` -4\) Start the server at _**localhost**_ by running the following command: +4\) Start a web server on your local machine at **_localhost_**, where you can see the entire website – with hot-reload when you save a change by running the following command: -```text -mkdocs serve --verbose --dirtyreload +```shell script +python -m mkdocs build --clean --config-file mkdocs.yml +python -m mkdocs serve --verbose --dirtyreload ``` +The site is served from the address specified in configuration file `mkdocs.yml`. The MkDocs default is `localhost:8000`, but the current configuration file sets it: + +```yaml +dev_addr: '0.0.0.0:8000' +``` + +The `--dirtyreload` option limits rebuilds to the changed page, which means changes to `mkdocs.yml` are not reflected. +If you change `mkdocs.yml`, stop and restart `python -m mkdocs serve --verbose --dirtyreload`. + 5\) Deploy to GitHub pages: -```text -mkdocs --verbose gh-deploy --force --remote-branch gh-pages +```shell script +python -m mkdocs --verbose gh-deploy --force --remote-branch gh-pages ``` 5\) Open up [localhost](http://127.0.0.1:8000/) in browser to get the default documentation homepage. + + +## 🧶 _Kubernetes_ + +Running k8s cluster with tilt command by acquiring k8s deployment configuration: + +```shell +tilt up +``` + +Shutting down k8s cluster with provisioned resources removal: + +```shell +tilt down --delete-namespaces +``` + + + ## ⏰ _Statistics_

Documentation PageSpeed result dashboard

+ + ## 📝 _Versioning_ -The project uses [SemVer](http://semver.org/) for versioning. For the versions available, see the [tags on this repository][tags]. +The project uses [SemVer](http://semver.org/) for versioning. For the versions available, see the [tags on +this repository][tags]. + + ## 🌹 _Authors_ -_**Java Patterns**_ is maintained by the following GitHub team-members: +**_Java Patterns_** is maintained by the following GitHub team-members: -* [![Author](https://img.shields.io/badge/author-AlexRogalskiy-FB8F0A)](https://github.com/AlexRogalskiy) +- [![Author](https://img.shields.io/badge/author-AlexRogalskiy-FB8F0A)](https://github.com/AlexRogalskiy) with community support please contact with us if you have some question or proposition. + + ## 💕 _Contributing_ [![Contributors Display](https://badges.pufler.dev/contributors/AlexRogalskiy/java-patterns?size=50&padding=5&bots=true)](https://badges.pufler.dev) -Please read [CONTRIBUTING.md](https://github.com/AlexRogalskiy/java-patterns/blob/master/.github/CONTRIBUTING.md) for details on our code of conduct, and the process for submitting pull requests to us. +Please read [CONTRIBUTING.md](CONTRIBUTING.md) for details on our code of conduct, and the process for +submitting pull requests to us ([emoji key](https://allcontributors.org/docs/en/emoji-key)). + +More on information on project contributions can be found at [CHANGELOG.md](CHANGELOG.md). + +This project follows the [all-contributors](https://github.com/all-contributors/all-contributors) +specification. Contributions of any kind are welcome! + +

+ GitHub contributors +

[![PRs Welcome](https://img.shields.io/badge/PRs-welcome-brightgreen.svg?style=flat-square)](http://makeapullrequest.com) ![Github contributors](https://img.shields.io/github/all-contributors/AlexRogalskiy/java-patterns) See also the list of [contributors][contributors] who participated in this project. +[![Edit with Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/#https://github.com/AlexRogalskiy/java-patterns) + +**_Java Design Patterns_** has experimental support for _Gitpod_, a pre-configured development environment +that runs in your browser. To use _Gitpod_, click the button below and sign in with GitHub. _Gitpod_ also +offers a browser add-on, though it is not required. + +[![Open in CodeSandbox](https://img.shields.io/badge/Open%20in-CodeSandbox-blue?style=flat-square&logo=codesandbox)](https://githubbox.com/AlexRogalskiy/java-patterns) + + + ## 🚨 _Visitor stats_ [![GitHub page hits](https://hits.seeyoufarm.com/api/count/incr/badge.svg?url=https%3A%2F%2Fgithub.com%2FAlexRogalskiy%2Fjava-patterns&count_bg=%2379C83D&title_bg=%23555555&icon=&icon_color=%23E7E7E7&title=hits&edge_flat=true)](https://hits.seeyoufarm.com) @@ -206,234 +315,313 @@ See also the list of [contributors][contributors] who participated in this proje ![GitHub forks](https://img.shields.io/github/forks/AlexRogalskiy/java-patterns?style=social) ![GitHub watchers](https://img.shields.io/github/watchers/AlexRogalskiy/java-patterns?style=social) + + ## ⚽ _Licensing_ -_**Java Patterns**_ is distributed under LGPL version 3 or later, [[License](https://github.com/AlexRogalskiy/java-patterns/blob/master/LICENSE.txt)]. -LGPLv3 is additional permissions on top of GPLv3. +**_Java Patterns_** is distributed under LGPL version 3 or later, +\[[License](https://github.com/AlexRogalskiy/java-patterns/blob/master/LICENSE.txt)]. LGPLv3 is additional +permissions on top of GPLv3. ![image](https://user-images.githubusercontent.com/19885116/48661948-6cf97e80-ea7a-11e8-97e7-b45332a13e49.png) + + ## 🌟 _Development Support_ -Like Java Design patterns - and _**Java Patterns**_ ? Consider buying me a coffee :\) +Like +Java Design patterns +and **_Java Patterns_** ? Consider buying me a coffee :) [![Become a Patron](https://img.shields.io/badge/Become_Patron-Support_me_on_Patreon-blue.svg?style=flat-square&logo=patreon&color=e64413)](https://www.patreon.com/alexrogalskiy) [![Buy Me A Coffee](https://img.shields.io/badge/Donate-Buy%20me%20a%20coffee-yellow.svg?logo=buy%20me%20a%20coffee)](https://www.buymeacoffee.com/AlexRogalskiy) [![KoFi](https://img.shields.io/badge/Donate-Buy%20me%20a%20coffee-yellow.svg?logo=ko-fi)](https://ko-fi.com/alexrogalskiy) + + ## 👨‍👨‍👧‍👦 _Acknowledgement_ [![Stargazers repo roster for @AlexRogalskiy/java-patterns](https://reporoster.com/stars/AlexRogalskiy/java-patterns)][stars] +[![Stargazers over time](https://starchart.cc/AlexRogalskiy/java-patterns.svg)][stars_chart] + +[![Statistics report](https://cauldron.io/project/5121/stats.svg)][stats_chart] + +[![Star History Char](https://api.star-history.com/svg?repos=AlexRogalskiy/java-patterns&type=Date)][stars_history_chart] + + + ## 📎 _OpenGraph Card_

OpenGraph card

+ + ## 🔥 _Feeds and Podcasts_ ### _Reddit posts_ -- [Writing C code in Java/Clojure: GraalVM specific programming](https://www.reddit.com/r/java/comments/lfolhe/writing_c_code_in_javaclojure_graalvm_specific/) -- [Jakarta EE Survey 2021](https://www.reddit.com/r/java/comments/lfjn8y/jakarta_ee_survey_2021/) -- [Where is the best place online to learn Java?](https://www.reddit.com/r/java/comments/lfjjrt/where_is_the_best_place_online_to_learn_java/) -- [How to use make a navbar visible on all the pages (thymeleaf)?](https://www.reddit.com/r/java/comments/lfi00v/how_to_use_make_a_navbar_visible_on_all_the_pages/) -- [I am learning java now and I'd like to practice by making some little projects. is there any that don't involve GUI?](https://www.reddit.com/r/java/comments/lfezjq/i_am_learning_java_now_and_id_like_to_practice_by/) -- [Why I love Jetbrains IntelliJ for Java Development (and you should, too!)](https://www.reddit.com/r/java/comments/lfdp2x/why_i_love_jetbrains_intellij_for_java/) -- [How To Run Junit Tests From The Command Line](https://www.reddit.com/r/java/comments/lfbud7/how_to_run_junit_tests_from_the_command_line/) -- [Why is it called StringBuffer and StringBuilder?](https://www.reddit.com/r/java/comments/lfaxkf/why_is_it_called_stringbuffer_and_stringbuilder/) -- [Java GPU accelerated Viola Jones Face Detection with TornadoVM](https://www.reddit.com/r/java/comments/lfams9/java_gpu_accelerated_viola_jones_face_detection/) -- [Best resources to learn Spring boot?](https://www.reddit.com/r/java/comments/lf7wap/best_resources_to_learn_spring_boot/) + +- [Spring4Shell Details and Exploit code leaked](https://www.reddit.com/r/java/comments/tsdllr/spring4shell_details_and_exploit_code_leaked/) +- [Apple's Code-signing Quagmire](https://www.reddit.com/r/java/comments/tsd2cr/apples_codesigning_quagmire/) +- [Spring4Shell: 0-day RCE on Spring Core](https://www.reddit.com/r/java/comments/tscqlg/spring4shell_0day_rce_on_spring_core/) +- [Game Making Libraries + Engines in Java 2022](https://www.reddit.com/r/java/comments/tscojc/game_making_libraries_engines_in_java_2022/) +- [Where's Java Going In 2022?](https://www.reddit.com/r/java/comments/tsbleo/wheres_java_going_in_2022/) +- [Architecture design help](https://www.reddit.com/r/java/comments/tsb2tu/architecture_design_help/) +- [Maven is turning 20 today 🥳 To many more years of stable Java builds 🍻](https://www.reddit.com/r/java/comments/ts5urt/maven_is_turning_20_today_to_many_more_years_of/) +- [Memory leak due to improper exception handling](https://www.reddit.com/r/java/comments/ts4rfm/memory_leak_due_to_improper_exception_handling/) +- [Scaling Spring Batch processing with partitioning using Kafka](https://www.reddit.com/r/java/comments/ts190r/scaling_spring_batch_processing_with_partitioning/) +- [New in JDK 18: Reviewing Enhancements in the Latest JDK Release](https://www.reddit.com/r/java/comments/trufoj/new_in_jdk_18_reviewing_enhancements_in_the/) + + + ### _InfoWorld posts_ -- [Oracle adds GraalVM to Java subscription](https://www.infoworld.com/article/3606069/oracle-adds-graalvm-to-java-subscription.html#tk.rss_java) -- [GraalVM boosts Java performance with Truffle framework](https://www.infoworld.com/article/3604476/graalvm-boosts-java-performance-with-truffle-framework.html#tk.rss_java) -- [JDK 16: The new features in Java 16](https://www.infoworld.com/article/3569150/jdk-16-the-new-features-in-java-16.html#tk.rss_java) -- [Python edges C++ for Tiobe’s programming language of the year](https://www.infoworld.com/article/3602554/python-wins-language-popularity-honor.html#tk.rss_java) -- [ActiveJ Java platform takes aim at Spring, Quarkus](https://www.infoworld.com/article/3601068/activej-java-platform-takes-aim-at-spring-quarkus.html#tk.rss_java) -- [Eclipse weighs Java 11 support for Jakarta EE 9](https://www.infoworld.com/article/3600768/eclipse-weighs-java-11-support-for-jakarta-ee-9.html#tk.rss_java) -- [Enterprise Java gets a new namespace](https://www.infoworld.com/article/3600158/enterprise-java-gets-a-new-namespace.html#tk.rss_java) -- [The best programming language to learn now](https://www.infoworld.com/article/3403404/the-best-programming-language-to-learn-now.html#tk.rss_java) -- [Kotlin adds dynamic method invocation for JVM](https://www.infoworld.com/article/3598414/kotlin-adds-dynamic-method-invocation-for-jvm.html#tk.rss_java) -- [Red Hat Quarkus Java stack moves to OpenShift](https://www.infoworld.com/article/3597302/red-hat-quarkus-java-stack-moves-to-openshift.html#tk.rss_java) + +- [JDK 18: The new features in Java 18](https://www.infoworld.com/article/3630510/jdk-18-the-new-features-in-java-18.html#tk.rss_java) +- [JDK 19: Java 19 begins to take shape](https://www.infoworld.com/article/3653331/jdk-19-java-19-begins-to-take-shape.html#tk.rss_java) +- [Project Loom: Understand the new Java concurrency model](https://www.infoworld.com/article/3652596/project-loom-understand-the-new-java-concurrency-model.html#tk.rss_java) +- [Java 19 could be big](https://www.infoworld.com/article/3652336/java-19-could-be-big.html#tk.rss_java) +- [Java 8 still dominates, but Java 17 wave is coming – survey](https://www.infoworld.com/article/3652408/java-8-still-dominates-but-java-17-wave-is-coming-survey.html#tk.rss_java) +- [Rust programming for Java developers](https://www.infoworld.com/article/3651362/rust-programming-for-java-developers.html#tk.rss_java) +- [TypeScript usage growing by leaps and bounds — report](https://www.infoworld.com/article/3650513/typescript-usage-growing-by-leaps-and-bounds-report.html#tk.rss_java) +- [A brief intro to the Pants build system](https://www.infoworld.com/article/3650508/a-brief-intro-to-the-pants-build-system.html#tk.rss_java) +- [Java proposal would lower GC latency](https://www.infoworld.com/article/3649194/java-proposal-would-lower-gc-latency.html#tk.rss_java) +- [How to handle Java errors and cleanup without finalize](https://www.infoworld.com/article/3649089/how-to-handle-java-errors-and-cleanup-without-finalize.html#tk.rss_java) + + + ### _Let's talk posts_ -- [4 Developers 2020](http://letstalkaboutjava.blogspot.com/2020/02/4-developers-2020_9.html) -- [You won't do it later!](http://letstalkaboutjava.blogspot.com/2019/12/you-wont-do-it-later.html) -- [JDD 2019!](http://letstalkaboutjava.blogspot.com/2019/09/once-again-im-media-partner-of-jdd-and.html) -- [4 Developers 2019](http://letstalkaboutjava.blogspot.com/2019/02/4-developers-2019.html) -- [Test-Driven Development - you are doing it wrong!](http://letstalkaboutjava.blogspot.com/2019/01/test-driven-development-you-are-doing.html) -- [HackYeah!](http://letstalkaboutjava.blogspot.com/2018/11/its-time-for-another-great-chance-to.html) -- [ByteMyCode - let's meet in Wrocław](http://letstalkaboutjava.blogspot.com/2018/10/bytemycode-lets-meet-in-wrocaw.html) -- [JDD is coming!](http://letstalkaboutjava.blogspot.com/2018/08/jdd-is-coming.html) -- [Just stop for a moment](http://letstalkaboutjava.blogspot.com/2018/06/just-stop-for-moment.html) -- [Refactoring vs. Redesign](http://letstalkaboutjava.blogspot.com/2017/11/refactoring-vs-redesign.html) + +- [Link Dump #29](http://letstalkaboutjava.blogspot.com/2022/03/link-dump-29.html) +- [Link Dump #28](http://letstalkaboutjava.blogspot.com/2022/03/link-dump-28.html) +- [Link Dump #27](http://letstalkaboutjava.blogspot.com/2022/03/link-dump-27.html) +- [Link Dump #26](http://letstalkaboutjava.blogspot.com/2022/03/link-dump-26.html) +- [Link Dump #25](http://letstalkaboutjava.blogspot.com/2022/02/link-dump-25.html) +- [Link Dump #24](http://letstalkaboutjava.blogspot.com/2022/02/link-dump-24.html) +- [Link Dump #23](http://letstalkaboutjava.blogspot.com/2022/02/link-dump-23.html) +- [Link Dump #22](http://letstalkaboutjava.blogspot.com/2022/01/link-dump-22.html) +- [Link Dump #21](http://letstalkaboutjava.blogspot.com/2022/01/link-dump-21.html) +- [Link Dump #20](http://letstalkaboutjava.blogspot.com/2022/01/link-dump-20.html) + + + ### _Random thoughts posts_ -- [Using CDI to extend functionality](http://randomthoughtsonjavaprogramming.blogspot.com/2021/02/using-cdi-to-extend-functionality.html) -- [Using Optional to prevent NullPointers In TrainWrecks](http://randomthoughtsonjavaprogramming.blogspot.com/2021/01/using-optional-to-prevent-nullpointers.html) -- [Branch Prediction](http://randomthoughtsonjavaprogramming.blogspot.com/2021/01/branch-prediction.html) -- [Notes on Unity](http://randomthoughtsonjavaprogramming.blogspot.com/2020/12/notes-on-unity.html) -- [Payara and Jakarta EE 9](http://randomthoughtsonjavaprogramming.blogspot.com/2020/12/payara-and-jakarta-ee-9.html) -- [The Three options with Optional](http://randomthoughtsonjavaprogramming.blogspot.com/2020/12/the-three-options-with-optional.html) -- [Finding the index of an element in a List using Streams](http://randomthoughtsonjavaprogramming.blogspot.com/2020/12/finding-index-of-element-in-list-using.html) -- [Why aren't Java Collections remove methods generic?](http://randomthoughtsonjavaprogramming.blogspot.com/2020/11/why-arent-java-collections-remove.html) -- [Running Java in the Cloud - Jelastic](http://randomthoughtsonjavaprogramming.blogspot.com/2020/10/running-java-in-cloud-jelastic.html) -- [My Angular App](http://randomthoughtsonjavaprogramming.blogspot.com/2017/07/my-angular-app.html) + +- [Join in SQL](http://randomthoughtsonjavaprogramming.blogspot.com/2022/03/join-in-sql.html) +- [For-loops and Streams](http://randomthoughtsonjavaprogramming.blogspot.com/2022/03/for-loops-and-streams.html) +- [Being Glue](http://randomthoughtsonjavaprogramming.blogspot.com/2022/02/being-glue.html) +- [Hibernate Proxies and the Visitor Pattern](http://randomthoughtsonjavaprogramming.blogspot.com/2022/02/hibernate-proxies-and-visitor-pattern.html) +- [RAID Mirrorring with ADM](http://randomthoughtsonjavaprogramming.blogspot.com/2022/01/raid-mirrorring-with-adm.html) +- [Are we really engineers?](http://randomthoughtsonjavaprogramming.blogspot.com/2022/01/are-we-really-engineers.html) +- [Standard RAID levels](http://randomthoughtsonjavaprogramming.blogspot.com/2021/12/standard-raid-levels.html) +- [Assing JsonIgnore on generated files in openapi](http://randomthoughtsonjavaprogramming.blogspot.com/2021/12/assing-jsonignore-on-generated-files-in.html) +- [RESTEASY004590: You must define a @Consumes type on your client method or interface, or supply a default](http://randomthoughtsonjavaprogramming.blogspot.com/2021/12/resteasy004590-you-must-define-consumes.html) +- [Replacing many if statements](http://randomthoughtsonjavaprogramming.blogspot.com/2021/11/replacing-many-if-statements.html) + + + ### _Better code posts_ -- [Simplifying Spring Security](https://betterjavacode.com/programming/simplifying-spring-security) -- [Spring Boot CRUD Application Example with MongoDB](https://betterjavacode.com/spring-boot/spring-boot-crud-application-example-with-mongodb) -- [Top 21 Spring Boot Interview Questions](https://betterjavacode.com/spring-boot/top-21-spring-boot-interview-questions) -- [Spring WebClient vs RestTemplate – Comparison and Features](https://betterjavacode.com/programming/spring-webclient-vs-resttemplate-comparison-and-features) -- [The Complete Guide to Use Docker Compose](https://betterjavacode.com/docker/the-complete-guide-to-use-docker-compose) -- [Fundamentals of a Distributed System Design](https://betterjavacode.com/programming/fundamentals-of-a-distributed-system-design) -- [7 AWS Services Every Developer Should Know About](https://betterjavacode.com/programming/7-aws-services-every-developer-should-know-about) -- [The Definitive Guide to Use Keycloak With a Spring Boot Application](https://betterjavacode.com/programming/spring-boot-application-keycloak) -- [How to Use Basic Authentication for Rest Template](https://betterjavacode.com/programming/how-to-use-basic-authentication-for-rest-template) -- [Json Web Token: How to Secure Spring Boot REST API](https://betterjavacode.com/java/securing-spring-boot-rest-api) + +- [How To Use CORS in NestJS Application](https://betterjavacode.com/programming/how-to-use-cors-in-nestjs-application) +- [Handling Large Datasets in Distributed Systems](https://betterjavacode.com/programming/handling-large-datasets-in-distributed-systems) +- [Example of Spring Cloud Function with AWS Lambda](https://betterjavacode.com/programming/example-spring-cloud-function-aws-lambda) +- [How to Use Pub/Sub with NodeJS](https://betterjavacode.com/programming/how-to-use-pub-sub-with-nodejs) +- [Logging in Spring Boot Microservices](https://betterjavacode.com/programming/logging-in-spring-boot-microservices) +- [Implementing Domain-Driven Design](https://betterjavacode.com/programming/implementing-domain-driven-design) +- [A Step By Step Guide to Kubernetes](https://betterjavacode.com/programming/learn-kubernetes-step-by-step) +- [Spring Cloud Tutorial for Beginners](https://betterjavacode.com/spring-boot/spring-cloud-tutorial-for-beginners) +- [Details of Liskov Substitution Principle Example](https://betterjavacode.com/programming/liskov-substitution-principle-example) +- [Building Microservices with Event-Driven Architecture](https://betterjavacode.com/programming/microservices-event-driven-architecture) + + + ### _Inside Java posts_ -- [JDK 16 enters the Release Candidate phase](https://inside.java/2021/02/04/jdk16-enters-rc/) -- [Project Loom: Modern scalable concurrency for the Java platform](https://inside.java/2021/02/04/projectloom-jokerconf/) -- [JEP-380: Unix domain socket channels](https://inside.java/2021/02/03/jep380-unix-domain-sockets-channels/) -- [Project Lanai Early Access Build 9](https://inside.java/2021/02/01/new-lanai-ea-build/) -- [JEP proposed to target JDK 17: 356: Enhanced Pseudo-Random Number Generators](https://inside.java/2021/01/29/jep-356-proposed-to-target-jdk17/) -- [Episode 11 “How to contribute to OpenJDK” with Stuart Marks and Jesper Wilhelmsson](https://inside.java/2021/01/29/podcast-011/) -- [JMC 8.0.0 Early-Access Release](https://inside.java/2021/01/28/jmc-8-early-access-release/) -- [Extending the Automatic Vectorization Capabilities of the C2 Compiler](https://inside.java/2021/01/27/extending-c2-autovectorization-capabilities/) -- [Foreign Memory Access - Pulling all the threads](https://inside.java/2021/01/25/memory-access-pulling-all-the-threads/) -- [Draft JEP for upcoming work on snippets](https://inside.java/2021/01/23/draft-jep-snippets/) + +- [ZGC - The Future of Low-Latency Garbage Collection Is Here](https://inside.java/2022/03/30/odl-zgc/) +- [New in JDK 18: Reviewing Enhancements in the Latest JDK Release](https://inside.java/2022/03/29/new-in-jdk18/) +- [Moving Java Forward Keynote](https://inside.java/2022/03/28/odl-moving-java-forward/) +- [Java Is Fast! - Inside Java Newscast #22](https://inside.java/2022/03/24/insidejava-newscast-022/) +- [Programmer’s Guide to Snippets](https://inside.java/2022/03/23/snippets-programmer-guide/) +- [`jextract` Standalone Repository](https://inside.java/2022/03/23/jextract-standalone-repo/) +- [Episode 23 “Java 18 is Here!”](https://inside.java/2022/03/22/podcast-023/) +- [The Arrival of Java 18!](https://inside.java/2022/03/22/the-arrival-of-java18/) +- [JavaOne is back!](https://inside.java/2022/03/22/javaone-is-back/) +- [JDK 18 Security Enhancements](https://inside.java/2022/03/22/jdk-18-security-enhancements/) + + + ### _Java programmer posts_ -- [3 Ways to Create Spring Boot Project in Eclipse](https://www.thejavaprogrammer.com/create-spring-boot-project-in-eclipse/) -- [Real Time Example of Multithreading in Java](https://www.thejavaprogrammer.com/real-time-example-of-multithreading-in-java/) -- [Why Java Doesn’t Support Operator Overloading?](https://www.thejavaprogrammer.com/why-java-doesnt-support-operator-overloading/) -- [Solve Error “char cannot be dereferenced” in Java](https://www.thejavaprogrammer.com/char-cannot-be-dereferenced/) -- [Best Way to Learn Java for a Beginner](https://www.thejavaprogrammer.com/best-way-to-learn-java-for-a-beginner/) -- [Solve Error “int cannot be dereferenced” in Java](https://www.thejavaprogrammer.com/int-cannot-be-dereferenced/) -- [Fix Error “editor does not contain a main type” in Eclipse](https://www.thejavaprogrammer.com/editor-does-not-contain-a-main-type/) -- [Points for Perfect Software License Management Practices in Business Organization](https://www.thejavaprogrammer.com/software-license-management-practices/) -- [6 Best Java Books for Beginners in 2020](https://www.thejavaprogrammer.com/best-java-books-beginners/) -- [Solve Error Could not reserve enough space for object heap](https://www.thejavaprogrammer.com/could-not-reserve-enough-space-for-object-heap/) + +- [6 Best Online Java Courses for Beginners in 2022](https://www.thejavaprogrammer.com/java-courses-for-beginners/) +- [Solve Error Java Access Denied FileNotFoundException](https://www.thejavaprogrammer.com/java-access-denied/) +- [Custom Iterator in Java with Example](https://www.thejavaprogrammer.com/custom-iterator-in-java/) +- [Rounding in Java – Math.Round, Math.Floor, Math.Ceil](https://www.thejavaprogrammer.com/rounding-in-java/) +- [Advantages of Hibernate Over JDBC?](https://www.thejavaprogrammer.com/advantages-of-hibernate-over-jdbc/) +- [Advantages of R Programming Language](https://www.thejavaprogrammer.com/advantages-of-r-programming-language/) +- [Method Overloading in Java With Example](https://www.thejavaprogrammer.com/method-overloading-in-java/) +- [10 Best Laptop for Java Programming in India 2022](https://www.thejavaprogrammer.com/laptop-for-java-programming/) +- [Types of Constants in Java](https://www.thejavaprogrammer.com/types-of-constants-in-java/) +- [Java Collection Hierarchy](https://www.thejavaprogrammer.com/java-collection-hierarchy/) + + + ### _Dreamix posts_ -- [Learn form Java Champion: Simon Ritter x Java Daily](https://dreamix.eu/blog/java/learn-form-java-champion-simon-ritter-x-java-daily) -- [5 Reasons Why Bespoke Software Development Projects Succeed](https://dreamix.eu/blog/java/5-reasons-why-bespoke-software-development-projects-succeed) -- [Continuous Integration and Delivery to Improve the Software Development Workflow](https://dreamix.eu/blog/java/continuous-integration-and-delivery-to-improve-the-software-development-workflow) -- [Why good (clean) software architecture matters](https://dreamix.eu/blog/java/why-good-clean-software-architecture-matters) -- [Top 5 Emerging Technologies among Java Devs](https://dreamix.eu/blog/java/top-5-emerging-technologies-among-java-devs) -- [What is Continuous Integration and How to Benefit from it](https://dreamix.eu/blog/java/what-is-continuous-integration-and-how-to-benefit-from-it) -- [The Anatomy of a Good SCRUM team](https://dreamix.eu/blog/java/the-anatomy-of-a-good-scrum-team) -- [7 Important Factors for Making Software Development Outsourcing Decisions](https://dreamix.eu/blog/java/7-important-factors-for-making-software-development-outsourcing-decisions) -- [How to Successfully Use the Agile Process for Bespoke Software Development?](https://dreamix.eu/blog/java/how-to-successfully-use-the-agile-process-for-bespoke-software-development) -- [5 Factors that Lead to Successful Custom Software Development](https://dreamix.eu/blog/java/5-factors-that-lead-to-successful-custom-software-development) + +- [Learn from Java Champion Markus Eisele: Developer productivity with containers and the future of cloud-native](https://dreamix.eu/blog/java/learn-from-java-champion-markus-eisele-developer-productivity-with-containers-and-the-future-of-cloud-native) +- [Learn from Java Champion Johan Vos: JavaFx in the Age of Browsers](https://dreamix.eu/blog/java/learn-from-java-champion-johan-vos-javafx-in-the-age-of-browsers) +- [Five Reasons to Choose Java for your Next Software Project](https://dreamix.eu/blog/java/five-reasons-to-choose-java-for-your-next-software-project) +- [Learn from Java Champion Gunnar Morling: Performance unit testing with Java Flight Recorder (JFR) and JfrUnit](https://dreamix.eu/blog/java/learn-from-java-champion-gunnar-morling-performance-unit-testing-with-java-flight-recorder-jfr-and-jfrunit) +- [Unit Testing in Java – The Missing Bits (Part 2)](https://dreamix.eu/blog/java/unit-testing-in-java-the-missing-bits-part-2) +- [Unit Testing in Java – The Missing Bits (Part 1)](https://dreamix.eu/blog/java/unit-testing-in-java-the-missing-bits-part-1) +- [Sorting An Array In Java: Tips & Tricks](https://dreamix.eu/blog/java/sorting-an-array-in-java-tips-tricks) +- [Java vs JavaScript: How to Choose the Right Backend Technology?](https://dreamix.eu/blog/java/java-vs-javascript-how-to-choose-the-right-backend-technology) +- [Splitting String in Java – Examples and Tips](https://dreamix.eu/blog/java/splitting-string-in-java-examples-and-tips) +- [Learn from Java Champion Gerrit Grunwald: JavaFx – not dead yet](https://dreamix.eu/blog/java/learn-from-java-champion-gerrit-grunwald-javafx-not-dead-yet) + + + ### _Plumbr posts_ -- [Plumbr has been acquired by Splunk](https://plumbr.io/blog/plumbr-blog/acquired-by-splunk) -- [Using Plumbr with OpenTelemetry NodeJS agent](https://plumbr.io/blog/plumbr-blog/using-plumbr-with-opentelemetry-nodejs-agent) -- [Extending Plumbr RUM with Web Vitals metrics](https://plumbr.io/blog/performance-blog/extending-plumbr-rum-with-web-vitals-metrics) -- [Send alerts from Plumbr to Microsoft Teams](https://plumbr.io/blog/product-updates/send-alerts-from-plumbr-to-microsoft-teams) -- [Universal agent expands bottleneck coverage with slow http requests](https://plumbr.io/blog/product-updates/universal-agent-bottleneck-slow-http-requests) -- [Achieve the three pillars of observability – link Plumbr distributed traces with logs](https://plumbr.io/blog/java/linking-plumbr-distributed-traces-with-logs) -- [Transaction snapshots become request processing](https://plumbr.io/blog/product-updates/transaction-snapshots-become-request-processing) -- [Plumbr now monitors Python applications and APIs](https://plumbr.io/blog/product-updates/plumbr-now-monitors-python-applications-and-apis) -- [Distributed tracing in practice](https://plumbr.io/blog/tracing/distributed-tracing-in-practice) -- [Plumbr now supports application versioning](https://plumbr.io/blog/product-updates/plumbr-now-supports-application-versioning) + +- [Plumbr has been acquired by Splunk](https://plumbr.io/blog/plumbr-blog/acquired-by-splunk) +- [Using Plumbr with OpenTelemetry NodeJS agent](https://plumbr.io/blog/plumbr-blog/using-plumbr-with-opentelemetry-nodejs-agent) +- [Extending Plumbr RUM with Web Vitals metrics](https://plumbr.io/blog/performance-blog/extending-plumbr-rum-with-web-vitals-metrics) +- [Send alerts from Plumbr to Microsoft Teams](https://plumbr.io/blog/product-updates/send-alerts-from-plumbr-to-microsoft-teams) +- [Universal agent expands bottleneck coverage with slow http requests](https://plumbr.io/blog/product-updates/universal-agent-bottleneck-slow-http-requests) +- [Achieve the three pillars of observability – link Plumbr distributed traces with logs](https://plumbr.io/blog/java/linking-plumbr-distributed-traces-with-logs) +- [Transaction snapshots become request processing](https://plumbr.io/blog/product-updates/transaction-snapshots-become-request-processing) +- [Plumbr now monitors Python applications and APIs](https://plumbr.io/blog/product-updates/plumbr-now-monitors-python-applications-and-apis) +- [Distributed tracing in practice](https://plumbr.io/blog/tracing/distributed-tracing-in-practice) +- [Plumbr now supports application versioning](https://plumbr.io/blog/product-updates/plumbr-now-supports-application-versioning) + + + ### _Thorben Janssen posts_ -- [Coffee with Thorben 2020-02-05 – Auditing with Hibernate Envers](https://thorben-janssen.com/coffee-with-thorben-hibernate-envers/) -- [JDBC Connection and Dialect Configuration in Hibernate](https://thorben-janssen.com/jdbc-connection-and-dialect-in-hibernate/) -- [Coffee with Thorben 2020-01-29 – Soft Deletes & Bi-directional Association](https://thorben-janssen.com/coffee-with-thorben-soft-deletes/) -- [Coffee with Thorben 2020-01-22 – JSON Mappings & Polymorphic Associations](https://thorben-janssen.com/coffee-with-thorben-2020-01-22-json-mapp/) -- [Hibernate Reactive – Getting Started Guide](https://thorben-janssen.com/hibernate-reactive-getting-started-guide/) -- [Coffee with Thorben 2020-01-15 – Association Pitfalls & Enum Mappings](https://thorben-janssen.com/coffee-with-thorben-2020-01-08/) -- [Implementing Batch Jobs with Hibernate](https://thorben-janssen.com/implementing-batch-jobs-with-hibernate/) -- [Coffee with Thorben 2020-01-08 – DB Migration & Criteria SubQuery](https://thorben-janssen.com/coffee-with-thorben-2020-01-08-db-migration-criteria-subquery/) -- [Welcome to 2021](https://thorben-janssen.com/welcome-to-2021/) -- [How to use CockroachDB with Hibernate](https://thorben-janssen.com/hibernate-cockroachdb/) + +- [MutationQuery and SelectionQuery in Hibernate 6](https://thorben-janssen.com/mutationquery-and-selectionquery/) +- [Native Queries – How to call native SQL queries with JPA & Hibernate](https://thorben-janssen.com/jpa-native-queries/) +- [Hibernate 6 EmbeddableInstantiator – Instantiate embeddables your way](https://thorben-janssen.com/hibernate-embeddableinstantiator/) +- [Logging Guide for Hibernate 4, 5 & 6 – Use the right config for dev and prod](https://thorben-janssen.com/hibernate-logging-guide/) +- [Dynamic Inserts and Updates with Spring Data JPA](https://thorben-janssen.com/dynamic-inserts-and-updates-with-spring-data-jpa/) +- [FlushMode in JPA and Hibernate – What it is and how to change it](https://thorben-janssen.com/flushmode-in-jpa-and-hibernate/) +- [Hibernate Performance Tuning Tips – 2022 Edition](https://thorben-janssen.com/tips-to-boost-your-hibernate-performance/) +- [The Best Spring Data JPA Logging Configuration in Spring Boot](https://thorben-janssen.com/spring-data-jpa-logging/) +- [Naming Strategies in Hibernate 5](https://thorben-janssen.com/naming-strategies-in-hibernate-5/) +- [The Best Mapping for Shared Technical Attributes With Hibernate](https://thorben-janssen.com/mapping-shared-technical-attributes/) + + + ### _Redhat posts_ -- [Using Kubernetes ConfigMaps to define your Quarkus application’s properties](https://developers.redhat.com/blog/2020/01/23/using-kubernetes-configmaps-to-define-your-quarkus-applications-properties/) -- [CodeReady Workspaces devfile, demystified](https://developers.redhat.com/blog/2019/12/09/codeready-workspaces-devfile-demystified/) -- [Decoupling microservices with Apache Camel and Debezium](https://developers.redhat.com/blog/2019/11/19/decoupling-microservices-with-apache-camel-and-debezium/) -- [How Quarkus brings imperative and reactive programming together](https://developers.redhat.com/blog/2019/11/18/how-quarkus-brings-imperative-and-reactive-programming-together/) -- [Open Liberty Java runtime now available to Red Hat Runtimes subscribers](https://developers.redhat.com/blog/2019/11/14/open-liberty-java-runtime-now-available-to-red-hat-runtimes-subscribers/) -- [New features in Red Hat CodeReady Studio 12.13.0.GA and JBoss Tools 4.13.0.Final for Eclipse 2019-09](https://developers.redhat.com/blog/2019/11/11/new-features-in-red-hat-codeready-studio-12-13-0-ga-and-jboss-tools-4-13-0-final-for-eclipse-2019-09/) -- [Quarkus: Modernize “helloworld” JBoss EAP quickstart, Part 1](https://developers.redhat.com/blog/2019/11/07/quarkus-modernize-helloworld-jboss-eap-quickstart-part-1/) -- [Managing JBoss EAP/Wildfly using Jcliff](https://developers.redhat.com/blog/2019/11/06/managing-jboss-eap-wildfly-using-jcliff/) -- [Bring joy to development with Quarkus, the cloud-native Java framework](https://developers.redhat.com/blog/2019/10/24/bring-joy-to-development-with-quarkus-the-cloud-native-java-framework/) -- [What’s new in Red Hat Dependency Analytics](https://developers.redhat.com/blog/2019/10/15/whats-new-in-red-hat-dependency-analytics/) + +- [Using Kubernetes ConfigMaps to define your Quarkus application’s properties](https://developers.redhat.com/blog/2020/01/23/using-kubernetes-configmaps-to-define-your-quarkus-applications-properties/) +- [CodeReady Workspaces devfile, demystified](https://developers.redhat.com/blog/2019/12/09/codeready-workspaces-devfile-demystified/) +- [Decoupling microservices with Apache Camel and Debezium](https://developers.redhat.com/blog/2019/11/19/decoupling-microservices-with-apache-camel-and-debezium/) +- [How Quarkus brings imperative and reactive programming together](https://developers.redhat.com/blog/2019/11/18/how-quarkus-brings-imperative-and-reactive-programming-together/) +- [Open Liberty Java runtime now available to Red Hat Runtimes subscribers](https://developers.redhat.com/blog/2019/11/14/open-liberty-java-runtime-now-available-to-red-hat-runtimes-subscribers/) +- [New features in Red Hat CodeReady Studio 12.13.0.GA and JBoss Tools 4.13.0.Final for Eclipse 2019-09](https://developers.redhat.com/blog/2019/11/11/new-features-in-red-hat-codeready-studio-12-13-0-ga-and-jboss-tools-4-13-0-final-for-eclipse-2019-09/) +- [Quarkus: Modernize “helloworld” JBoss EAP quickstart, Part 1](https://developers.redhat.com/blog/2019/11/07/quarkus-modernize-helloworld-jboss-eap-quickstart-part-1/) +- [Managing JBoss EAP/Wildfly using Jcliff](https://developers.redhat.com/blog/2019/11/06/managing-jboss-eap-wildfly-using-jcliff/) +- [Bring joy to development with Quarkus, the cloud-native Java framework](https://developers.redhat.com/blog/2019/10/24/bring-joy-to-development-with-quarkus-the-cloud-native-java-framework/) +- [What’s new in Red Hat Dependency Analytics](https://developers.redhat.com/blog/2019/10/15/whats-new-in-red-hat-dependency-analytics/) + + + ### _JavaCodeGeeks posts_ -- [[MEGA DEAL] The All-In-One Developer & Project Manager Exam Certification Prep Bundle (97% off)](https://www.javacodegeeks.com/2021/02/mega-deal-the-all-in-one-developer-project-manager-exam-certification-prep-bundle-97-off.html) -- [Ultimate Guide to Apply Field Testing for Mobile Application](https://www.javacodegeeks.com/2021/02/ultimate-guide-to-apply-field-testing-for-mobile-application.html) -- [Simulators vs Emulators vs Real Devices | Mobile Testing Differences](https://www.javacodegeeks.com/2021/02/simulators-vs-emulators-vs-real-devices-mobile-testing-differences.html) -- [Java Fibonacci Series Recursive Optimized using Dynamic Programming](https://www.javacodegeeks.com/2021/02/java-fibonacci-series-recursive-optimized-using-dynamic-programming.html) -- [Kotlin – Convert List to Map Examples](https://www.javacodegeeks.com/2021/02/kotlin-convert-list-to-map-examples.html) -- [Java TreeMap Vs HashMap With Examples](https://www.javacodegeeks.com/2021/02/java-treemap-vs-hashmap-with-examples.html) -- [Words I avoid using: should, empower, commitment](https://www.javacodegeeks.com/2021/02/words-i-avoid-using-should-empower-commitment.html) -- [Code a Java Game with (almost) Zero Coding Skills](https://www.javacodegeeks.com/2021/02/code-a-java-game-with-almost-zero-coding-skills.html) -- [JEP-396 and You: strong encapsulation of the JDK internals is the default](https://www.javacodegeeks.com/2021/02/jep-396-and-you-strong-encapsulation-of-the-jdk-internals-is-the-default.html) -- [How To Find Good Java Developers For an Enterprise Project](https://www.javacodegeeks.com/2021/02/how-to-find-good-java-developers-for-an-enterprise-project.html) + +- [Json Patch and Json Merge Patch in Java](https://www.javacodegeeks.com/2021/05/json-patch-and-json-merge-patch-in-java.html) +- [Making the Case for Digital Renovation](https://www.javacodegeeks.com/2021/05/making-the-case-for-digital-renovation.html) +- [Retention period and issue with Kafka data not getting deleted](https://www.javacodegeeks.com/2021/05/retention-period-and-issue-with-kafka-data-not-getting-deleted.html) +- [Kafka Record Patterns for Data Replication](https://www.javacodegeeks.com/2021/05/kafka-record-patterns-for-data-replication.html) +- [\[MEGA DEAL\] The 2021 Java Bootcamp Bundle(96% off)](https://www.javacodegeeks.com/2021/05/mega-deal-the-2021-java-bootcamp-bundle96-off.html) +- [Supporting bulk operations in REST APIs](https://www.javacodegeeks.com/2021/05/supporting-bulk-operations-in-rest-apis.html) +- [Handling Actions Class in Selenium and its usage](https://www.javacodegeeks.com/2021/05/handling-actions-class-in-selenium-and-its-usage.html) +- [Store health and safety – Example health and safety architecture](https://www.javacodegeeks.com/2021/05/store-health-and-safety-example-health-and-safety-architecture.html) +- [Developers Are Obsessed With Their Text Editors](https://www.javacodegeeks.com/2021/05/developers-are-obsessed-with-their-text-editors.html) +- [Understanding Istio Telemetry v2](https://www.javacodegeeks.com/2021/05/understanding-istio-telemetry-v2.html) + + + ### _DevCases posts_ -- [Spring JavaMelody Tutorial](https://devcases.com/java/spring-javamelody-tutorial/?utm_source=rss&utm_medium=rss&utm_campaign=spring-javamelody-tutorial) -- [Spring Boot JavaMelody Tutorial](https://devcases.com/java/spring-boot-javamelody-tutorial/?utm_source=rss&utm_medium=rss&utm_campaign=spring-boot-javamelody-tutorial) -- [How to find file in directory](https://devcases.com/java/how-to-find-file-in-directory/?utm_source=rss&utm_medium=rss&utm_campaign=how-to-find-file-in-directory) -- [How to list all files in the directory](https://devcases.com/java/how-to-list-all-files-in-the-directory/?utm_source=rss&utm_medium=rss&utm_campaign=how-to-list-all-files-in-the-directory) -- [How to convert Iterable to Collection](https://devcases.com/java/how-to-convert-iterable-to-collection/?utm_source=rss&utm_medium=rss&utm_campaign=how-to-convert-iterable-to-collection) -- [Spring Boot CRUD Tutorial with embedded H2 and Freemarker](https://devcases.com/java/spring-boot-crud-tutorial-with-embedded-h2-and-freemarker/?utm_source=rss&utm_medium=rss&utm_campaign=spring-boot-crud-tutorial-with-embedded-h2-and-freemarker) -- [Spring Boot CRUD Tutorial with embedded H2 and JSP](https://devcases.com/java/spring-boot-embedded-h2-jsp-crud-tutorial/?utm_source=rss&utm_medium=rss&utm_campaign=spring-boot-embedded-h2-jsp-crud-tutorial) -- [Spring Boot Hello World – Freemarker tutorial](https://devcases.com/java/spring-boot-hello-world-freemarker-tutorial/?utm_source=rss&utm_medium=rss&utm_campaign=spring-boot-hello-world-freemarker-tutorial) -- [Spring Boot Hello World – JSP tutorial](https://devcases.com/java/spring-boot-hello-world-jsp/?utm_source=rss&utm_medium=rss&utm_campaign=spring-boot-hello-world-jsp) -- [How to debug maven tests](https://devcases.com/java/how-to-debug-maven-tests/?utm_source=rss&utm_medium=rss&utm_campaign=how-to-debug-maven-tests) + +- [Spring JavaMelody Tutorial](https://devcases.com/java/spring-javamelody-tutorial/?utm_source=rss&utm_medium=rss&utm_campaign=spring-javamelody-tutorial) +- [Spring Boot JavaMelody Tutorial](https://devcases.com/java/spring-boot-javamelody-tutorial/?utm_source=rss&utm_medium=rss&utm_campaign=spring-boot-javamelody-tutorial) +- [How to find file in directory](https://devcases.com/java/how-to-find-file-in-directory/?utm_source=rss&utm_medium=rss&utm_campaign=how-to-find-file-in-directory) +- [How to list all files in the directory](https://devcases.com/java/how-to-list-all-files-in-the-directory/?utm_source=rss&utm_medium=rss&utm_campaign=how-to-list-all-files-in-the-directory) +- [How to convert Iterable to Collection](https://devcases.com/java/how-to-convert-iterable-to-collection/?utm_source=rss&utm_medium=rss&utm_campaign=how-to-convert-iterable-to-collection) +- [Spring Boot CRUD Tutorial with embedded H2 and Freemarker](https://devcases.com/java/spring-boot-crud-tutorial-with-embedded-h2-and-freemarker/?utm_source=rss&utm_medium=rss&utm_campaign=spring-boot-crud-tutorial-with-embedded-h2-and-freemarker) +- [Spring Boot CRUD Tutorial with embedded H2 and JSP](https://devcases.com/java/spring-boot-embedded-h2-jsp-crud-tutorial/?utm_source=rss&utm_medium=rss&utm_campaign=spring-boot-embedded-h2-jsp-crud-tutorial) +- [Spring Boot Hello World – Freemarker tutorial](https://devcases.com/java/spring-boot-hello-world-freemarker-tutorial/?utm_source=rss&utm_medium=rss&utm_campaign=spring-boot-hello-world-freemarker-tutorial) +- [Spring Boot Hello World – JSP tutorial](https://devcases.com/java/spring-boot-hello-world-jsp/?utm_source=rss&utm_medium=rss&utm_campaign=spring-boot-hello-world-jsp) +- [How to debug maven tests](https://devcases.com/java/how-to-debug-maven-tests/?utm_source=rss&utm_medium=rss&utm_campaign=how-to-debug-maven-tests) + - [repo]: https://github.com/AlexRogalskiy/java-patterns - [tags]: https://github.com/AlexRogalskiy/java-patterns/tags - [issues]: https://github.com/AlexRogalskiy/java-patterns/issues - [pulls]: https://github.com/AlexRogalskiy/java-patterns/pulls - [wiki]: https://github.com/AlexRogalskiy/java-patterns/wiki - [stars]: https://github.com/AlexRogalskiy/java-patterns/stargazers - [contributors]: https://github.com/AlexRogalskiy/java-patterns/graphs/contributors - [docs]: https://alexander-rogalsky.gitbook.io/java-patterns \ No newline at end of file + + +--- + +[![forthebadge](https://img.shields.io/badge/made%20with-%20markdown-C1282D.svg?logo=markdown&style=for-the-badge)](https://www.markdownguide.org/) +[![forthebadge](https://img.shields.io/badge/powered%20by-%20gitbook-7116FB.svg?logo=gitbook&style=for-the-badge)](https://www.gitbook.com/) +[![forthebadge](https://img.shields.io/badge/build%20with-%20%E2%9D%A4-B6FF9B.svg?logo=heart&style=for-the-badge)](https://forthebadge.com/) + +[repo]: https://github.com/AlexRogalskiy/java-patterns +[tags]: https://github.com/AlexRogalskiy/java-patterns/tags +[issues]: https://github.com/AlexRogalskiy/java-patterns/issues +[pulls]: https://github.com/AlexRogalskiy/java-patterns/pulls +[wiki]: https://github.com/AlexRogalskiy/java-patterns/wiki +[stars]: https://github.com/AlexRogalskiy/java-patterns/stargazers +[stars_chart]: https://starchart.cc/AlexRogalskiy/java-patterns +[stats_chart]: https://cauldron.io/project/5121 +[stars_history_chart]: https://star-history.com/#AlexRogalskiy/java-patterns&Date +[contributors]: https://github.com/AlexRogalskiy/java-patterns/graphs/contributors +[docs]: https://alexander-rogalsky.gitbook.io/java-patterns diff --git a/SECURITY.md b/SECURITY.md new file mode 100644 index 00000000000..bdc27a1ca97 --- /dev/null +++ b/SECURITY.md @@ -0,0 +1,20 @@ +# Security Policy + +## Supported Versions + +Use this section to tell people about which versions of your project are currently being supported with +security updates. + +| Version | Supported | +| ------- | ------------------ | +| 5.1.x | :white_check_mark: | +| 5.0.x | :x: | +| 4.0.x | :white_check_mark: | +| < 4.0 | :x: | + +## Reporting a Vulnerability + +Use this section to tell people how to report a vulnerability. + +Tell them where to go, how often they can expect to get an update on a reported vulnerability, what to expect +if the vulnerability is accepted or declined, etc. diff --git a/Tiltfile b/Tiltfile new file mode 100644 index 00000000000..66a9d812c37 --- /dev/null +++ b/Tiltfile @@ -0,0 +1,41 @@ +# -*- mode: Python -* + +# For more on Extensions, see: https://docs.tilt.dev/extensions.html +load('ext://restart_process', 'docker_build_with_restart') +load('ext://conftest', 'conftest') +load('ext://list_port_forwards', 'display_port_forwards') +load('ext://print_tiltfile_dir', 'print_tiltfile_dir') +load('ext://min_tilt_version', 'min_tilt_version') +min_tilt_version('0.13.0') + +load('ext://tilt_inspector', 'tilt_inspector') +tilt_inspector() + +#load('ext://min_k8s_version', 'min_k8s_version') +#min_k8s_version('1.21.1') + +load('ext://namespace', 'namespace_create', 'namespace_inject') +namespace_create('webapp') + +conftest(path='k8s/backend/deployment.yaml', namespace='main') +# k8s_yaml('k8s/backend/deployment.yaml') +k8s_yaml(namespace_inject(read_file('k8s/backend/deployment.yaml'), 'webapp'), allow_duplicates=False) +k8s_resource('backend-java-patterns-v1', port_forwards=8000, resource_deps=['deploy', 'conftest']) + +# Records the current time, then kicks off a server update. +# Normally, you would let Tilt do deploys automatically, but this +# shows you how to set up a custom workflow that measures it. +local_resource( + 'deploy', + 'python3 ./record-start-time.py' +) + +# Add a live_update rule to our docker_build +congrats = "🎉 Congrats, you ran a live_update! 🎉" +docker_build('styled-java-patterns', '.', build_args={'IMAGE_SOURCE': 'node', 'IMAGE_TAG': '12-buster'}, + dockerfile='./distribution/docker-images/dev.Dockerfile', + live_update=[ + sync('.', '/usr/src/app'), + run('python3 ./record-start-time.py'), + run('cd /usr/src/app/docs && pip3.8 install -r requirements.txt --quiet', trigger='./requirements.txt') +]) diff --git a/VERSION b/VERSION new file mode 100644 index 00000000000..15fa5a80681 --- /dev/null +++ b/VERSION @@ -0,0 +1 @@ +5859800a2ed547c8641b3326e88a458320199aea diff --git a/adrs/0001-record-architecture-decisions.md b/adrs/0001-record-architecture-decisions.md new file mode 100644 index 00000000000..4ddbf327992 --- /dev/null +++ b/adrs/0001-record-architecture-decisions.md @@ -0,0 +1,21 @@ +# 1. Record architecture decisions + +Date: 2019-10-20 + +## Status + +Accepted + +## Context + +We need to record the architectural decisions made on this project. + +## Decision + +We will use Architecture Decision Records, as +[described by Michael Nygard](http://thinkrelevance.com/blog/2011/11/15/documenting-architecture-decisions). + +## Consequences + +See Michael Nygard's article, linked above. For a lightweight ADR toolset, see Nat Pryce's +[adr-tools](https://github.com/npryce/adr-tools). diff --git a/adrs/0002-no-integration-test.md b/adrs/0002-no-integration-test.md new file mode 100644 index 00000000000..6ff4876552a --- /dev/null +++ b/adrs/0002-no-integration-test.md @@ -0,0 +1,44 @@ +# 2. No integration test + +Date: 2019-10-20 + +## Status + +Accepted + +## Context + +VS Code has documented [how to test an extension][testing-extension] in integration with VS Code API. + +> These tests will run inside a special instance of VS Code named the `Extension Development Host`, and have +> full access to the VS Code API. + +But VS Code test runner is adapted to be used with [mocha][mocha] or [Jasmine][jasmine]. + +For unit tests, we want to use [Jest][jest]. But Jest and mocha have conflicting types, preventing TS to +build. A solution would have been to create a custom test runner for VS Code API, that would run integration +tests with Jest. But we didn't managed to create one that works. + +That's partly because Jest doesn't have an official way to run tests programatically. We weren't able to make +VS Code test runner work with Jest `runCLI()` (async) method. + +Also, integration tests were flacky when I tried to make them work. I don't want to waste time hacking my way +around the current solution which doesn't seem mature enough to me. + +## Decision + +We won't do integration tests. We'll rely on unit tests (e.g. state-based tests, collaboration tests and +contract tests). + +## Consequences + +We can use [Jest][jest] to write (unit) tests. + +Tests will run fast. They will be easy to write and maintain. + +We won't be able to automatically test the extension with the actual VS Code API. + +[testing-extension]: https://code.visualstudio.com/api/working-with-extensions/testing-extension +[mocha]: https://mochajs.org/ +[jasmine]: https://jasmine.github.io/ +[jest]: https://jestjs.io/ diff --git a/appveyor.yml b/appveyor.yml new file mode 100644 index 00000000000..66f71b623a8 --- /dev/null +++ b/appveyor.yml @@ -0,0 +1,17 @@ +environment: + matrix: + - nodejs_version: '14' + +install: + - ps: Install-Product node $env:nodejs_version + - npm i -g npm@latest + - npm ci + +build: false + +test_script: + - node --version + - npm --version + - npm run all + +version: '{build}' diff --git a/bs-config.js b/bs-config.js new file mode 100644 index 00000000000..343089d958c --- /dev/null +++ b/bs-config.js @@ -0,0 +1,122 @@ +/* + * Copyright (C) 2022 SensibleMetrics, Inc. (http://sensiblemetrics.io/) + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +'use strict'; + +/* + |-------------------------------------------------------------------------- + | Browser-sync config file + |-------------------------------------------------------------------------- + | + | For up-to-date information about the options: + | http://www.browsersync.io/docs/options/ + | + | There are more options than you see here, these are just the ones that are + | set internally. See the website for more info. + | + | + */ +module.exports = { + ui: { + port: 3001, + }, + files: true, + watchEvents: ['change'], + watch: true, + ignore: [], + single: false, + watchOptions: { + ignoreInitial: true, + }, + server: true, + proxy: false, + port: 3000, + middleware: false, + serveStatic: [], + ghostMode: { + clicks: true, + scroll: true, + location: true, + forms: { + submit: true, + inputs: true, + toggles: true, + }, + }, + logLevel: 'info', + logPrefix: 'Browsersync', + logConnections: false, + logFileChanges: true, + logSnippet: true, + rewriteRules: [], + open: 'local', + browser: 'default', + cors: false, + xip: false, + hostnameSuffix: false, + reloadOnRestart: false, + notify: true, + scrollProportionally: true, + scrollThrottle: 0, + scrollRestoreTechnique: 'window.name', + scrollElements: [], + scrollElementMapping: [], + reloadDelay: 0, + reloadDebounce: 500, + reloadThrottle: 0, + plugins: [], + injectChanges: true, + startPath: null, + minify: true, + host: null, + localOnly: false, + codeSync: true, + timestamps: true, + clientEvents: [ + 'scroll', + 'scroll:element', + 'input:text', + 'input:toggles', + 'form:submit', + 'form:reset', + 'click', + ], + socket: { + socketIoOptions: { + log: false, + }, + socketIoClientConfig: { + reconnectionAttempts: 50, + }, + path: '/browser-sync/socket.io', + clientPath: '/browser-sync', + namespace: '/browser-sync', + clients: { + heartbeatTimeout: 5000, + }, + }, + tagNames: { + less: 'link', + scss: 'link', + css: 'link', + jpg: 'img', + jpeg: 'img', + png: 'img', + svg: 'img', + gif: 'img', + js: 'script', + }, + injectNotification: false, +}; diff --git a/changelog b/changelog new file mode 100644 index 00000000000..ef0ee29b39e --- /dev/null +++ b/changelog @@ -0,0 +1,5180 @@ +Updates on files + +Auto update markdown TOC + +Updates on files + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +GitHub traffic + +Updates on files + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updates on files + +Updates on files + +Updated with the latest blog posts + +Updated with the latest blog posts + +Optimised images with calibre/image-actions +Updates on files + +Updates on files + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +GitHub traffic + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updates on files + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updates on files + +Optimised images with calibre/image-actions +Updates on files + +Updated with the latest blog posts + +GitHub traffic + +Updates on files + + Update @AlexRogalskiy as a contributor + +Updated with the latest blog posts + +Updates on files + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +Optimised images with calibre/image-actions +Updates on files + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +GitHub traffic + +Updated with the latest blog posts + +Updates on files + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updates on files + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updates on files + +Updated with the latest blog posts + +Updated with the latest blog posts + +Optimised images with calibre/image-actions +Updates on files + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +GitHub traffic + +Updated with the latest blog posts + +docs: updates on docs page speed + + Added docs page speed information on news + +Signed-off-by: GitHub Bot + +Updated with the latest blog posts + +Updated with the latest blog posts + +docs: updates on docs page speed + + Added docs page speed information on news + +Signed-off-by: GitHub Bot + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +Optimised images with calibre/image-actions +Updates on files + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +GitHub traffic + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +GitHub traffic + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +GitHub traffic + +Updated with the latest blog posts + +Updates on files + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +Optimised images with calibre/image-actions +Updates on files + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +GitHub traffic + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +GitHub traffic + +Updates on files + +Updated with the latest blog posts + +Updates on files + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +Optimised images with calibre/image-actions +Updates on files + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +GitHub traffic + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +Optimised images with calibre/image-actions +Updates on files + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +GitHub traffic + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +Optimised images with calibre/image-actions +Updates on files + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +GitHub traffic + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +docs: updates on docs page speed + + Added docs page speed information on news + +Signed-off-by: GitHub Bot + +Updated with the latest blog posts + +Updated with the latest blog posts + +docs: updates on docs page speed + + Added docs page speed information on news + +Signed-off-by: GitHub Bot + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +GitHub traffic + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +GitHub traffic + +Updated with the latest blog posts + +Updated with the latest blog posts + +Optimised images with calibre/image-actions +Updates on files + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +GitHub traffic + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +GitHub traffic + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +Optimised images with calibre/image-actions +Updates on files + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +GitHub traffic + +Updates on files + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updates on filez + +initial commit +Updates on sandbox config + +Create /.zappr.yaml +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +Optimised images with calibre/image-actions +Updates on files + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +GitHub traffic + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +GitHub traffic + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +GitHub traffic + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +Optimised images with calibre/image-actions +Updates on files + +Updated with the latest blog posts + +GitHub traffic + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +docs: updates on docs page speed + + Added docs page speed information on news + +Signed-off-by: GitHub Bot + +GitHub traffic + +Updated with the latest blog posts + +docs: updates on docs page speed + + Added docs page speed information on news + +Signed-off-by: GitHub Bot + +Updates on files + +Updates on files + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +docs: updates on docs page speed + + Added docs page speed information on news + +Signed-off-by: GitHub Bot + +Updated with the latest blog posts + +Updated with the latest blog posts + +docs: updates on docs page speed + + Added docs page speed information on news + +Signed-off-by: GitHub Bot + +Updated with the latest blog posts + +Updated with the latest blog posts + +docs: updates on docs page speed + + Added docs page speed information on news + +Signed-off-by: GitHub Bot + +Optimised images with calibre/image-actions +Updates on files + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +docs: updates on docs page speed + + Added docs page speed information on news + +Signed-off-by: GitHub Bot + +Updated with the latest blog posts + +Updated with the latest blog posts + +docs: updates on docs page speed + + Added docs page speed information on news + +Signed-off-by: GitHub Bot + +Updated with the latest blog posts + +docs: updates on docs page speed + + Added docs page speed information on news + +Signed-off-by: GitHub Bot + +GitHub traffic + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +docs: updates on docs page speed + + Added docs page speed information on news + +Signed-off-by: GitHub Bot + +Updated with the latest blog posts + +Updated with the latest blog posts + +docs: updates on docs page speed + + Added docs page speed information on news + +Signed-off-by: GitHub Bot + +Updates on files + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +docs: updates on docs page speed + + Added docs page speed information on news + +Signed-off-by: GitHub Bot + +Updated with the latest blog posts + +Updated with the latest blog posts + +docs: updates on docs page speed + + Added docs page speed information on news + +Signed-off-by: GitHub Bot + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +docs: updates on docs page speed + + Added docs page speed information on news + +Signed-off-by: GitHub Bot + +Optimised images with calibre/image-actions +Updates on files + +Updated with the latest blog posts + +Updated with the latest blog posts + +docs: updates on docs page speed + + Added docs page speed information on news + +Signed-off-by: GitHub Bot + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +docs: updates on docs page speed + + Added docs page speed information on news + +Signed-off-by: GitHub Bot + +GitHub traffic + +Auto update markdown TOC + +Updates on files + +Updates on files + +Updated with the latest blog posts + +docs: updates on docs page speed + + Added docs page speed information on news + +Signed-off-by: GitHub Bot + +Updates on files + +Updates on files + +Updated with the latest blog posts + +Updated with the latest blog posts + +docs: updates on docs page speed + + Added docs page speed information on news + +Signed-off-by: GitHub Bot + +Updates on files + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +docs: updates on docs page speed + + Added docs page speed information on news + +Signed-off-by: GitHub Bot + +Updated with the latest blog posts + +Updated with the latest blog posts + +docs: updates on docs page speed + + Added docs page speed information on news + +Signed-off-by: GitHub Bot + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +docs: updates on docs page speed + + Added docs page speed information on news + +Signed-off-by: GitHub Bot + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +docs: updates on docs page speed + + Added docs page speed information on news + +Signed-off-by: GitHub Bot + +Optimised images with calibre/image-actions +Updates on files + +Updated with the latest blog posts + +docs: updates on docs page speed + + Added docs page speed information on news + +Signed-off-by: GitHub Bot + +GitHub traffic + +Updated with the latest blog posts + +Updated with the latest blog posts + +docs: updates on docs page speed + + Added docs page speed information on news + +Signed-off-by: GitHub Bot + +Updates on files + +Updates on files + +Updated with the latest blog posts + +Updated with the latest blog posts + +docs: updates on docs page speed + + Added docs page speed information on news + +Signed-off-by: GitHub Bot + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +docs: updates on docs page speed + + Added docs page speed information on news + +Signed-off-by: GitHub Bot + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +docs: updates on docs page speed + + Added docs page speed information on news + +Signed-off-by: GitHub Bot + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +docs: updates on docs page speed + + Added docs page speed information on news + +Signed-off-by: GitHub Bot + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +docs: updates on docs page speed + + Added docs page speed information on news + +Signed-off-by: GitHub Bot + +Auto update markdown TOC + +Updates on files + +Updates on files + +Updates on files + +Updates on files + +Updates on files + +Updates on files + +Updates on files + +Updates on files + +Updates on files + +Updates on files + +Updates on files + +Updates on files + +Updates on files + +Updates on files + +Updates on files + +Updates on files + +Updates on files + +Updates on files + +Updates on files + +updates on files + +Updates on files + +Updates on files + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updates on files + +Updates on files + +Added changeset on workflow + +Updates on files + +Added changeset on workflow + +Updates on files + +Added changeset on workflow + +Updates on files + +Updates on files + +Added changeset on workflow + +Updates on files + +Added changeset on workflow + +Optimised images with calibre/image-actions +Updates on files + +Added changeset on workflow + +docs: updates on docs page speed + + Added docs page speed information on news + +Signed-off-by: GitHub Bot + +Auto update markdown TOC + +Updates on files + +GitHub traffic + +Updates on files + +Added changeset on workflow + +Updates on files + +Updates on files + +Added changeset on workflow + +Updated with the latest blog posts + +docs: updates on docs page speed + + Added docs page speed information on news + +Signed-off-by: GitHub Bot + +Updates on files + +Added changeset on workflow + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updates on files + +Updates on files + +docs: updates on docs page speed + + Added docs page speed information on news + +Signed-off-by: GitHub Bot + +Updates on files + +Added changeset on workflow + +Auto update markdown TOC + +Updates on files + +Added changeset on workflow + +Updates on files + +Added changeset on workflow + +Updates on files + +Added changeset on workflow + +Updates on files + +Added changeset on workflow + +Updates on files + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +docs: updates on docs page speed + + Added docs page speed information on news + +Signed-off-by: GitHub Bot + +Updates on files + +Auto update markdown TOC + +Updates on files + +Updates on files + +Added changeset on workflow + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +docs: updates on docs page speed + + Added docs page speed information on news + +Signed-off-by: GitHub Bot + +Auto update markdown TOC + +Updates on files + +Added changeset on workflow + +Updates on files + +Added changeset on workflow + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +docs: updates on docs page speed + + Added docs page speed information on news + +Signed-off-by: GitHub Bot + +Auto update markdown TOC + +Updates on files + +Added changeset on workflow + +Updates on files + +Added changeset on workflow + +Optimised images with calibre/image-actions +Updates on files + +Added changeset on workflow + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +docs: updates on docs page speed + + Added docs page speed information on news + +Signed-off-by: GitHub Bot + +Updated with the latest blog posts + +docs: updates on docs page speed + + Added docs page speed information on news + +Signed-off-by: GitHub Bot + +GitHub traffic + +Updates on files + +Added changeset on workflow + +Updated with the latest blog posts + +Updated with the latest blog posts + +docs: updates on docs page speed + + Added docs page speed information on news + +Signed-off-by: GitHub Bot + +Updated with the latest blog posts + +Updated with the latest blog posts + +docs: updates on docs page speed + + Added docs page speed information on news + +Signed-off-by: GitHub Bot + +Updates on files + +Added changeset on workflow + +Updates on files + +Added changeset on workflow + +Updates on files + +Added changeset on workflow + +Updates on files + +Added changeset on workflow + +Updates on files + +Added changeset on workflow + +Updates on files + +Added changeset on workflow + +Updates on files + +Added changeset on workflow + +Updates on files + +Added changeset on workflow + +Updated with the latest blog posts + +Updated with the latest blog posts + +docs: updates on docs page speed + + Added docs page speed information on news + +Signed-off-by: GitHub Bot + +Updates on files + +Added changeset on workflow + +Updates on files + +Added changeset on workflow + +Updates on files + +Added changeset on workflow + +Updates on files + +Added changeset on workflow + +Updates on files + +Added changeset on workflow + +Updates on files + +Added changeset on workflow + +Updates on files + +Added changeset on okteto + +Updates on files + +Added changeset on workflow + +Updates on files + +Added changeset on workflow + +Updates on okteto + +Updates on files + +Added changeset on workflow + +Updated with the latest blog posts + +docs: updates on docs page speed + + Added docs page speed information on news + +Signed-off-by: GitHub Bot + +Updates on files + +Added changeset on workflow + +Updated with the latest blog posts + +Updated with the latest blog posts + +docs: updates on docs page speed + + Added docs page speed information on news + +Signed-off-by: GitHub Bot + +Updates on files + +Added changest on workflow + +Updates on files + +Added changeset on workflow + +Updated with the latest blog posts + +docs: updates on docs page speed + + Added docs page speed information on news + +Signed-off-by: GitHub Bot + +Optimised images with calibre/image-actions +Updates on files + +Added changset on workflow + +Updated with the latest blog posts + +GitHub traffic + +Updated with the latest blog posts + +docs: updates on docs page speed + + Added docs page speed information on news + +Signed-off-by: GitHub Bot + +Updated with the latest blog posts + +Updated with the latest blog posts + +docs: updates on docs page speed + + Added docs page speed information on news + +Signed-off-by: GitHub Bot + +Updated with the latest blog posts + +Updated with the latest blog posts + +docs: updates on docs page speed + + Added docs page speed information on news + +Signed-off-by: GitHub Bot + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +docs: updates on docs page speed + + Added docs page speed information on news + +Signed-off-by: GitHub Bot + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +docs: updates on docs page speed + + Added docs page speed information on news + +Signed-off-by: GitHub Bot + +Updated with the latest blog posts + +Updated with the latest blog posts + +docs: updates on docs page speed + + Added docs page speed information on news + +Signed-off-by: GitHub Bot + +Updated with the latest blog posts + +docs: updates on docs page speed + + Added docs page speed information on news + +Signed-off-by: GitHub Bot + +GitHub traffic + +Updated with the latest blog posts + +docs: updates on docs page speed + + Added docs page speed information on news + +Signed-off-by: GitHub Bot + +Updated with the latest blog posts + +Updated with the latest blog posts + +docs: updates on docs page speed + + Added docs page speed information on news + +Signed-off-by: GitHub Bot + +Updated with the latest blog posts + +Updated with the latest blog posts + +docs: updates on docs page speed + + Added docs page speed information on news + +Signed-off-by: GitHub Bot + +Updated with the latest blog posts + +docs: updates on docs page speed + + Added docs page speed information on news + +Signed-off-by: GitHub Bot + +Updated with the latest blog posts + +Updated with the latest blog posts + +docs: updates on docs page speed + + Added docs page speed information on news + +Signed-off-by: GitHub Bot + +Updated with the latest blog posts + +docs: updates on docs page speed + + Added docs page speed information on news + +Signed-off-by: GitHub Bot + +Updated with the latest blog posts + +Updated with the latest blog posts + +docs: updates on docs page speed + + Added docs page speed information on news + +Signed-off-by: GitHub Bot + +GitHub traffic + +Updated with the latest blog posts + +docs: updates on docs page speed + + Added docs page speed information on news + +Signed-off-by: GitHub Bot + +Updated with the latest blog posts + +Updated with the latest blog posts + +docs: updates on docs page speed + + Added docs page speed information on news + +Signed-off-by: GitHub Bot + +Updated with the latest blog posts + +Updated with the latest blog posts + +docs: updates on docs page speed + + Added docs page speed information on news + +Signed-off-by: GitHub Bot + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +docs: updates on docs page speed + + Added docs page speed information on news + +Signed-off-by: GitHub Bot + +Added info on workflows + +Updates on github-actions + +Auto update markdown TOC + +Added info on workflows + +Updates on github-actions + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +docs: updates on docs page speed + + Added docs page speed information on news + +Signed-off-by: GitHub Bot + +:arrow_up: Updates @tilt.dev/tilt-inspector to v0.1.8 + +Signed-off-by: Renovate Bot + +:arrow_up: Updates Matticusau/pr-helper action to v1.3.0 + +Signed-off-by: Renovate Bot + +:arrow_up: Updates JamesIves/github-pages-deploy-action action to v4.1.4 + +Signed-off-by: Renovate Bot + +Added info on workflows + +Updates on github-actions + +Auto update markdown TOC + +Added info on workflows + +Updates on github-actions + +Optimised images with calibre/image-actions +Added info on workflows + +Updates on github-actions + +Auto update markdown TOC + +Added info on workflows + +Updates on github-actions + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +docs: updates on docs page speed + + Added docs page speed information on news + +Signed-off-by: GitHub Bot + +Auto update markdown TOC + +Added info on workflows + +Updates on github-actions + +Auto update markdown TOC + +Added info on workflows + +Updates on github-actions + +Added info on workflows + +Updates on github-actions + +Added info on workflows + +Updates on github-actions + +Auto update markdown TOC + +Added info on workflows + +Updates on github-actions + +Updated with the latest blog posts + +docs: updates on docs page speed + + Added docs page speed information on news + +Signed-off-by: GitHub Bot + +GitHub traffic + +Updated with the latest blog posts + +docs: updates on docs page speed + + Added docs page speed information on news + +Signed-off-by: GitHub Bot + +Auto update markdown TOC + +Added info on workflows + +Updates on github-actions + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +docs: updates on docs page speed + + Added docs page speed information on news + +Signed-off-by: GitHub Bot + +Added info on workflows + +Updates on github-actions + +Auto update markdown TOC + +Added info on workflows + +Updates on github-actions + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +docs: updates on docs page speed + + Added docs page speed information on news + +Signed-off-by: GitHub Bot + +Added info on workflows + +Updates on github-actions + +Auto update markdown TOC + +Added info on workflows + +Updates on github-actions + +Added info on workflows + +Updates on github-actions + +Auto update markdown TOC + +Added info on workflows + +Updates on github-actions + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +docs: updates on docs page speed + + Added docs page speed information on news + +Signed-off-by: GitHub Bot + +Auto update markdown TOC + +Added info on workflows + +Updates on github-actions + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +docs: updates on docs page speed + + Added docs page speed information on news + +Signed-off-by: GitHub Bot + +Added info on workflows + +Updates on github-actions + +Auto update markdown TOC + +Added info on workflows + +Updates on github-actions + +Optimised images with calibre/image-actions +Added info on workflows + +Updates on github-actions + +Auto update markdown TOC + +Added info on workflows + +Updates on github-actions + +Updated with the latest blog posts + +docs: updates on docs page speed + + Added docs page speed information on news + +Signed-off-by: GitHub Bot + +Updated with the latest blog posts + +docs: updates on docs page speed + + Added docs page speed information on news + +Signed-off-by: GitHub Bot + +GitHub traffic + +Updated with the latest blog posts + +docs: updates on docs page speed + + Added docs page speed information on news + +Signed-off-by: GitHub Bot + +Optimised images with calibre/image-actions +Added info on workflows + +Updates on github-actions + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +docs: updates on docs page speed + + Added docs page speed information on news + +Signed-off-by: GitHub Bot + +Auto update markdown TOC + +Added info on workflows + +Updates on github-actions + +Updated with the latest blog posts + +Updated with the latest blog posts + +docs: updates on docs page speed + + Added docs page speed information on news + +Signed-off-by: GitHub Bot + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +docs: updates on docs page speed + + Added docs page speed information on news + +Signed-off-by: GitHub Bot + +Updated with the latest blog posts + +Updated with the latest blog posts + +docs: updates on docs page speed + + Added docs page speed information on news + +Signed-off-by: GitHub Bot + +Updated with the latest blog posts + +docs: updates on docs page speed + + Added docs page speed information on news + +Signed-off-by: GitHub Bot + +GitHub traffic + +Updated with the latest blog posts + +docs: updates on docs page speed + + Added docs page speed information on news + +Signed-off-by: GitHub Bot + +Added info on workflows + +Updates on github-actions + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +docs: updates on docs page speed + + Added docs page speed information on news + +Signed-off-by: GitHub Bot + +Auto update markdown TOC + +Added info on workflows + +Updates on github-actions + +Updated with the latest blog posts + +Updated with the latest blog posts + +docs: updates on docs page speed + + Added docs page speed information on news + +Signed-off-by: GitHub Bot + +Auto update markdown TOC + +Added info on workflows + +Updates on github-actions + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +docs: updates on docs page speed + + Added docs page speed information on news + +Signed-off-by: GitHub Bot + +Added info on workflows + +Updates on github-actions + +Added info on workflows + +Updates on github-actions + +Auto update markdown TOC + +Added info on workflows + +Updates on github-actions + +Optimised images with calibre/image-actions +Added info on workflows + +Updates on github-actions + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +docs: updates on docs page speed + + Added docs page speed information on news + +Signed-off-by: GitHub Bot + +Auto update markdown TOC + +Added info on workflows + +Updates on github-actions + +Added info on workflows + +Updates on github-actions + +Updated with the latest blog posts + +docs: updates on docs page speed + + Added docs page speed information on news + +Signed-off-by: GitHub Bot + +Updated with the latest blog posts + +Updated with the latest blog posts + +docs: updates on docs page speed + + Added docs page speed information on news + +Signed-off-by: GitHub Bot + +GitHub traffic + +Updated with the latest blog posts + +docs: updates on docs page speed + + Added docs page speed information on news + +Signed-off-by: GitHub Bot + +Updated with the latest blog posts + +Updated with the latest blog posts + +docs: updates on docs page speed + + Added docs page speed information on news + +Signed-off-by: GitHub Bot + +Updated with the latest blog posts + +Updated with the latest blog posts + +docs: updates on docs page speed + + Added docs page speed information on news + +Signed-off-by: GitHub Bot + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +docs: updates on docs page speed + + Added docs page speed information on news + +Signed-off-by: GitHub Bot + +Optimised images with calibre/image-actions +Added info on workflows + +Updates on github-actions + +Auto update markdown TOC + +Added info on workflows + +Updates on github-actions + +Updated with the latest blog posts + +Updated with the latest blog posts + +docs: updates on docs page speed + + Added docs page speed information on news + +Signed-off-by: GitHub Bot + +Updated with the latest blog posts + +docs: updates on docs page speed + + Added docs page speed information on news + +Signed-off-by: GitHub Bot + +Updated with the latest blog posts + +docs: updates on docs page speed + + Added docs page speed information on news + +Signed-off-by: GitHub Bot + +GitHub traffic + +Updated with the latest blog posts + +docs: updates on docs page speed + + Added docs page speed information on news + +Signed-off-by: GitHub Bot + +Updated with the latest blog posts + +docs: updates on docs page speed + + Added docs page speed information on news + +Signed-off-by: GitHub Bot + +Updated with the latest blog posts + +docs: updates on docs page speed + + Added docs page speed information on news + +Signed-off-by: GitHub Bot + +Updated with the latest blog posts + +Updated with the latest blog posts + +docs: updates on docs page speed + + Added docs page speed information on news + +Signed-off-by: GitHub Bot + +Updated with the latest blog posts + +Updated with the latest blog posts + +docs: updates on docs page speed + + Added docs page speed information on news + +Signed-off-by: GitHub Bot + +Updated with the latest blog posts + +docs: updates on docs page speed + + Added docs page speed information on news + +Signed-off-by: GitHub Bot + +Auto update markdown TOC + +Added info on workflows + +Updates on github-actions + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +docs: updates on docs page speed + + Added docs page speed information on news + +Signed-off-by: GitHub Bot + +GitHub traffic + +Optimised images with calibre/image-actions +Added info on workflows + +Updates on github-actions + +Auto update markdown TOC + +Added info on workflows + +Updates on github-actions + +Updated with the latest blog posts + +docs: updates on docs page speed + + Added docs page speed information on news + +Signed-off-by: GitHub Bot + +Auto update markdown TOC + +Added info on workflows + +Updates on github-actions + +GitHub traffic + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +docs: updates on docs page speed + + Added docs page speed information on news + +Signed-off-by: GitHub Bot + +Added info on workflows + +Updates on github-actions + +Auto update markdown TOC + +Added info on workflows + +Updates on github-actions + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +docs: updates on docs page speed + + Added docs page speed information on news + +Signed-off-by: GitHub Bot + +Added info on workflows + +Updates on github-actions + +Added info on workflows + +Updates on github-actions + +Auto update markdown TOC + +Added info on workflows + +Updates on github-actions + +Updated with the latest blog posts + +Updated with the latest blog posts + +docs: updates on docs page speed + + Added docs page speed information on news + +Signed-off-by: GitHub Bot + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +docs: updates on docs page speed + + Added docs page speed information on news + +Signed-off-by: GitHub Bot + +Updated with the latest blog posts + +docs: updates on docs page speed + + Added docs page speed information on news + +Signed-off-by: GitHub Bot + +Updated with the latest blog posts + +docs: updates on docs page speed + + Added docs page speed information on news + +Signed-off-by: GitHub Bot + +Updated with the latest blog posts + +docs: updates on docs page speed + + Added docs page speed information on news + +Signed-off-by: GitHub Bot + +Updated with the latest blog posts + +docs: updates on docs page speed + + Added docs page speed information on news + +Signed-off-by: GitHub Bot + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +docs: updates on docs page speed + + Added docs page speed information on news + +Signed-off-by: GitHub Bot + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +docs: updates on docs page speed + + Added docs page speed information on news + +Signed-off-by: GitHub Bot + +Auto update markdown TOC + +Added info on workflows + +Updates on github-actions + +Updated with the latest blog posts + +Updated with the latest blog posts + +docs: updates on docs page speed + + Added docs page speed information on news + +Signed-off-by: GitHub Bot + +Updated with the latest blog posts + +docs: updates on docs page speed + + Added docs page speed information on news + +Signed-off-by: GitHub Bot + +Updated with the latest blog posts + +docs: updates on docs page speed + + Added docs page speed information on news + +Signed-off-by: GitHub Bot + +Updated with the latest blog posts + +Updated with the latest blog posts + +docs: updates on docs page speed + + Added docs page speed information on news + +Signed-off-by: GitHub Bot + +Updated with the latest blog posts + +docs: updates on docs page speed + + Added docs page speed information on news + +Signed-off-by: GitHub Bot + +Updated with the latest blog posts + +Updated with the latest blog posts + +docs: updates on docs page speed + + Added docs page speed information on news + +Signed-off-by: GitHub Bot + +Updated with the latest blog posts + +Updated with the latest blog posts + +docs: updates on docs page speed + + Added docs page speed information on news + +Signed-off-by: GitHub Bot + +Updated with the latest blog posts + +Updated with the latest blog posts + +docs: updates on docs page speed + + Added docs page speed information on news + +Signed-off-by: GitHub Bot + +Updated with the latest blog posts + +Updated with the latest blog posts + +docs: updates on docs page speed + + Added docs page speed information on news + +Signed-off-by: GitHub Bot + +Updated with the latest blog posts + +docs: updates on docs page speed + + Added docs page speed information on news + +Signed-off-by: GitHub Bot + +Updated with the latest blog posts + +docs: updates on docs page speed + + Added docs page speed information on news + +Signed-off-by: GitHub Bot + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +docs: updates on docs page speed + + Added docs page speed information on news + +Signed-off-by: GitHub Bot + +Updated with the latest blog posts + +docs: updates on docs page speed + + Added docs page speed information on news + +Signed-off-by: GitHub Bot + +Updated with the latest blog posts + +docs: updates on docs page speed + + Added docs page speed information on news + +Signed-off-by: GitHub Bot + +Updated with the latest blog posts + +Updated with the latest blog posts + +docs: updates on docs page speed + + Added docs page speed information on news + +Signed-off-by: GitHub Bot + +Updated with the latest blog posts + +docs: updates on docs page speed + + Added docs page speed information on news + +Signed-off-by: GitHub Bot + +Updated with the latest blog posts + +docs: updates on docs page speed + + Added docs page speed information on news + +Signed-off-by: GitHub Bot + +Updated with the latest blog posts + +Updated with the latest blog posts + +docs: updates on docs page speed + + Added docs page speed information on news + +Signed-off-by: GitHub Bot + +Updated with the latest blog posts + +Updated with the latest blog posts + +docs: updates on docs page speed + + Added docs page speed information on news + +Signed-off-by: GitHub Bot + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +docs: updates on docs page speed + + Added docs page speed information on news + +Signed-off-by: GitHub Bot + +Updated with the latest blog posts + +docs: updates on docs page speed + + Added docs page speed information on news + +Signed-off-by: GitHub Bot + +Updated with the latest blog posts + +Updated with the latest blog posts + +docs: updates on docs page speed + + Added docs page speed information on news + +Signed-off-by: GitHub Bot + +Updated with the latest blog posts + +Updated with the latest blog posts + +docs: updates on docs page speed + + Added docs page speed information on news + +Signed-off-by: GitHub Bot + +Updated with the latest blog posts + +docs: updates on docs page speed + + Added docs page speed information on news + +Signed-off-by: GitHub Bot + +Updated with the latest blog posts + +Updated with the latest blog posts + +docs: updates on docs page speed + + Added docs page speed information on news + +Signed-off-by: GitHub Bot + +Updated with the latest blog posts + +Updated with the latest blog posts + +docs: updates on docs page speed + + Added docs page speed information on news + +Signed-off-by: GitHub Bot + +docs: updates on documents + +Added information on project structure + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +docs: updates on docs page speed + + Added docs page speed information on news + +Signed-off-by: GitHub Bot + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +docs: updates on docs page speed + + Added docs page speed information on news + +Signed-off-by: GitHub Bot + +Auto update markdown TOC + +docs: updates on workflows + +Added information on documentation + +docs: updates on workflows + +Added information on documentation + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +docs: updates on docs page speed + + Added docs page speed information on news + +Signed-off-by: GitHub Bot + +Updated with the latest blog posts + +docs: updates on docs page speed + + Added docs page speed information on news + +Signed-off-by: GitHub Bot + +Updated with the latest blog posts + +Updated with the latest blog posts + +docs: updates on docs page speed + + Added docs page speed information on news + +Signed-off-by: GitHub Bot + +Updated with the latest blog posts + +Updated with the latest blog posts + +docs: updates on docs page speed + + Added docs page speed information on news + +Signed-off-by: GitHub Bot + +Updated with the latest blog posts + +docs: updates on docs page speed + + Added docs page speed information on news + +Signed-off-by: GitHub Bot + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +docs: updates on docs page speed + + Added docs page speed information on news + +Signed-off-by: GitHub Bot + +Updated with the latest blog posts + +Updated with the latest blog posts + +docs: updates on docs page speed + + Added docs page speed information on news + +Signed-off-by: GitHub Bot + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +docs: updates on docs page speed + + Added docs page speed information on news + +Signed-off-by: GitHub Bot + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +docs: updates on docs page speed + + Added docs page speed information on news + +Signed-off-by: GitHub Bot + +Updated with the latest blog posts + +docs: updates on docs page speed + + Added docs page speed information on news + +Signed-off-by: GitHub Bot + +Updated with the latest blog posts + +Updated with the latest blog posts + +docs: updates on docs page speed + + Added docs page speed information on news + +Signed-off-by: GitHub Bot + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +docs: updates on docs page speed + + Added docs page speed information on news + +Signed-off-by: GitHub Bot + +Updated with the latest blog posts + +Updated with the latest blog posts + +docs: updates on docs page speed + + Added docs page speed information on news + +Signed-off-by: GitHub Bot + +Updated with the latest blog posts + +Updated with the latest blog posts + +docs: updates on docs page speed + + Added docs page speed information on news + +Signed-off-by: GitHub Bot + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +docs: updates on docs page speed + + Added docs page speed information on news + +Signed-off-by: GitHub Bot + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +docs: updates on docs page speed + + Added docs page speed information on news + +Signed-off-by: GitHub Bot + +Updated with the latest blog posts + +Updated with the latest blog posts + +docs: updates on docs page speed + + Added docs page speed information on news + +Signed-off-by: GitHub Bot + +Updated with the latest blog posts + +docs: updates on docs page speed + + Added docs page speed information on news + +Signed-off-by: GitHub Bot + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +docs: updates on docs page speed + + Added docs page speed information on news + +Signed-off-by: GitHub Bot + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +docs: updates on docs page speed + + Added docs page speed information on news + +Signed-off-by: GitHub Bot + +Updated with the latest blog posts + +Updated with the latest blog posts + +docs: updates on docs page speed + + Added docs page speed information on news + +Signed-off-by: GitHub Bot + +Updated with the latest blog posts + +Updated with the latest blog posts + +docs: updates on docs page speed + + Added docs page speed information on news + +Signed-off-by: GitHub Bot + +Updated with the latest blog posts + +Updated with the latest blog posts + +docs: updates on docs page speed + + Added docs page speed information on news + +Signed-off-by: GitHub Bot + +Updated with the latest blog posts + +Updated with the latest blog posts + +docs: updates on docs page speed + + Added docs page speed information on news + +Signed-off-by: GitHub Bot + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +docs: updates on docs page speed + + Added docs page speed information on news + +Signed-off-by: GitHub Bot + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +docs: updates on docs page speed + + Added docs page speed information on news + +Signed-off-by: GitHub Bot + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +docs: updates on docs page speed + + Added docs page speed information on news + +Signed-off-by: GitHub Bot + +Updated with the latest blog posts + +Updated with the latest blog posts + +docs: updates on docs page speed + + Added docs page speed information on news + +Signed-off-by: GitHub Bot + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +docs: updates on docs page speed + + Added docs page speed information on news + +Signed-off-by: GitHub Bot + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +docs: updates on docs page speed + + Added docs page speed information on news + +Signed-off-by: GitHub Bot + +Auto update markdown TOC + +docs: updates on workflows + +Added information on documentation + +Updated with the latest blog posts + +Updated with the latest blog posts + +docs: updates on docs page speed + + Added docs page speed information on news + +Signed-off-by: GitHub Bot + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +docs: updates on docs page speed + + Added docs page speed information on news + +Signed-off-by: GitHub Bot + +Auto update markdown TOC + +docs: updates on workflows + +Added information on documentation + +Auto update markdown TOC + +docs: updates on workflows + +Added information on documentation + +docs: updates on workflows + +Added information on documentation + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +docs: updates on docs page speed + + Added docs page speed information on news + +Signed-off-by: GitHub Bot + +Auto update markdown TOC + +docs: updates on workflows + +Added information on documentation + +docs: updates on workflows + +Added information on documentation + +Auto update markdown TOC + +docs: updates on workflows + +Added information on documentation + +Auto update markdown TOC + +docs: updates on workflows + +Added information on documentation + +Auto update markdown TOC + +docs: updates on workflows + +Added information on documentation + +Auto update markdown TOC + +docs: updates on workflows + +Added information on documentation + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +docs: updates on docs page speed + + Added docs page speed information on news + +Signed-off-by: GitHub Bot + +Auto update markdown TOC + +docs: updates on workflows + +Added information on documentation + +docs: updates on workflows + +Added information on documentation + +docs: updates on workflows + +Added information on documentation + +Auto update markdown TOC + +docs: updates on workflows + +Added information on documentation + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +docs: updates on docs page speed + + Added docs page speed information on news + +Signed-off-by: GitHub Bot + +Auto update markdown TOC + +docs: updates on workflows + +Added information on documentation + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +docs: updates on docs page speed + + Added docs page speed information on news + +Signed-off-by: GitHub Bot + +docs: updates on workflows + +Added information on documentation + +docs: updates on workflows + +Added information on documentation + +docs: updates on workflows + +Added information on documentation + +docs: updates on workflows + +Added information on documentation + +docs: updates on workflows + +Added information on documentation + +docs: updates on workflows + +Added information on documentation + +docs: updates on workflows + +Added information on documentation + +docs: updates on workflows + +Added information on documentation + +Updated with the latest blog posts + +docs: updates on docs page speed + + Added docs page speed information on news + +Signed-off-by: GitHub Bot + +Updated with the latest blog posts + +Updated with the latest blog posts + +docs: updates on docs page speed + + Added docs page speed information on news + +Signed-off-by: GitHub Bot + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +docs: updates on docs page speed + + Added docs page speed information on news + +Signed-off-by: GitHub Bot + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +docs: updates on docs page speed + + Added docs page speed information on news + +Signed-off-by: GitHub Bot + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +docs: updates on docs page speed + + Added docs page speed information on news + +Signed-off-by: GitHub Bot + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +docs: updates on docs page speed + + Added docs page speed information on news + +Signed-off-by: GitHub Bot + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +docs: updates on docs page speed + + Added docs page speed information on news + +Signed-off-by: GitHub Bot + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +docs: updates on docs page speed + + Added docs page speed information on news + +Signed-off-by: GitHub Bot + +Updated with the latest blog posts + +Updated with the latest blog posts + +docs: updates on docs page speed + + Added docs page speed information on news + +Signed-off-by: GitHub Bot + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +docs: updates on docs page speed + + Added docs page speed information on news + +Signed-off-by: GitHub Bot + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +docs: updates on docs page speed + + Added docs page speed information on news + +Signed-off-by: GitHub Bot + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +docs: updates on docs page speed + + Added docs page speed information on news + +Signed-off-by: GitHub Bot + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +docs: updates on docs page speed + + Added docs page speed information on news + +Signed-off-by: GitHub Bot + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +docs: updates on docs page speed + + Added docs page speed information on news + +Signed-off-by: GitHub Bot + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +docs: updates on docs page speed + + Added docs page speed information on news + +Signed-off-by: GitHub Bot + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +docs: updates on docs page speed + + Added docs page speed information on news + +Signed-off-by: GitHub Bot + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +docs: updates on docs page speed + + Added docs page speed information on news + +Signed-off-by: GitHub Bot + +docs: updates on docs page speed + + Added docs page speed information on news + +Signed-off-by: GitHub Bot + +docs: updates on docs page speed + + Added docs page speed information on news + +Signed-off-by: GitHub Bot + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +docs: updates on docs page speed + + Added docs page speed information on news + +Signed-off-by: GitHub Bot + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +docs: updates on docs page speed + + Added docs page speed information on news + +Signed-off-by: GitHub Bot + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +docs: updates on docs page speed + + Added docs page speed information on news + +Signed-off-by: GitHub Bot + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +docs: updates on docs page speed + + Added docs page speed information on news + +Signed-off-by: GitHub Bot + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +docs: updates on docs page speed + + Added docs page speed information on news + +Signed-off-by: GitHub Bot + +Updated with the latest blog posts + +Updated with the latest blog posts + +docs: updates on docs page speed + + Added docs page speed information on news + +Signed-off-by: GitHub Bot + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +docs: updates on docs page speed + + Added docs page speed information on news + +Signed-off-by: GitHub Bot + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +docs: updates on docs page speed + + Added docs page speed information on news + +Signed-off-by: GitHub Bot + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +docs: updates on docs page speed + + Added docs page speed information on news + +Signed-off-by: GitHub Bot + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +docs: updates on docs page speed + + Added docs page speed information on news + +Signed-off-by: GitHub Bot + +Updated with the latest blog posts + +Updated with the latest blog posts + +docs: updates on docs page speed + + Added docs page speed information on news + +Signed-off-by: GitHub Bot + +Updated with the latest blog posts + +Updated with the latest blog posts + +docs: updates on docs page speed + + Added docs page speed information on news + +Signed-off-by: GitHub Bot + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +docs: updates on docs page speed + + Added docs page speed information on news + +Signed-off-by: GitHub Bot + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +docs: updates on docs page speed + + Added docs page speed information on news + +Signed-off-by: GitHub Bot + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +docs: updates on docs page speed + + Added docs page speed information on news + +Signed-off-by: GitHub Bot + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +docs: updates on docs page speed + + Added docs page speed information on news + +Signed-off-by: GitHub Bot + +docs: updates on workflows + +Added information on documentation + +Updated with the latest blog posts + +Updated with the latest blog posts + +docs: updates on docs page speed + + Added docs page speed information on news + +Signed-off-by: GitHub Bot + +Updated with the latest blog posts + +Updated with the latest blog posts + +docs: updates on docs page speed + + Added docs page speed information on news + +Signed-off-by: GitHub Bot + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +docs: updates on docs page speed + + Added docs page speed information on news + +Signed-off-by: GitHub Bot + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +docs: updates on docs page speed + + Added docs page speed information on news + +Signed-off-by: GitHub Bot + +Updated with the latest blog posts + +Updated with the latest blog posts + +docs: updates on docs page speed + + Added docs page speed information on news + +Signed-off-by: GitHub Bot + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +docs: updates on docs page speed + + Added docs page speed information on news + +Signed-off-by: GitHub Bot + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +docs: updates on docs page speed + + Added docs page speed information on news + +Signed-off-by: GitHub Bot + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +docs: updates on docs page speed + + Added docs page speed information on news + +Signed-off-by: GitHub Bot + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +docs: updates on docs page speed + + Added docs page speed information on news + +Signed-off-by: GitHub Bot + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +docs: updates on docs page speed + + Added docs page speed information on news + +Signed-off-by: GitHub Bot + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +docs: updates on docs page speed + + Added docs page speed information on news + +Signed-off-by: GitHub Bot + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +docs: updates on docs page speed + + Added docs page speed information on news + +Signed-off-by: GitHub Bot + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +docs: updates on docs page speed + + Added docs page speed information on news + +Signed-off-by: GitHub Bot + +Updated with the latest blog posts + +Updated with the latest blog posts + +docs: updates on docs page speed + + Added docs page speed information on news + +Signed-off-by: GitHub Bot + +Updated with the latest blog posts + +Updated with the latest blog posts + +docs: updates on docs page speed + + Added docs page speed information on news + +Signed-off-by: GitHub Bot + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +docs: updates on docs page speed + + Added docs page speed information on news + +Signed-off-by: GitHub Bot + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +docs: updates on docs page speed + + Added docs page speed information on news + +Signed-off-by: GitHub Bot + +Updated with the latest blog posts + +Updated with the latest blog posts + +docs: updates on docs page speed + + Added docs page speed information on news + +Signed-off-by: GitHub Bot + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +docs: updates on docs page speed + + Added docs page speed information on news + +Signed-off-by: GitHub Bot + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +docs: updates on docs page speed + + Added docs page speed information on news + +Signed-off-by: GitHub Bot + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +docs: updates on docs page speed + + Added docs page speed information on news + +Signed-off-by: GitHub Bot + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +docs: updates on docs page speed + + Added docs page speed information on news + +Signed-off-by: GitHub Bot + +Updated with the latest blog posts + +Updated with the latest blog posts + +docs: updates on docs page speed + + Added docs page speed information on news + +Signed-off-by: GitHub Bot + +Create shiftleft-analysis.yml +Create SECURITY.md +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +:arrow_up: Updates wagoid/commitlint-github-action action to v2.2.5 + +Signed-off-by: Renovate Bot + +docs: updates on docs page speed + + Added docs page speed information on news + +Signed-off-by: GitHub Bot + +github-actions: bump wagoid/commitlint-github-action + +Bumps [wagoid/commitlint-github-action](https://github.com/wagoid/commitlint-github-action) from v2.2.3 to v2.2.5. +- [Release notes](https://github.com/wagoid/commitlint-github-action/releases) +- [Changelog](https://github.com/wagoid/commitlint-github-action/blob/master/CHANGELOG.md) +- [Commits](https://github.com/wagoid/commitlint-github-action/compare/v2.2.3...4b1bcb1c72f99fbd6aa6b34cc3fb59200f01f993) + +Signed-off-by: dependabot[bot] +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +docs: updates on docs page speed + + Added docs page speed information on news + +Signed-off-by: GitHub Bot + +docs: updates on VERSION + + Added information on VERSION to repository + +Signed-off-by: GitHub Bot + +docs: updates on workflows + +Added information on documentation + +docs: updates on workflows + +Added information on documentation + +docs: updates on workflows + +Added information on documentation + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +docs: updates on docs page speed + + Added docs page speed information on news + +Signed-off-by: GitHub Bot + +docs: updates on workflows + +Added information on documentation + +:arrow_up: Updates wagoid/commitlint-github-action action to v2.2.3 + +Signed-off-by: Renovate Bot + +:arrow_up: Updates Matticusau/pr-helper action to v1.2.5 + +Signed-off-by: Renovate Bot + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +docs: updates on docs page speed + + Added docs page speed information on news + +Signed-off-by: GitHub Bot + +docs: updates on workflows + +Added information on documentation + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +docs: updates on docs page speed + + Added docs page speed information on news + +Signed-off-by: GitHub Bot + +github-actions: bump wagoid/commitlint-github-action + +Bumps [wagoid/commitlint-github-action](https://github.com/wagoid/commitlint-github-action) from v2.2.0 to v2.2.3. +- [Release notes](https://github.com/wagoid/commitlint-github-action/releases) +- [Changelog](https://github.com/wagoid/commitlint-github-action/blob/master/CHANGELOG.md) +- [Commits](https://github.com/wagoid/commitlint-github-action/compare/v2.2.0...f0f333025c2baa89fa7f5d55ffd1b5a5722f1a48) + +Signed-off-by: dependabot[bot] +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +docs: updates on docs page speed + + Added docs page speed information on news + +Signed-off-by: GitHub Bot + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +docs: updates on docs page speed + + Added docs page speed information on news + +Signed-off-by: GitHub Bot + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +docs: updates on docs page speed + + Added docs page speed information on news + +Signed-off-by: GitHub Bot + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +docs: updates on docs page speed + + Added docs page speed information on news + +Signed-off-by: GitHub Bot + +github-actions: bump Matticusau/pr-helper from v1.2.4 to v1.2.5 + +Bumps [Matticusau/pr-helper](https://github.com/Matticusau/pr-helper) from v1.2.4 to v1.2.5. +- [Release notes](https://github.com/Matticusau/pr-helper/releases) +- [Changelog](https://github.com/Matticusau/pr-helper/blob/main/CHANGELOG.md) +- [Commits](https://github.com/Matticusau/pr-helper/compare/v1.2.4...bf49eea1468710cad687fcaab0c6be6717112662) + +Signed-off-by: dependabot[bot] +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +docs: updates on docs page speed + + Added docs page speed information on news + +Signed-off-by: GitHub Bot + +github-actions: bump JamesIves/github-pages-deploy-action + +Bumps [JamesIves/github-pages-deploy-action](https://github.com/JamesIves/github-pages-deploy-action) from 3.7.1 to 4.0.0. +- [Release notes](https://github.com/JamesIves/github-pages-deploy-action/releases) +- [Commits](https://github.com/JamesIves/github-pages-deploy-action/compare/3.7.1...049a95c516cd5723d8cfde79dc7a79fcdcbd6c97) + +Signed-off-by: dependabot[bot] +docs: updates on workflows + +Added information on documentation + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +docs: updates on docs page speed + + Added docs page speed information on news + +Signed-off-by: GitHub Bot + +:arrow_up: Updates JamesIves/github-pages-deploy-action action to v4 + +Signed-off-by: Renovate Bot + +docs: updates on workflows + +Added information on documentation + +docs: updates on workflows + +Added information on documentation + +docs: updates on workflows + +Added information on documentation + +Updated with the latest blog posts + +Updated with the latest blog posts + +docs: updates on docs page speed + + Added docs page speed information on news + +Signed-off-by: GitHub Bot + +github-actions: bump actions/cache from v2 to v2.1.4 + +Bumps [actions/cache](https://github.com/actions/cache) from v2 to v2.1.4. +- [Release notes](https://github.com/actions/cache/releases) +- [Commits](https://github.com/actions/cache/compare/v2...26968a09c0ea4f3e233fdddbafd1166051a095f6) + +Signed-off-by: dependabot[bot] +github-actions: bump mondeja/remove-labels-gh-action from v1.0.0 to v1 + +Bumps [mondeja/remove-labels-gh-action](https://github.com/mondeja/remove-labels-gh-action) from v1.0.0 to v1. +- [Release notes](https://github.com/mondeja/remove-labels-gh-action/releases) +- [Commits](https://github.com/mondeja/remove-labels-gh-action/compare/v1.0.0...5708d0f365a12a585c84e248cf4346be733b6053) + +Signed-off-by: dependabot[bot] +Updated with the latest blog posts + +Updated with the latest blog posts + +docs: updates on docs page speed + + Added docs page speed information on news + +Signed-off-by: GitHub Bot + +docs: updates on workflows + +Added information on documentation + +Optimised images with calibre/image-actions +docs: updates on workflows + +Added information on documentation + +docs: updates on workflows + +Added information on documentation + +Auto update markdown TOC + +docs: updates on workflows + +Added information on documentation + +Auto update markdown TOC + +docs: updates on workflows + +Added information on documentation + +docs: updates on workflows + +Added information on documentation + +docs: updates on workflows + +Added information on documentation + +docs: updates on workflows + +Added information on documentation + +docs: updates on open graph cards + + Added open graph cards + +Signed-off-by: GitHub Bot + +docs: updates on workflows + +Added information on documentation + +docs: updates on workflows + +Added information on documentation + +docs: updates on workflows + +Added information on documentation + +docs: updates on open graph cards + + Added open graph cards + +Signed-off-by: GitHub Bot + +Delete **Java Design patterns**%20for social media platforms: alexander-rogalsky.gitbook.io.png +docs: updates on workflows + +Added information on documentation + +:arrow_up: Updates wagoid/commitlint-github-action action to v2.2.0 + +Signed-off-by: Renovate Bot + +docs: updates on open graph cards + + Added open graph cards + +Signed-off-by: GitHub Bot + +docs: updates on workflows + +Added information on documentation + +docs: updates on workflows + +Added information on documentation + +docs: updates on open graph cards + + Added open graph cards + +Signed-off-by: GitHub Bot + +docs: updates on workflows + +Added information on documentation + +Optimised images with calibre/image-actions +docs: updates on workflows + +Added information on documentation + +docs: updates on open graph cards + + Added open graph cards + +Signed-off-by: GitHub Bot + +docs: updates on workflows + +Added information on documentation + +docs: updates on open graph cards + + Added open graph cards + +Signed-off-by: GitHub Bot + +docs: updates on workflows + +Added information on documentation + +docs: updates on workflows + +Added information on documentation + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +docs: updates on docs page speed + + Added docs page speed information on news + +Signed-off-by: GitHub Bot + +docs: updates on workflows + +Added information on documentation + +docs: updates on workflows + +Added information on documentation + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +docs: updates on docs page speed + + Added docs page speed information on news + +Signed-off-by: GitHub Bot + +docs: updates on workflows + +Added information on documentation + +docs: updates on workflows + +Added information on documentation + +docs: updates on workflows + +Added information on documentation + +Updated with the latest blog posts + +Updated with the latest blog posts + +docs: updates on docs page speed + + Added docs page speed information on news + +Signed-off-by: GitHub Bot + +docs: updates on docs page speed + + Added docs page speed information on news + +Signed-off-by: GitHub Bot + +docs: updates on workflows + +Added information on documentation + +docs: updates on workflows + +Added information on documentation + +docs: updates on workflows + +Added information on documentation + +docs: updates on workflows + +Added information on documentation + +docs: updates on workflows + +Added information on documentation + +docs: updates on workflows + +Added information on documentation + +docs: updates on workflows + +Added information on documentation + +docs: updates on workflows + +Added information on documentation + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +docs: updates on docs page speed + + Added docs page speed information on news + +Signed-off-by: GitHub Bot + +Updated with the latest blog posts + +docs: updates on docs page speed + + Added docs page speed information on news + +Signed-off-by: GitHub Bot + +docs: updates on workflows + +Added information on documentation + +docs: updates on docs page speed + + Added docs page speed information on news + +Signed-off-by: GitHub Bot + +docs: updates on workflows + +Added information on documentation + +docs: updates on workflows + +Added information on documentation + +Auto update markdown TOC + +docs: updates on workflows + +Added information on documentation + +Updated with the latest blog posts + +docs: updates on workflows + +Added information on documentation + +Auto update markdown TOC + +docs: updates on workflows + +Added information on documentation + +docs: updates on workflows + +Added information on documentation + +docs: updates on workflows + +Added information on documentation + +docs: updates on workflows + +Added information on documentation + +docs: updates on workflows + +Added information on documentation + +docs: updates on workflows + +Added information on documentation + +Auto update markdown TOC + +docs: updates on workflows + +Added information on documentation + +Optimised images with calibre/image-actions +docs: updates on workflows + +Added information on documentation + +Auto update markdown TOC + +docs: updates on workflows + +Added information on documentation + +Auto update markdown TOC + +docs: updates on workflows + +Added information on documentation + +Updated with the latest blog posts + +Updated with the latest blog posts + +Compress Images + +Auto update markdown TOC + +Auto update markdown TOC + +docs: updates on workflows + +Added information on documentation + +Auto update markdown TOC + +Auto update markdown TOC + +docs: updates on workflows + +Added information on documentation + +Auto update markdown TOC + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +Auto update markdown TOC + +:arrow_up: Updates actions/checkout action to v2 + +Signed-off-by: Renovate Bot + +docs: updates on workflows + +Added information on documentation + +Auto update markdown TOC + +github-actions: bump Dunning-Kruger/unlock-issues from v1 to v1.1 + +Bumps [Dunning-Kruger/unlock-issues](https://github.com/Dunning-Kruger/unlock-issues) from v1 to v1.1. +- [Release notes](https://github.com/Dunning-Kruger/unlock-issues/releases) +- [Commits](https://github.com/Dunning-Kruger/unlock-issues/compare/v1...2838201f8294cf6508236b77c5da790cccf02446) + +Signed-off-by: dependabot[bot] +github-actions: update actions/github-script requirement to v3.1 + +Updates the requirements on [actions/github-script](https://github.com/actions/github-script) to permit the latest version. +- [Release notes](https://github.com/actions/github-script/releases) +- [Commits](https://github.com/actions/github-script/commits/47f7cf65b5ced0830a325f705cad64f2f58dddf7) + +Signed-off-by: dependabot[bot] +github-actions: bump prologic/action-remark-lint from v0.0.5 to v2 + +Bumps [prologic/action-remark-lint](https://github.com/prologic/action-remark-lint) from v0.0.5 to v2. +- [Release notes](https://github.com/prologic/action-remark-lint/releases) +- [Changelog](https://github.com/reviewdog/action-remark-lint/blob/master/CHANGELOG.md) +- [Commits](https://github.com/prologic/action-remark-lint/compare/v0.0.5...67b6b605777eb1f119ba445a53a5af39d4a4568d) + +Signed-off-by: dependabot[bot] +github-actions: bump actions/setup-node from v1 to v2.1.4 + +Bumps [actions/setup-node](https://github.com/actions/setup-node) from v1 to v2.1.4. +- [Release notes](https://github.com/actions/setup-node/releases) +- [Commits](https://github.com/actions/setup-node/compare/v1...c46424eee26de4078d34105d3de3cc4992202b1e) + +Signed-off-by: dependabot[bot] +github-actions: bump dessant/lock-threads from v2.0.1 to v2.0.3 + +Bumps [dessant/lock-threads](https://github.com/dessant/lock-threads) from v2.0.1 to v2.0.3. +- [Release notes](https://github.com/dessant/lock-threads/releases) +- [Changelog](https://github.com/dessant/lock-threads/blob/master/CHANGELOG.md) +- [Commits](https://github.com/dessant/lock-threads/compare/v2.0.1...486f7380c15596f92b724e4260e4981c68d6bde6) + +Signed-off-by: dependabot[bot] +github-actions: bump wagoid/commitlint-github-action + +Bumps [wagoid/commitlint-github-action](https://github.com/wagoid/commitlint-github-action) from v1.6.0 to v2.1.7. +- [Release notes](https://github.com/wagoid/commitlint-github-action/releases) +- [Changelog](https://github.com/wagoid/commitlint-github-action/blob/master/CHANGELOG.md) +- [Commits](https://github.com/wagoid/commitlint-github-action/compare/v1.6.0...771ad9d88ac6e75dd269b0c81d59a5396e5c8715) + +Signed-off-by: dependabot[bot] +docs: updates on workflows + +Added information on documentation + +Auto update markdown TOC + +docs: updates on workflows + +Added information on documentation + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +Updated with the latest blog posts + +Auto update markdown TOC + +Auto update markdown TOC + +docs: updates on docs + +Added information on documentation + +docs: updates on docs + +Added information on documentation + +docs: updates on documentation + +Added informational and corporate documentation + +docs: updates on documentation + +Added informational and corporate documentation + +Auto update markdown TOC + +Auto update markdown TOC + +docs: updates on documentation + +Added informational and corporate documentation + +docs: updates on documentation + +Added informational and corporate documentation + +Auto update markdown TOC + +Auto update markdown TOC + +Auto update markdown TOC + +docs: updates on documentation + +Added informational and corporate documentation + +docs: updates on VERSION + + Added information on VERSION to repository + +Signed-off-by: GitHub Bot + +Auto update markdown TOC diff --git a/changelog.config.js b/changelog.config.js new file mode 100644 index 00000000000..dde558ddc10 --- /dev/null +++ b/changelog.config.js @@ -0,0 +1,77 @@ +/* + * Copyright (C) 2022 SensibleMetrics, Inc. (http://sensiblemetrics.io/) + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +'use strict'; + +module.exports = { + disableEmoji: false, + list: ['test', 'feat', 'fix', 'chore', 'docs', 'refactor', 'style', 'ci', 'perf'], + maxMessageLength: 64, + minMessageLength: 3, + questions: ['type', 'scope', 'subject', 'body', 'breaking', 'issues', 'lerna'], + scopes: [], + types: { + chore: { + description: 'Build process or auxiliary tool changes', + emoji: '🤖', + value: 'chore', + }, + ci: { + description: 'CI related changes', + emoji: '🎡', + value: 'ci', + }, + docs: { + description: 'Documentation only changes', + emoji: '✏️', + value: 'docs', + }, + feat: { + description: 'A new feature', + emoji: '🎸', + value: 'feat', + }, + fix: { + description: 'A bug fix', + emoji: '🐛', + value: 'fix', + }, + perf: { + description: 'A code change that improves performance', + emoji: '⚡️', + value: 'perf', + }, + refactor: { + description: 'A code change that neither fixes a bug or adds a feature', + emoji: '💡', + value: 'refactor', + }, + release: { + description: 'Create a release commit', + emoji: '🏹', + value: 'release', + }, + style: { + description: 'Markup, white-space, formatting, missing semi-colons...', + emoji: '💄', + value: 'style', + }, + test: { + description: 'Adding missing tests', + emoji: '💍', + value: 'test', + }, + }, +}; diff --git a/changelog.config.json b/changelog.config.json new file mode 100644 index 00000000000..0611b8c95ef --- /dev/null +++ b/changelog.config.json @@ -0,0 +1,4 @@ +{ + "repositoryUrl": "https://github.com/AlexRogalskiy/java-patterns", + "blacklistPattern": "^Release \\d+\\.\\d+\\.\\d+|^\\d+\\.\\d+\\.\\d+$" +} diff --git a/charts/.helmignore b/charts/.helmignore new file mode 100644 index 00000000000..0e8a0eb36f4 --- /dev/null +++ b/charts/.helmignore @@ -0,0 +1,23 @@ +# Patterns to ignore when building packages. +# This supports shell glob matching, relative path matching, and +# negation (prefixed with !). Only one pattern per line. +.DS_Store +# Common VCS dirs +.git/ +.gitignore +.bzr/ +.bzrignore +.hg/ +.hgignore +.svn/ +# Common backup files +*.swp +*.bak +*.tmp +*.orig +*~ +# Various IDEs +.project +.idea/ +*.tmproj +.vscode/ diff --git a/charts/Chart.yaml b/charts/Chart.yaml new file mode 100644 index 00000000000..d8a25ee29da --- /dev/null +++ b/charts/Chart.yaml @@ -0,0 +1,22 @@ +apiVersion: v2 +version: 1.0.0 +appVersion: "1.0.1" +created: "2021-09-01T06:23:41.21262323Z" +name: backend-java-patterns +description: | + Java Design Patterns documentation +home: https://alexander-rogalsky.gitbook.io/java-patterns +icon: https://d1j8pt39hxlh3d.cloudfront.net/emoji/emojione/5.0/png/unicode/32/1f4d2.png +type: application +keywords: + - java + - design patterns + - documentation +maintainers: + - email: alexrogalskiy@users.noreply.github.com + name: AlexRogalskiy +sources: + - https://github.com/AlexRogalskiy/java-patterns +urls: + - https://github.com/AlexRogalskiy/java-patterns/archive/refs/tags/1.0.1.tar.gz +kubeVersion: '>=1.19.0-0' diff --git a/charts/OWNERS b/charts/OWNERS new file mode 100644 index 00000000000..88562a750b0 --- /dev/null +++ b/charts/OWNERS @@ -0,0 +1,4 @@ +approvers: +- alexrogalskiy +reviewers: +- alexrogalskiy diff --git a/charts/README.md b/charts/README.md new file mode 100644 index 00000000000..045103a000f --- /dev/null +++ b/charts/README.md @@ -0,0 +1,118 @@ +# Hello Kubernetes! + +This container image can be deployed on a Kubernetes cluster. It runs a web app, that displays the following: + +- a default **Hello world!** message +- namespace, pod, and node details +- container image details + +## Quick start + +You can deploy `java-patterns` to your Kubernetes cluster using [Helm 3](https://helm.sh/docs/intro/install/). The Helm chart installation and configuration +options can be found in the [Deploy using Helm](docs/deploy-using-helm.md) guide. + +When running through the following examples, ensure that you are in the chart directory in the repo, since you are referencing a local helm chart. + +```bash +$ cd helm +``` + +### Example 1: Default + +Deploy the `java-patterns` app into the `webapp` namespace. The app is exposed via a public Load Balancer on port 80 by default - note that a LoadBalancer +service typically only works in cloud provider based Kubernetes offerings. + +```bash +$ helm upgrade --install backend-java-patterns -f values.yaml --create-namespace --namespace webapp . + +# get the LoadBalancer ip address. +$ kubectl get svc webapp-backend-java-patterns -n webapp -o 'jsonpath={ .status.loadBalancer.ingress[0].ip }' +``` + +### Example 2: Custom message + +Deploy the `java-patterns` app into the `webapp` namespace with an "I just deployed this on Kubernetes!" message. The app is exposed via a public Load Balancer +on port 80 by default - note that a LoadBalancer service typically only works in cloud provider based Kubernetes offerings. + +```bash +$ helm upgrade --install backend-java-patterns -f values.yaml --create-namespace --namespace webapp . --set message="I just deployed this on Kubernetes!" + +# get the LoadBalancer ip address. +$ kubectl get svc webapp-backend-java-patterns -n webapp -o 'jsonpath={ .status.loadBalancer.ingress[0].ip }' +``` + +### Example 3: Ingress + +Deploy the `java-patterns` app into the `webapp` namespace. This example assumes that an ingress has been deployed and configured in the cluster, and that the +ingress has a path of `/app/java-patterns/` mapped to the `java-patterns` service. + +The `java-patterns` app can be reached on the ip address of the ingress via the `/app/java-patterns/` path. + +```bash +$ helm upgrade --install backend-java-patterns -f values.yaml --create-namespace --namespace webapp ingress . \ + --set ingress.configured=true \ + --set ingress.pathPrefix="/app/java-patterns/" \ + --set service.type="ClusterIP" +``` + +Alternatively, a YAML file that specifies the values for the above parameters can be provided while installing the chart. For example, + +```bash +$ helm install --create-namespace --namespace webapp backend-java-patterns . -f values.yaml +``` + +> **Tip**: You can use the default [values.yaml](values.yaml) + +### Example 4: Helm uninstall + +```bash +helm uninstall backend-java-patterns --namespace webapp +``` + +### Example 5: Helm status + +```bash +helm status backend-java-patterns --namespace webapp +``` + +### Example 6: Helm list + +```bash +helm list --namespace webapp +``` + +### Example 7: Helm lint + +```bash +helm lint charts +``` + +## Documentation + +### Deploying + +If you'd like to explore the various Helm chart configuration options, then read the [Deploy with Helm](charts2/docs/deploy-using-helm.md) documentation. You can also +discover more about the ingress configuration options in the [Deploy with ingress](charts2/docs/deploy-with-ingress.md) documentation + +### Building your own images + +If you'd like to build the `java-patterns` container image yourself and reference from your own registry or DockerHub repository, then you can get more details +on how to do this in the [Build and push container images](charts2/docs/build-and-push-container-images.md) documentation. + +### Development environment + +If you have [VS Code](https://code.visualstudio.com/) and +the [VS Code Remote Containers](https://marketplace.visualstudio.com/items?itemName=ms-vscode-remote.remote-containers) extension installed, the `.devcontainer` +folder will be used to provide a container based development environment. You can read more about how to use this in +the [Development environments](docs/development-environment.md) documentation. + +## Upgrading the chart + +### To =< 5.0.0 + +Version 5.0.0 is a major update. + +- The chart now follows the new Kubernetes label recommendations: + + +The simplest way to update is to do a force upgrade, which recreates the resources by doing a delete and an install. diff --git a/charts/docs/build-and-push-container-images.md b/charts/docs/build-and-push-container-images.md new file mode 100644 index 00000000000..244d6f6ed45 --- /dev/null +++ b/charts/docs/build-and-push-container-images.md @@ -0,0 +1,52 @@ +Building docker image with docker command for `dev` environment: + +```shell +GIT_SHA=$(git rev-parse HEAD) +docker build -f ./distribution/docker-images/dev.Dockerfile -t styled-java-patterns -t styled-java-patterns:$GIT_SHA . +``` + +Running docker containers via `docker-compose` command: + +```shell +docker-compose -f docker-compose.yml build +docker-compose -f docker-compose.yml up --detach +``` + +Removing docker containers via `docker-compose` command: + +```shell +docker-compose -f docker-compose.yml down --volumes --remove-orphans +``` + +Running docker image with `skaffold` command: + +```shell +skaffold run --filename='skaffold.docker.yaml' --tail +``` + +or + +Running ***