diff --git a/.config/hbs.cjs b/.config/hbs.cjs index 21007f3a..c997dd6e 100644 --- a/.config/hbs.cjs +++ b/.config/hbs.cjs @@ -49,6 +49,15 @@ module.exports.register = function (Handlebars) { .sort((a, b) => a.key.localeCompare(b.key)) }) + /** + * Used for returning input from synchronous commands (i.e. bash commands) + */ + Handlebars.registerHelper('execSync', function (input, options) { + const output = execSync(input) + + return output + }) + /** * Used for generating Homebrew resource stanzas for Python packages. * For more information, see: https://github.com/tdsmith/homebrew-pypi-poet diff --git a/Taskfile.yml b/Taskfile.yml index 2cb574a8..9f5b1f3a 100644 --- a/Taskfile.yml +++ b/Taskfile.yml @@ -1,6 +1,5 @@ --- version: '3' - includes: ansible: taskfile: ./.config/taskfiles/ansible/Taskfile.yml @@ -311,9 +310,7 @@ includes: web:profile: taskfile: ./.config/taskfiles/web/Taskfile-profile.yml optional: true - output: interleaved - vars: DOCKERHUB_PROFILE: sh: | @@ -366,20 +363,24 @@ vars: GROUP_EXEC_ASYNC: 'false' # yamllint disable rule:line-length IGNORE_FOLDERS: >- - -path './.autodoc/*' -o -path './.cache/*' -o -path './.common*' -o -path './.config/*' -o -path './.git/*' -o - -path './.modules/*' -o -path './.npm/*' -o - -path './.pnpm-store/*' -o -path './.shared/*' -o -path './.task/*' -o -path './.venv/*' -o -path './.vscode/*' -o - -path './build/*' -o -path './dist/*' -o -path './node_modules/*' -o -path './roles/*' -o -name pnpm-lock.yaml -o - -name package-lock.json -o -name poetry.lock -o -name '.variables.json' -o -name '.git' + -path './.autodoc/*' -o -path './.cache/*' -o -path './.common*' -o -path './.config/*' -o -path './.git/*' -o -path './.modules/*' -o -path './.npm/*' -o -path './.pnpm-store/*' -o -path './.shared/*' -o -path './.task/*' -o -path './.venv/*' -o -path './.vscode/*' -o -path './build/*' -o -path './dist/*' -o -path './node_modules/*' -o -path './roles/*' -o -name pnpm-lock.yaml -o -name package-lock.json -o -name poetry.lock -o -name '.variables.json' -o -name '.git' INIT_SCRIPT: https://gitlab.com/megabyte-labs/gitlab-ci/-/raw/master/scripts/update-init.sh LOG_FIX: sh: chmod +x .config/log MODEL_TASKFILE: https://gitlab.com/megabyte-labs/common/shared/-/raw/master/Taskfile.yml NPM_KEEP_UPDATED: '' NPM_PROGRAM: pnpm + NPM_PROGRAM_LOCAL: pnpm + NPX_HANDLE: + sh: | + if type pnpx &> /dev/null; then + echo 'pnpx ' + elif type pnpm &> /dev/null; then + echo 'pnpm ' + fi PROJECT_TYPE: sh: | - if type jq &> /dev/null && [ -f package.json ]; then VER="$(jq -r '.blueprint.group' package.json)"; if [ "$VER" == 'null' ]; then TYPE="$GROUP_TYPE"; else TYPE="$VER"; fi; else TYPE="$GROUP_TYPE"; fi + if type jq &> /dev/null && [ -f package.json ]; then VER="$(jq -r '.blueprint.group' package.json)"; if [ "$VER" == 'null' ]; then echo TYPE="$GROUP_TYPE"; else TYPE="$VER"; fi; else TYPE="$GROUP_TYPE"; fi if type jq &> /dev/null && [ -f package.json ]; then VER="$(jq -r '.blueprint.subgroup' package.json)"; if [ "$VER" == 'null' ]; then SUBTYPE="$REPOSITORY_TYPE"; else SUBTYPE="$VER"; fi; else SUBTYPE="$REPOSITORY_TYPE"; fi if [ "$TYPE" == 'common' ] && [ "$SUBTYPE" == 'shared' ]; then echo 'shared' @@ -402,34 +403,13 @@ vars: fi PYTHON_VIRTUALENV: true REPOSITORY_SUBTYPE: - sh: | - if [ -n "$REPOSITORY_TYPE" ]; then REPO_SUBTYPE="$REPOSITORY_TYPE"; fi - if type jq &> /dev/null && [ -f package.json ]; then - VER="$(jq -r '.blueprint.subgroup' package.json)" - if [ "$VER" == 'null' ]; then - if [ -n "$REPO_SUBTYPE" ]; then echo "$REPO_SUBTYPE"; else echo "misc"; fi - else - echo "$VER" - fi - else - if [ -n "$REPO_SUBTYPE" ]; then echo "$REPO_SUBTYPE"; else echo "misc"; fi - fi + sh: if type jq &> /dev/null && [ -f package.json ]; then VER="$(jq -r .blueprint.subgroup package.json)"; if [ "$VER" == null ]; then echo "$REPOSITORY_TYPE"; else echo "$VER"; fi; else echo "$REPOSITORY_TYPE"; fi REPOSITORY_TYPE: - sh: | - if [ -n "$GROUP_TYPE" ]; then REPO_TYPE="$GROUP_TYPE"; fi - if type jq &> /dev/null && [ -f package.json ]; then - VER="$(jq -r '.blueprint.group' package.json)" - if [ "$VER" == 'null' ]; then - if [ -n "$REPO_TYPE" ]; then echo "$REPO_TYPE"; else echo "misc"; fi - else - echo "$VER" - fi - else - if [ -n "$REPO_TYPE" ]; then echo "$REPO_TYPE"; else echo "misc"; fi - fi + sh: if type jq &> /dev/null && [ -f package.json ]; then VER="$(jq -r .blueprint.group package.json)"; if [ "$VER" == null ]; then echo "$GROUP_TYPE"; else echo "$VER"; fi; else echo "$GROUP_TYPE"; fi SEMANTIC_CONFIG: semantic-release-config TIMEZONE: America/New_York - + includes: + common:start: ./.config/taskfiles/common/Taskfile-start.yml env: GOPATH: sh: | @@ -450,7 +430,6 @@ env: PATH="$PATH:$HOME/.local/go/bin:$HOME/go/bin" PATH="$PATH:/home/linuxbrew/.linuxbrew/bin:/home/linuxbrew/.linuxbrew/sbin" PATH="$PATH:$PWD/bin" - PATH="$PATH:$HOME/.volta/bin" echo "$PATH" RECORD_INSTALL: sh: if [ -n "$CI" ]; then echo 'true'; fi @@ -460,9 +439,6 @@ env: DSN="$(jq -r '.blueprint.sentryDSN' package.json)" if [ "$DSN" != 'null' ]; then echo "$DSN"; fi fi - VOLTA_HOME: - sh: echo "$HOME/.volta" - profile: | if [[ "$OSTYPE" == 'linux-gnu'* ]] || [[ "$OSTYPE" == 'linux-musl'* ]]; then if [ -f /home/linuxbrew/.linuxbrew/bin/brew ] && ! type brew > /dev/null; then @@ -481,7 +457,6 @@ profile: | if [ -f .venv/bin/activate ]; then . .venv/bin/activate fi - tasks: build: deps: @@ -510,7 +485,6 @@ tasks: else [[ $- == *i* ]] && task prepare || (.config/log error '{{.NONINTERACTIVE_MISSING_BUILD_CMD}}' && exit 1) fi - clean: desc: Removes optional folders that are cached during various tasks summary: | @@ -521,13 +495,11 @@ tasks: which will re-generate the project from scratch. Ideally, this task and the reset task should never be necessary. The `start` task should be used instead. vars: - CLEAN_TARGETS: .autodoc .cache .task .venv node_modules tsconfig.tsbuildinfo venv - .variables.json + CLEAN_TARGETS: .autodoc .cache .task .venv node_modules tsconfig.tsbuildinfo venv .variables.json cmds: - task: common:clean vars: CLEAN_TARGETS: '{{.CLEAN_TARGETS}}' - commit: desc: Lint staged files, report spelling errors, and open a _required_ commit dialoge summary: | @@ -544,7 +516,6 @@ tasks: to your regular `git commit -m` command to bypass the pre-commit hook. cmds: - task: common:commit - commit:all: deps: - install:software:git @@ -582,7 +553,6 @@ tasks: git add --all git commit {{end}} - commit:quick: deps: - ci:commit:config @@ -590,16 +560,13 @@ tasks: - | task --list > /dev/null || (echo "ERROR: Invalid Taskfiles!" && exit 1) git add --all - - HUSKY=0 git commit -m '🔧 chore(tweak): quick minor update' --no-verify + - "HUSKY=0 git commit -m '\U0001F527 chore(tweak)": quick minor update' --no-verify - git push origin master - devcontainer: deps: - install:npm:devcontainer - install:software:docker - donothing: 'true' - fix: desc: Run code auto-fixers / auto-formatters summary: | @@ -610,7 +577,6 @@ tasks: an error so the auto-fixes still have to be validated. cmds: - task: fix:all - fresh: summary: Initialize a new project with only the Taskfile.yml present cmds: @@ -622,7 +588,6 @@ tasks: - TMP="$(mktemp)" && jq -r 'del(.blueprint)' package.json > "$TMP" && mv "$TMP" package.json - bash start.sh - task: prepare - get:links: deps: - install:software:jq @@ -635,7 +600,6 @@ tasks: cmds: - .config/log info 'GitHub -----> `{{.GITHUB_URL}}`' - .config/log info 'GitLab -----> `{{.GITLAB_URL}}`' - group:exec: desc: Execute group commands on any GitLab group (including repositories in sub-groups) summary: | @@ -656,7 +620,6 @@ tasks: Be sure to wrap the command in quotes or you might observe some odd behavior. cmds: - task: git:gitlab:group:exec - init: deps: - install:software:jq @@ -689,12 +652,10 @@ tasks: - git init - task: repair - task: prepare - jumpusb: desc: Creates a JumpUSB (https://jumpusb.com) cmds: - task: install:ventoy - lint: desc: Lints the project using all linters summary: | @@ -708,7 +669,6 @@ tasks: `task lint` cmds: - task: lint:all - livereload: deps: - install:npm:nodemon @@ -748,12 +708,10 @@ tasks: .config/log error '`Taskfile-project.yml` must exist and have a `livereload` task to use with `nodemon`' && exit 1 fi - nodemon --config {{if .CLI_ARGS}}{{.CLI_ARGS}}{{else}}.config/nodemon.json{{end}} - new:project: desc: Create a new project cmds: - task: prepare - preload: desc: Set up your workstation in advance by installing commonly used programs summary: | @@ -796,7 +754,6 @@ tasks: - task: install:pipx:bundle - task: install:python:requirements - task: install:modules:local - prepare: desc: Prepares the project for the normal start command summary: | @@ -813,7 +770,6 @@ tasks: cmds: - task: boilerplate:check:package - task: boilerplate:clean - publish: desc: Publish a semantic release via `semantic-release` summary: | @@ -861,7 +817,6 @@ tasks: success: Successfully ran `semantic-release` via `task publish` cmds: - task: publish:semantic-release - publish:force: desc: Force a `semantic-release` even if there are no new eligible commits summary: | @@ -887,10 +842,8 @@ tasks: start: Publishing `semantic-release` update via `task publish:force` success: Successfully published update via `task publish:force` cmds: - - | - HUSKY=0 git commit -a --allow-empty -m '🔨 chore(bump): Forced semantic-release {{.UPDATE_LEVEL}}' -n + - "HUSKY=0 git commit -a --allow-empty -m '\U0001F528 chore(bump): Forced semantic-release {{.UPDATE_LEVEL}}' -n\n" - task: publish - pull:upstream: desc: Pull from upstream repositories summary: | @@ -907,7 +860,6 @@ tasks: success: Successfully pulled from `upstreamRemotes` cmds: - task: common:update:upstream:remotes:pull - repair: cmds: - task: common:repair @@ -918,7 +870,6 @@ tasks: else curl -sSL {{.INIT_SCRIPT}} > "$TMP" && bash "$TMP" && rm "$TMP" fi - reset: desc: Resets the project by removing all caches and then re-generating templated files summary: | @@ -930,7 +881,6 @@ tasks: updates, it re-generates any templated files. cmds: - task: common:reset - reset:force: desc: 'Aggressively reset the project (**WARNING** This will wipe uncommitted work)' summary: | @@ -949,7 +899,6 @@ tasks: answer: cmds: - task: common:reset:force - scripts: interactive: true deps: @@ -967,7 +916,6 @@ tasks: start: Running `NTL_RUNNER={{.NPM_PROGRAM}} ntl` cmds: - NTL_RUNNER={{.NPM_PROGRAM}} ntl - services: desc: Update elements of the repository that require API access summary: | @@ -980,7 +928,6 @@ tasks: - task: common:update:services status: - '[ -n "$GITLAB_CI" ] && [ "$REPOSITORY_UPDATE" != "true" ]' - shell: desc: Start a terminal session using Docker with any Linux operating system compile: | @@ -1014,13 +961,11 @@ tasks: * ubuntu-21.04 cmds: - task: common:shell - ssh-keys: deps: - cloud:heroku:ssh-keys - git:github:ssh-keys - git:gitlab:ssh-keys - start: desc: Start the project by installing / updating dependencies, repairing issues, and opening a tutorial summary: | @@ -1044,7 +989,6 @@ tasks: success: Project started! cmds: - task: common:start - synchronize: desc: Set up the project and refresh it with the latest changes summary: | @@ -1065,7 +1009,6 @@ tasks: success: Successfully synchronized the project with upstream file changes and also bootstrapped the project cmds: - task: upstream:{{.PROJECT_TYPE}} - tag:deps: desc: Inject a new command in the `Taskfile.yml` that includes all tasks matching a given tag as deps summary: | @@ -1094,7 +1037,6 @@ tasks: ``` cmds: - task: common:util:task:tag:deps - template: deps: - install:npm:liquidjs @@ -1116,7 +1058,6 @@ tasks: preconditions: - sh: test -f .variables.json msg: This task requires that you have already spun up the project by running `task start` - test: deps: - install:software:jq @@ -1147,7 +1088,6 @@ tasks: else [[ $- == *i* ]] && task prepare || (.config/log error '{{.NONINTERACTIVE_MISSING_TEST_CMD}}' && exit 1) fi - update: desc: Fully update the repository summary: | @@ -1174,9 +1114,7 @@ tasks: cmds: - task: common:start env: - UPDATE_PROJECT: 'true' - - task: common:update:finish - + UPDATE_PROJECT: "true" yubikey: desc: Create an OpenGPG-enabled YubiKey summary: | diff --git a/meta/main.yml b/meta/main.yml index 44765981..0dd6fc20 100644 --- a/meta/main.yml +++ b/meta/main.yml @@ -7,7 +7,7 @@ galaxy_info: company: Megabyte Labs issue_tracker_url: https://gitlab.com/megabyte-labs/ansible-roles/rust/-/issues license: license (MIT) - min_ansible_version: 2.1 + min_ansible_version: 2.10 platforms: - name: Mac versions: diff --git a/package.json b/package.json index a28f8e78..7e3ceeac 100644 --- a/package.json +++ b/package.json @@ -45,14 +45,14 @@ }, "optionalDependencies": {}, "devDependencies": { - "@commitlint/config-conventional": "latest", "eslint-config-strict-mode": "latest", "git-cz-emoji": "latest", - "handlebars-helpers": "latest", "prettier": "^2.4.1", "prettier-config-sexy-mode": "latest", "semantic-release-config": "latest", - "typescript": "^4.5.5" + "typescript": "^4.5.5", + "@commitlint/config-conventional": "latest", + "handlebars-helpers": "latest" }, "keywords": [ "ansible", @@ -118,9 +118,7 @@ "showAuthor": true }, "commitlint": { - "extends": [ - "@commitlint/config-conventional" - ], + "extends": [], "helpUrl": "https://megabyte.space/docs/contributing/commits" }, "eslintConfig": {