diff --git a/.github/workflows/ci.yaml b/.github/workflows/ci.yaml index 36defc1..8853db4 100644 --- a/.github/workflows/ci.yaml +++ b/.github/workflows/ci.yaml @@ -1,7 +1,11 @@ -name: CI +name: ci on: pull_request: # Start the job on all PRs + push: + branches: + - master + - main jobs: precommit: @@ -10,6 +14,8 @@ jobs: steps: - name: Checkout code uses: actions/checkout@v4 + with: + fetch-depth: 0 - name: Set up Python uses: actions/setup-python@v4 @@ -19,9 +25,6 @@ jobs: - name: Install Rust Toolchain uses: dtolnay/rust-toolchain@nightly - - name: Set shfmt version environment variable - run: echo "SHFMT_VERSION=v3.7.0" >> $GITHUB_ENV - - name: Cache pip dependencies uses: actions/cache@v3 with: @@ -34,9 +37,8 @@ jobs: uses: actions/cache@v3 with: path: /usr/local/bin/shfmt - key: ${{ runner.os }}-shfmt-${{ env.SHFMT_VERSION }} + key: ${{ runner.os }}-shfmt- restore-keys: | - ${{ runner.os }}-shfmt-${{ env.SHFMT_VERSION }} ${{ runner.os }}-shfmt- - name: Cache Pre-Commit environments @@ -50,21 +52,10 @@ jobs: - name: Install dependencies run: | - python -m pip install pre-commit - pre-commit install - - - name: Install shfmt - run: | - SHFMT_VERSION=${{ env.SHFMT_VERSION }} - SHFMT_BIN="shfmt_${SHFMT_VERSION}_linux_amd64" - if [[ ! -f /usr/local/bin/shfmt ]]; then - wget -O shfmt "https://github.com/mvdan/sh/releases/download/${SHFMT_VERSION}/${SHFMT_BIN}" - chmod +x shfmt - sudo mv shfmt /usr/local/bin/ - fi - sudo apt-get install shellcheck - rustup component add clippy + echo "uname=$(uname)" + make setuppc rustup component add rustfmt + rustup component add clippy - name: Run pre-commits env: @@ -74,14 +65,7 @@ jobs: DEFAULT_BRANCH=$(curl -H "Authorization: token $GITHUB_TOKEN" \ "https://api.github.com/repos/$GITHUB_REPOSITORY" | jq -r '.default_branch') - git fetch - CUR_SHA=$(git log --pretty=tformat:"%H" -n1 . | tail -n1) - - echo "Default branch is $DEFAULT_BRANCH" - echo "Current SHA is $CUR_SHA" + echo "Default branch = $DEFAULT_BRANCH" + echo "Current SHA = ${{ github. sha }}" - if [[ $GITHUB_REF == "refs/heads/$DEFAULT_BRANCH" ]]; then - pre-commit run --all - else - pre-commit run --from-ref origin/$DEFAULT_BRANCH --to-ref $CUR_SHA - fi + pre-commit run --from-ref origin/$DEFAULT_BRANCH --to-ref "${{ github. sha }}" diff --git a/.github/workflows/integration.yaml b/.github/workflows/integration.yaml new file mode 100644 index 0000000..b86b902 --- /dev/null +++ b/.github/workflows/integration.yaml @@ -0,0 +1,23 @@ +name: integration + +on: + pull_request: # Start the job on all PRs + push: + branches: + - master + - main + +jobs: + test: + runs-on: ubuntu-latest + + steps: + - name: Checkout code + uses: actions/checkout@v4 + + - name: Install Rust Toolchain + uses: dtolnay/rust-toolchain@nightly + + - name: Install dependencies + run: | + sh ./test.sh diff --git a/.vscode/extensions.json b/.vscode/extensions.json new file mode 100644 index 0000000..a73380a --- /dev/null +++ b/.vscode/extensions.json @@ -0,0 +1,9 @@ +{ + "recommendations": [ + "ms-python.python", + "ms-python.vscode-pylance", + "ms-python.isort", + "ms-python.black-formatter", + "ms-python.flake8" + ] +} diff --git a/.vscode/settings.json b/.vscode/settings.json new file mode 100644 index 0000000..86c68d8 --- /dev/null +++ b/.vscode/settings.json @@ -0,0 +1,9 @@ +{ + "[python]": { + "editor.formatOnType": true, + "editor.formatOnSave": true, + "editor.defaultFormatter": "ms-python.black-formatter" + }, + "flake8.args": ["--config=.ci/flake8.cfg"], + "files.insertFinalNewline": true +} diff --git a/Cargo.lock b/Cargo.lock index d54ac0c..f8124d8 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -166,7 +166,7 @@ checksum = "acbf1af155f9b9ef647e42cdc158db4b64a1b61f743629225fde6f3e0be2a7c7" [[package]] name = "cpa" -version = "0.1.0" +version = "0.1.5" dependencies = [ "askama", "clap", diff --git a/Cargo.toml b/Cargo.toml index d4fc118..e930fa6 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "cpa" -version = "0.1.0" +version = "0.1.5" edition = "2021" [dependencies] diff --git a/Makefile b/Makefile index 586c5d3..0e750a2 100644 --- a/Makefile +++ b/Makefile @@ -12,19 +12,29 @@ ifeq ($(shell uname),Darwin) @echo "Setting up shellcheck (macOS)..." brew install shellcheck +else ifeq ($(shell uname -s),Linux) +ifeq ($(shell uname -m),x86_64) + @echo "Setting up shfmt for amd64 (Linux)..." + wget -qO shfmt "https://github.com/mvdan/sh/releases/download/${SHFMT_VERSION}/shfmt_${SHFMT_VERSION}_linux_amd64" +else ifeq ($(shell uname -m),aarch64) + @echo "Setting up shfmt for arm64 (Linux)..." + wget -qO shfmt "https://github.com/mvdan/sh/releases/download/${SHFMT_VERSION}/shfmt_${SHFMT_VERSION}_linux_arm64" else - @echo "Setting up shfmt (Linux)..." - wget -qO shfmt "https://github.com/mvdan/sh/releases/download/${SHFMT_VERSION}/shfmt_${SHFMT_VERSION}_$(shell uname -m)" + @echo "Unsupported architecture $(shell uname -m)! Update this Makefile!" + exit 1 +endif chmod +x shfmt - sudo mv shfmt /usr/local/bin/ - + sudo mv shfmt /usr/local/bin/shfmt @echo "Setting up shellcheck (Linux)..." sudo apt-get install shellcheck || sudo yum install shellcheck || sudo dnf install shellcheck +else + @echo "Unsupported operating system! Update this Makefile or use macOS/Linux." + exit 1 endif .PHONY: reqtxt reqtxt: - poetry export -f requirements.txt --output requirements.txt --without-hashes + poetry export -f requirements.txt --output requirements.txt .PHONY: pcao pcao: diff --git a/delete_a_tag.sh b/delete_a_tag.sh new file mode 100644 index 0000000..cdcd9fe --- /dev/null +++ b/delete_a_tag.sh @@ -0,0 +1,19 @@ +#!/bin/bash + +# Specific tag to delete +TAG="$1" + +# Delete the specific local tag +git tag -d $TAG + +# Fetch the current list of tags +git fetch + +# Delete the specific remote tag +git push --delete origin $TAG + +# Prune local references to remote tags +git fetch --prune --prune-tags + +# Delete the specific GitHub release using the GitHub CLI +gh release delete $TAG --yes diff --git a/example/python/.cpa/prettier.json b/example/base/.ci/prettier.json similarity index 100% rename from example/python/.cpa/prettier.json rename to example/base/.ci/prettier.json diff --git a/templates/base/ci.yaml b/example/base/.github/workflows/ci.yaml similarity index 54% rename from templates/base/ci.yaml rename to example/base/.github/workflows/ci.yaml index dc9ed00..e414df1 100644 --- a/templates/base/ci.yaml +++ b/example/base/.github/workflows/ci.yaml @@ -1,8 +1,11 @@ -{% raw -%} -name: CI +name: ci on: pull_request: # Start the job on all PRs + push: + branches: + - master + - main jobs: precommit: @@ -11,15 +14,14 @@ jobs: steps: - name: Checkout code uses: actions/checkout@v4 + with: + fetch-depth: 0 - name: Set up Python uses: actions/setup-python@v4 with: python-version: "3.10" - - name: Set shfmt version environment variable - run: echo "SHFMT_VERSION=v3.7.0" >> $GITHUB_ENV - - name: Cache pip dependencies uses: actions/cache@v3 with: @@ -32,9 +34,8 @@ jobs: uses: actions/cache@v3 with: path: /usr/local/bin/shfmt - key: ${{ runner.os }}-shfmt-${{ env.SHFMT_VERSION }} + key: ${{ runner.os }}-shfmt- restore-keys: | - ${{ runner.os }}-shfmt-${{ env.SHFMT_VERSION }} ${{ runner.os }}-shfmt- - name: Cache Pre-Commit environments @@ -48,19 +49,7 @@ jobs: - name: Install dependencies run: | - python -m pip install pre-commit - pre-commit install - - - name: Install shfmt - run: | - SHFMT_VERSION=${{ env.SHFMT_VERSION }} - SHFMT_BIN="shfmt_${SHFMT_VERSION}_linux_amd64" - if [[ ! -f /usr/local/bin/shfmt ]]; then - wget -O shfmt "https://github.com/mvdan/sh/releases/download/${SHFMT_VERSION}/${SHFMT_BIN}" - chmod +x shfmt - sudo mv shfmt /usr/local/bin/ - fi - sudo apt-get install shellcheck + make setuppc - name: Run pre-commits env: @@ -70,15 +59,7 @@ jobs: DEFAULT_BRANCH=$(curl -H "Authorization: token $GITHUB_TOKEN" \ "https://api.github.com/repos/$GITHUB_REPOSITORY" | jq -r '.default_branch') - git fetch - CUR_SHA=$(git log --pretty=tformat:"%H" -n1 . | tail -n1) - - echo "Default branch is $DEFAULT_BRANCH" - echo "Current SHA is $CUR_SHA" + echo "Default branch = $DEFAULT_BRANCH" + echo "Current SHA = ${{ github. sha }}" - if [[ $GITHUB_REF == "refs/heads/$DEFAULT_BRANCH" ]]; then - pre-commit run --all - else - pre-commit run --from-ref origin/$DEFAULT_BRANCH --to-ref $CUR_SHA - fi -{%- endraw %} + pre-commit run --from-ref origin/$DEFAULT_BRANCH --to-ref "${{ github. sha }}" diff --git a/example/base/.gitignore b/example/base/.gitignore new file mode 100644 index 0000000..ea1aea1 --- /dev/null +++ b/example/base/.gitignore @@ -0,0 +1,189 @@ +########################################################################################## +# Python +# From: https://github.com/github/gitignore/blob/main/Python.gitignore +########################################################################################## +# Byte-compiled / optimized / DLL files +__pycache__/ +*.py[cod] +*$py.class + +# C extensions +*.so + +# Distribution / packaging +.Python +build/ +develop-eggs/ +dist/ +downloads/ +eggs/ +.eggs/ +lib/ +lib64/ +parts/ +sdist/ +var/ +wheels/ +share/python-wheels/ +*.egg-info/ +.installed.cfg +*.egg +MANIFEST + +# PyInstaller +# Usually these files are written by a python script from a template +# before PyInstaller builds the exe, so as to inject date/other infos into it. +*.manifest +*.spec + +# Installer logs +pip-log.txt +pip-delete-this-directory.txt + +# Unit test / coverage reports +htmlcov/ +.tox/ +.nox/ +.coverage +.coverage.* +.cache +nosetests.xml +coverage.xml +*.cover +*.py,cover +.hypothesis/ +.pytest_cache/ +cover/ + +# Translations +*.mo +*.pot + +# Django stuff: +*.log +local_settings.py +db.sqlite3 +db.sqlite3-journal + +# Flask stuff: +instance/ +.webassets-cache + +# Scrapy stuff: +.scrapy + +# Sphinx documentation +docs/_build/ + +# PyBuilder +.pybuilder/ +target/ + +# Jupyter Notebook +.ipynb_checkpoints + +# IPython +profile_default/ +ipython_config.py + +# pyenv +# For a library or package, you might want to ignore these files since the code is +# intended to run in multiple environments; otherwise, check them in: +# .python-version + +# pipenv +# According to pypa/pipenv#598, it is recommended to include Pipfile.lock in version control. +# However, in case of collaboration, if having platform-specific dependencies or dependencies +# having no cross-platform support, pipenv may install dependencies that don't work, or not +# install all needed dependencies. +#Pipfile.lock + +# poetry +# Similar to Pipfile.lock, it is generally recommended to include poetry.lock in version control. +# This is especially recommended for binary packages to ensure reproducibility, and is more +# commonly ignored for libraries. +# https://python-poetry.org/docs/basic-usage/#commit-your-poetrylock-file-to-version-control +#poetry.lock + +# pdm +# Similar to Pipfile.lock, it is generally recommended to include pdm.lock in version control. +#pdm.lock +# pdm stores project-wide configurations in .pdm.toml, but it is recommended to not include it +# in version control. +# https://pdm.fming.dev/#use-with-ide +.pdm.toml + +# PEP 582; used by e.g. github.com/David-OConnor/pyflow and github.com/pdm-project/pdm +__pypackages__/ + +# Celery stuff +celerybeat-schedule +celerybeat.pid + +# SageMath parsed files +*.sage.py + +# Environments +.env +.venv +env/ +venv/ +ENV/ +env.bak/ +venv.bak/ + +# Spyder project settings +.spyderproject +.spyproject + +# Rope project settings +.ropeproject + +# mkdocs documentation +/site + +# mypy +.mypy_cache/ +.dmypy.json +dmypy.json + +# Pyre type checker +.pyre/ + +# pytype static type analyzer +.pytype/ + +# Cython debug symbols +cython_debug/ + +# PyCharm +# JetBrains specific template is maintained in a separate JetBrains.gitignore that can +# be found at https://github.com/github/gitignore/blob/main/Global/JetBrains.gitignore +# and can be added to the global gitignore or merged into this file. For a more nuclear +# option (not recommended) you can uncomment the following to ignore the entire idea folder. +#.idea/ + +########################################################################################## +# Rust +# From: https://github.com/github/gitignore/blob/main/Rust.gitignore +########################################################################################## +# Generated by Cargo +# will have compiled files and executables +debug/ +target/ + +# Remove Cargo.lock from gitignore if creating an executable, leave it for libraries +# More information here https://doc.rust-lang.org/cargo/guide/cargo-toml-vs-cargo-lock.html +Cargo.lock + +# These are backup files generated by rustfmt +**/*.rs.bk + +# MSVC Windows builds of rustc generate these, which store debugging information +*.pdb + + +########################################################################################## +# Misc +########################################################################################## +tmp* diff --git a/example/base/.pre-commit-config.yaml b/example/base/.pre-commit-config.yaml new file mode 100644 index 0000000..535e05e --- /dev/null +++ b/example/base/.pre-commit-config.yaml @@ -0,0 +1,52 @@ +default_language_version: + python: python3 + +repos: + ############################################################################# + # Misc + ############################################################################# + - repo: https://github.com/pre-commit/pre-commit-hooks + rev: v4.6.0 + hooks: + - id: check-merge-conflict # Searches for merge conflict markers within files. + - id: check-added-large-files # Blocks commits that add large files. Default limit is 500kB. + # Can be configured with args, e.g., '--maxkb=1000' to change the limit. + # exclude: 'your_dir/.*' + # args: ['--maxkb=5000'] + - id: check-case-conflict # Identifies potential case-insensitive file name conflicts. + - id: check-ast # Validates the syntax of Python files. + - id: check-symlinks # Detects broken symlinks. + - id: trailing-whitespace # Removes any trailing whitespace at the end of lines. + - id: end-of-file-fixer # Ensures files end with a single newline or are empty. + + ############################################################################# + # JSON, TOML + ############################################################################# + - repo: https://github.com/pre-commit/pre-commit-hooks + rev: v4.6.0 + hooks: + - id: check-json # Validates JSON files to ensure they are properly formatted and syntactically correct. + types: [json] + + ############################################################################# + # Shell + ############################################################################# + - repo: https://github.com/jumanjihouse/pre-commit-hooks + rev: 3.0.0 + hooks: + - id: shfmt # Formats shell scripts to a standard convention using shfmt. + - id: shellcheck # Lints shell scripts to identify syntax and usage errors, with a specified severity of 'warning'. + args: + - --severity=warning + ############################################################################# + # CSS, Markdown, JavaScript, TypeScript, YAML style formatter + ############################################################################# + - repo: https://github.com/pre-commit/mirrors-prettier + rev: v4.0.0-alpha.8 + hooks: + - id: prettier # An opinionated code formatter supporting multiple languages. + name: prettier + args: [--config, .ci/prettier.json, --write] + types_or: + - yaml + - markdown diff --git a/example/base/Makefile b/example/base/Makefile new file mode 100644 index 0000000..ca98dfa --- /dev/null +++ b/example/base/Makefile @@ -0,0 +1,37 @@ +SHFMT_VERSION := v3.8.0 + +.PHONY: setuppc +setuppc: + @echo "Setting up pre-commit and hooks..." + python3 -m pip install pre-commit + pre-commit install + +ifeq ($(shell uname),Darwin) + @echo "Setting up shfmt (macOS)..." + brew install shfmt + + @echo "Setting up shellcheck (macOS)..." + brew install shellcheck +else ifeq ($(shell uname -s),Linux) +ifeq ($(shell uname -m),x86_64) + @echo "Setting up shfmt for amd64 (Linux)..." + wget -qO shfmt "https://github.com/mvdan/sh/releases/download/${SHFMT_VERSION}/shfmt_${SHFMT_VERSION}_linux_amd64" +else ifeq ($(shell uname -m),aarch64) + @echo "Setting up shfmt for arm64 (Linux)..." + wget -qO shfmt "https://github.com/mvdan/sh/releases/download/${SHFMT_VERSION}/shfmt_${SHFMT_VERSION}_linux_arm64" +else + @echo "Unsupported architecture $(shell uname -m)! Update this Makefile!" + exit 1 +endif + chmod +x shfmt + sudo mv shfmt /usr/local/bin/shfmt + @echo "Setting up shellcheck (Linux)..." + sudo apt-get install shellcheck || sudo yum install shellcheck || sudo dnf install shellcheck +else + @echo "Unsupported operating system! Update this Makefile or use macOS/Linux." + exit 1 +endif + +.PHONY: reqtxt +reqtxt: + poetry export -f requirements.txt --output requirements.txt diff --git a/example/python/.cpa/flake8.cfg b/example/python/.ci/flake8.cfg similarity index 100% rename from example/python/.cpa/flake8.cfg rename to example/python/.ci/flake8.cfg diff --git a/example/rust/.cpa/prettier.json b/example/python/.ci/prettier.json similarity index 100% rename from example/rust/.cpa/prettier.json rename to example/python/.ci/prettier.json diff --git a/example/python/.github/workflows/ci.yaml b/example/python/.github/workflows/ci.yaml index 660edd4..e414df1 100644 --- a/example/python/.github/workflows/ci.yaml +++ b/example/python/.github/workflows/ci.yaml @@ -1,11 +1,11 @@ -name: CI +name: ci on: pull_request: # Start the job on all PRs - branches: [master, main] - types: [synchronize, opened, reopened, ready_for_review] - push: # Start the job on all main branch push - branches: [master, main] + push: + branches: + - master + - main jobs: precommit: @@ -14,15 +14,14 @@ jobs: steps: - name: Checkout code uses: actions/checkout@v4 + with: + fetch-depth: 0 - name: Set up Python uses: actions/setup-python@v4 with: python-version: "3.10" - - name: Set shfmt version environment variable - run: echo "SHFMT_VERSION=v3.7.0" >> $GITHUB_ENV - - name: Cache pip dependencies uses: actions/cache@v3 with: @@ -35,9 +34,8 @@ jobs: uses: actions/cache@v3 with: path: /usr/local/bin/shfmt - key: ${{ runner.os }}-shfmt-${{ env.SHFMT_VERSION }} + key: ${{ runner.os }}-shfmt- restore-keys: | - ${{ runner.os }}-shfmt-${{ env.SHFMT_VERSION }} ${{ runner.os }}-shfmt- - name: Cache Pre-Commit environments @@ -51,19 +49,7 @@ jobs: - name: Install dependencies run: | - python -m pip install pre-commit - pre-commit install - - - name: Install shfmt - run: | - SHFMT_VERSION=${{ env.SHFMT_VERSION }} - SHFMT_BIN="shfmt_${SHFMT_VERSION}_linux_amd64" - if [[ ! -f /usr/local/bin/shfmt ]]; then - wget -O shfmt "https://github.com/mvdan/sh/releases/download/${SHFMT_VERSION}/${SHFMT_BIN}" - chmod +x shfmt - sudo mv shfmt /usr/local/bin/ - fi - sudo apt-get install shellcheck + make setuppc - name: Run pre-commits env: @@ -73,14 +59,7 @@ jobs: DEFAULT_BRANCH=$(curl -H "Authorization: token $GITHUB_TOKEN" \ "https://api.github.com/repos/$GITHUB_REPOSITORY" | jq -r '.default_branch') - git fetch - CUR_SHA=$(git log --pretty=tformat:"%H" -n1 . | tail -n1) - - echo "Default branch is $DEFAULT_BRANCH" - echo "Current SHA is $CUR_SHA" + echo "Default branch = $DEFAULT_BRANCH" + echo "Current SHA = ${{ github. sha }}" - if [[ $GITHUB_REF == "refs/heads/$DEFAULT_BRANCH" ]]; then - pre-commit run --all - else - pre-commit run --from-ref origin/$DEFAULT_BRANCH --to-ref $CUR_SHA - fi + pre-commit run --from-ref origin/$DEFAULT_BRANCH --to-ref "${{ github. sha }}" diff --git a/example/python/.pre-commit-config.yaml b/example/python/.pre-commit-config.yaml index ca53ef4..e4b059a 100644 --- a/example/python/.pre-commit-config.yaml +++ b/example/python/.pre-commit-config.yaml @@ -93,7 +93,7 @@ repos: # - id: poetry-lock # Ensures the poetry.lock file is up-to-date with the pyproject.toml changes. ############################################################################# - # CSS, Markdown, JavaScript, TypeScript, YAML style formatter + # Markdown, JavaScript, TypeScript, YAML style formatter ############################################################################# - repo: https://github.com/pre-commit/mirrors-prettier rev: v3.0.3 @@ -102,10 +102,8 @@ repos: name: prettier args: [--config, .ci/prettier.json, --write] types_or: - - css - - scss - - ts - - tsx - javascript + - tsx + - ts - yaml - markdown diff --git a/example/python/Makefile b/example/python/Makefile index 5c2a614..ca98dfa 100644 --- a/example/python/Makefile +++ b/example/python/Makefile @@ -1,3 +1,5 @@ +SHFMT_VERSION := v3.8.0 + .PHONY: setuppc setuppc: @echo "Setting up pre-commit and hooks..." @@ -10,16 +12,26 @@ ifeq ($(shell uname),Darwin) @echo "Setting up shellcheck (macOS)..." brew install shellcheck +else ifeq ($(shell uname -s),Linux) +ifeq ($(shell uname -m),x86_64) + @echo "Setting up shfmt for amd64 (Linux)..." + wget -qO shfmt "https://github.com/mvdan/sh/releases/download/${SHFMT_VERSION}/shfmt_${SHFMT_VERSION}_linux_amd64" +else ifeq ($(shell uname -m),aarch64) + @echo "Setting up shfmt for arm64 (Linux)..." + wget -qO shfmt "https://github.com/mvdan/sh/releases/download/${SHFMT_VERSION}/shfmt_${SHFMT_VERSION}_linux_arm64" else - @echo "Setting up shfmt (Linux)..." - wget -qO shfmt "https://github.com/mvdan/sh/releases/download/v3.7.0/shfmt_v3.7.0_$(shell uname -m)" + @echo "Unsupported architecture $(shell uname -m)! Update this Makefile!" + exit 1 +endif chmod +x shfmt sudo mv shfmt /usr/local/bin/shfmt - @echo "Setting up shellcheck (Linux)..." sudo apt-get install shellcheck || sudo yum install shellcheck || sudo dnf install shellcheck +else + @echo "Unsupported operating system! Update this Makefile or use macOS/Linux." + exit 1 endif .PHONY: reqtxt reqtxt: - poetry export -f requirements.txt --output requirements.txt --without-hashes + poetry export -f requirements.txt --output requirements.txt diff --git a/example/rust/.ci/prettier.json b/example/rust/.ci/prettier.json new file mode 100644 index 0000000..64f80e2 --- /dev/null +++ b/example/rust/.ci/prettier.json @@ -0,0 +1,7 @@ +{ + "bracketSpacing": true, + "singleQuote": false, + "useTabs": false, + "tabWidth": 2, + "trailingComma": "all" +} diff --git a/example/rust/.github/workflows/ci.yaml b/example/rust/.github/workflows/ci.yaml index 660edd4..e414df1 100644 --- a/example/rust/.github/workflows/ci.yaml +++ b/example/rust/.github/workflows/ci.yaml @@ -1,11 +1,11 @@ -name: CI +name: ci on: pull_request: # Start the job on all PRs - branches: [master, main] - types: [synchronize, opened, reopened, ready_for_review] - push: # Start the job on all main branch push - branches: [master, main] + push: + branches: + - master + - main jobs: precommit: @@ -14,15 +14,14 @@ jobs: steps: - name: Checkout code uses: actions/checkout@v4 + with: + fetch-depth: 0 - name: Set up Python uses: actions/setup-python@v4 with: python-version: "3.10" - - name: Set shfmt version environment variable - run: echo "SHFMT_VERSION=v3.7.0" >> $GITHUB_ENV - - name: Cache pip dependencies uses: actions/cache@v3 with: @@ -35,9 +34,8 @@ jobs: uses: actions/cache@v3 with: path: /usr/local/bin/shfmt - key: ${{ runner.os }}-shfmt-${{ env.SHFMT_VERSION }} + key: ${{ runner.os }}-shfmt- restore-keys: | - ${{ runner.os }}-shfmt-${{ env.SHFMT_VERSION }} ${{ runner.os }}-shfmt- - name: Cache Pre-Commit environments @@ -51,19 +49,7 @@ jobs: - name: Install dependencies run: | - python -m pip install pre-commit - pre-commit install - - - name: Install shfmt - run: | - SHFMT_VERSION=${{ env.SHFMT_VERSION }} - SHFMT_BIN="shfmt_${SHFMT_VERSION}_linux_amd64" - if [[ ! -f /usr/local/bin/shfmt ]]; then - wget -O shfmt "https://github.com/mvdan/sh/releases/download/${SHFMT_VERSION}/${SHFMT_BIN}" - chmod +x shfmt - sudo mv shfmt /usr/local/bin/ - fi - sudo apt-get install shellcheck + make setuppc - name: Run pre-commits env: @@ -73,14 +59,7 @@ jobs: DEFAULT_BRANCH=$(curl -H "Authorization: token $GITHUB_TOKEN" \ "https://api.github.com/repos/$GITHUB_REPOSITORY" | jq -r '.default_branch') - git fetch - CUR_SHA=$(git log --pretty=tformat:"%H" -n1 . | tail -n1) - - echo "Default branch is $DEFAULT_BRANCH" - echo "Current SHA is $CUR_SHA" + echo "Default branch = $DEFAULT_BRANCH" + echo "Current SHA = ${{ github. sha }}" - if [[ $GITHUB_REF == "refs/heads/$DEFAULT_BRANCH" ]]; then - pre-commit run --all - else - pre-commit run --from-ref origin/$DEFAULT_BRANCH --to-ref $CUR_SHA - fi + pre-commit run --from-ref origin/$DEFAULT_BRANCH --to-ref "${{ github. sha }}" diff --git a/example/rust/.pre-commit-config.yaml b/example/rust/.pre-commit-config.yaml index 6bb8930..f902a41 100644 --- a/example/rust/.pre-commit-config.yaml +++ b/example/rust/.pre-commit-config.yaml @@ -52,7 +52,7 @@ repos: - id: clippy # Lints Rust code with clippy for common mistakes and style issues ############################################################################# - # CSS, Markdown, JavaScript, TypeScript, YAML style formatter + # Markdown, JavaScript, TypeScript, YAML style formatter ############################################################################# - repo: https://github.com/pre-commit/mirrors-prettier rev: v3.0.3 @@ -61,10 +61,8 @@ repos: name: prettier args: [--config, .ci/prettier.json, --write] types_or: - - css - - scss - - ts - - tsx - javascript + - tsx + - ts - yaml - markdown diff --git a/example/rust/Makefile b/example/rust/Makefile index 5c2a614..ca98dfa 100644 --- a/example/rust/Makefile +++ b/example/rust/Makefile @@ -1,3 +1,5 @@ +SHFMT_VERSION := v3.8.0 + .PHONY: setuppc setuppc: @echo "Setting up pre-commit and hooks..." @@ -10,16 +12,26 @@ ifeq ($(shell uname),Darwin) @echo "Setting up shellcheck (macOS)..." brew install shellcheck +else ifeq ($(shell uname -s),Linux) +ifeq ($(shell uname -m),x86_64) + @echo "Setting up shfmt for amd64 (Linux)..." + wget -qO shfmt "https://github.com/mvdan/sh/releases/download/${SHFMT_VERSION}/shfmt_${SHFMT_VERSION}_linux_amd64" +else ifeq ($(shell uname -m),aarch64) + @echo "Setting up shfmt for arm64 (Linux)..." + wget -qO shfmt "https://github.com/mvdan/sh/releases/download/${SHFMT_VERSION}/shfmt_${SHFMT_VERSION}_linux_arm64" else - @echo "Setting up shfmt (Linux)..." - wget -qO shfmt "https://github.com/mvdan/sh/releases/download/v3.7.0/shfmt_v3.7.0_$(shell uname -m)" + @echo "Unsupported architecture $(shell uname -m)! Update this Makefile!" + exit 1 +endif chmod +x shfmt sudo mv shfmt /usr/local/bin/shfmt - @echo "Setting up shellcheck (Linux)..." sudo apt-get install shellcheck || sudo yum install shellcheck || sudo dnf install shellcheck +else + @echo "Unsupported operating system! Update this Makefile or use macOS/Linux." + exit 1 endif .PHONY: reqtxt reqtxt: - poetry export -f requirements.txt --output requirements.txt --without-hashes + poetry export -f requirements.txt --output requirements.txt diff --git a/src/presets.rs b/src/presets.rs index 2c96ac6..91c2234 100644 --- a/src/presets.rs +++ b/src/presets.rs @@ -44,10 +44,6 @@ pub struct Makefile {} #[template(path = ".github/workflows/ci.yaml", escape = "none")] pub struct GhCI {} -#[derive(Template)] -#[template(path = "base/ci.yaml", escape = "none")] -pub struct GhCIBase {} - #[derive(Template)] #[template(path = ".ci/prettier.json", escape = "none")] pub struct Prettier {} @@ -152,7 +148,7 @@ pub fn base(name: &str, create: bool, _lang: &Language) -> String { let _ = fs::create_dir_all(format!("{}/.github/workflows", prefix)); // Render common files - GhCIBase {}.write(&prefix, ".github/workflows/ci.yaml"); + GhCI {}.write(&prefix, ".github/workflows/ci.yaml"); GitIgnore {}.write(&prefix, ".gitignore"); Makefile {}.write(&prefix, "Makefile"); PreCommitConfigBase {}.write(&prefix, ".pre-commit-config.yaml"); diff --git a/templates/.github/workflows/ci.yaml b/templates/.github/workflows/ci.yaml index 3d55ea8..6ab5ca2 100644 --- a/templates/.github/workflows/ci.yaml +++ b/templates/.github/workflows/ci.yaml @@ -1,8 +1,12 @@ {% raw -%} -name: CI +name: ci on: pull_request: # Start the job on all PRs + push: + branches: + - master + - main jobs: precommit: @@ -52,7 +56,9 @@ jobs: env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} run: | - DEFAULT_BRANCH=$(git symbolic-ref refs/remotes/origin/HEAD | sed 's@^refs/remotes/origin/@@') + REPO_NAME=$(echo $GITHUB_REPOSITORY | sed 's/^.*\///') + DEFAULT_BRANCH=$(curl -H "Authorization: token $GITHUB_TOKEN" \ + "https://api.github.com/repos/$GITHUB_REPOSITORY" | jq -r '.default_branch') echo "Default branch = $DEFAULT_BRANCH" echo "Current SHA = ${{ github. sha }}" diff --git a/templates/Makefile b/templates/Makefile index 5c2a614..ca98dfa 100644 --- a/templates/Makefile +++ b/templates/Makefile @@ -1,3 +1,5 @@ +SHFMT_VERSION := v3.8.0 + .PHONY: setuppc setuppc: @echo "Setting up pre-commit and hooks..." @@ -10,16 +12,26 @@ ifeq ($(shell uname),Darwin) @echo "Setting up shellcheck (macOS)..." brew install shellcheck +else ifeq ($(shell uname -s),Linux) +ifeq ($(shell uname -m),x86_64) + @echo "Setting up shfmt for amd64 (Linux)..." + wget -qO shfmt "https://github.com/mvdan/sh/releases/download/${SHFMT_VERSION}/shfmt_${SHFMT_VERSION}_linux_amd64" +else ifeq ($(shell uname -m),aarch64) + @echo "Setting up shfmt for arm64 (Linux)..." + wget -qO shfmt "https://github.com/mvdan/sh/releases/download/${SHFMT_VERSION}/shfmt_${SHFMT_VERSION}_linux_arm64" else - @echo "Setting up shfmt (Linux)..." - wget -qO shfmt "https://github.com/mvdan/sh/releases/download/v3.7.0/shfmt_v3.7.0_$(shell uname -m)" + @echo "Unsupported architecture $(shell uname -m)! Update this Makefile!" + exit 1 +endif chmod +x shfmt sudo mv shfmt /usr/local/bin/shfmt - @echo "Setting up shellcheck (Linux)..." sudo apt-get install shellcheck || sudo yum install shellcheck || sudo dnf install shellcheck +else + @echo "Unsupported operating system! Update this Makefile or use macOS/Linux." + exit 1 endif .PHONY: reqtxt reqtxt: - poetry export -f requirements.txt --output requirements.txt --without-hashes + poetry export -f requirements.txt --output requirements.txt diff --git a/test.sh b/test.sh new file mode 100644 index 0000000..a93912b --- /dev/null +++ b/test.sh @@ -0,0 +1,6 @@ +#!/bin/bash + +cargo install --path . +cpa create --name example/python --preset python3.10 +cpa create --name example/rust --preset rust +cpa create --name example/base --preset base