diff --git a/.editorconfig b/.editorconfig index 5fa81a91..f0bca154 100644 --- a/.editorconfig +++ b/.editorconfig @@ -5,16 +5,27 @@ root = true [*] charset = utf-8 end_of_line = lf -indent_size = 2 indent_style = space +indent_size = 2 insert_final_newline = true trim_trailing_whitespace = true -[*.yaml] +[*.{yaml,yml}] max_line_length = 150 [*.md] trim_trailing_whitespace = false +max_line_length = off -[{**/layouts/shortcodes/*.html, **/layouts/_default/_markup/*.html}] +[*.py] +indent_size = 4 + +[Makefile] +indent_style = tab + +[*.go] +indent_style = tab +tab_width = 8 + +[{**/layouts/_shortcodes/*.html, **/layouts/_markup/*.html}] insert_final_newline = false diff --git a/.github/workflows/build-starters.yaml b/.github/workflows/ci-build-starters-matrix.yml similarity index 96% rename from .github/workflows/build-starters.yaml rename to .github/workflows/ci-build-starters-matrix.yml index e43e5d54..dfa352a1 100644 --- a/.github/workflows/build-starters.yaml +++ b/.github/workflows/ci-build-starters-matrix.yml @@ -1,4 +1,5 @@ name: CI - Build Starters Matrix +run-name: ${{ github.workflow }} - ${{ github.ref_name }} on: schedule: @@ -73,15 +74,15 @@ jobs: exit 1 fi + - name: Enable Corepack (for pnpm cache) + run: corepack enable + - name: Setup Node.js uses: actions/setup-node@v4 with: node-version: "${{ env.NODE_VERSION }}" cache: "pnpm" - - name: Enable Corepack (use pnpm from package.json) - run: corepack enable - - name: Activate pnpm from root package.json run: pnpm --version diff --git a/.github/workflows/build-test-site.yaml b/.github/workflows/ci-build-test-site.yml similarity index 96% rename from .github/workflows/build-test-site.yaml rename to .github/workflows/ci-build-test-site.yml index 36234699..d7828738 100644 --- a/.github/workflows/build-test-site.yaml +++ b/.github/workflows/ci-build-test-site.yml @@ -1,4 +1,5 @@ name: CI - Build Test Site +run-name: ${{ github.workflow }} - ${{ github.ref_name }} on: push: @@ -61,15 +62,15 @@ jobs: exit 1 fi + - name: Enable Corepack (for pnpm cache) + run: corepack enable + - name: Setup Node.js uses: actions/setup-node@v4 with: node-version: "${{ env.NODE_VERSION }}" cache: "pnpm" - - name: Enable Corepack (use pnpm from package.json) - run: corepack enable - - name: Activate pnpm from root package.json run: pnpm --version diff --git a/.github/workflows/lint.yaml b/.github/workflows/ci-lint.yml similarity index 91% rename from .github/workflows/lint.yaml rename to .github/workflows/ci-lint.yml index 7a8035d9..1dee39f1 100644 --- a/.github/workflows/lint.yaml +++ b/.github/workflows/ci-lint.yml @@ -1,4 +1,5 @@ name: CI - Lint +run-name: ${{ github.workflow }} - ${{ github.ref_name }} on: push: @@ -39,12 +40,12 @@ jobs: runs-on: ubuntu-latest steps: - uses: actions/checkout@v5 + - name: Enable Corepack (for pnpm cache) + run: corepack enable - uses: actions/setup-node@v4 with: node-version: "${{ env.NODE_VERSION }}" cache: "pnpm" - - name: Enable Corepack (use pnpm from package.json) - run: corepack enable - name: Activate pnpm from root package.json run: pnpm --version - name: Install dependencies diff --git a/.github/workflows/labeler.yml b/.github/workflows/ci-pr-labeler.yml similarity index 85% rename from .github/workflows/labeler.yml rename to .github/workflows/ci-pr-labeler.yml index 9a028305..7cb51345 100644 --- a/.github/workflows/labeler.yml +++ b/.github/workflows/ci-pr-labeler.yml @@ -1,4 +1,5 @@ name: CI - PR Labeler +run-name: ${{ github.workflow }} - ${{ github.ref_name }} on: pull_request_target: diff --git a/.github/workflows/codeql.yml b/.github/workflows/codeql.yml index bcdb3ab3..e7069af7 100644 --- a/.github/workflows/codeql.yml +++ b/.github/workflows/codeql.yml @@ -1,4 +1,5 @@ name: Security - CodeQL +run-name: ${{ github.workflow }} - ${{ github.ref_name }} on: schedule: diff --git a/.github/workflows/contributor-welcome.yaml b/.github/workflows/community-welcome.yml similarity index 93% rename from .github/workflows/contributor-welcome.yaml rename to .github/workflows/community-welcome.yml index 9665a150..420c6fc4 100644 --- a/.github/workflows/contributor-welcome.yaml +++ b/.github/workflows/community-welcome.yml @@ -1,4 +1,5 @@ -name: Welcome New Contributor +name: Community - Welcome New Contributor +run-name: ${{ github.workflow }} - ${{ github.ref_name }} on: pull_request_target: diff --git a/.github/workflows/stale.yml b/.github/workflows/maintenance-stale.yml similarity index 86% rename from .github/workflows/stale.yml rename to .github/workflows/maintenance-stale.yml index 77bed762..9813226d 100644 --- a/.github/workflows/stale.yml +++ b/.github/workflows/maintenance-stale.yml @@ -1,7 +1,8 @@ -name: 'Close stale issues and PRs' +name: "Maintenance - Close Stale Issues and PRs" +run-name: ${{ github.workflow }} - ${{ github.ref_name }} on: schedule: - - cron: '30 1 * * *' + - cron: "30 1 * * *" permissions: contents: write # only for delete-branch option @@ -35,5 +36,5 @@ jobs: days-before-close: 5 stale-issue-label: stale stale-pr-label: stale - exempt-issue-labels: 'keep,enhancement,bug,documentation' - exempt-pr-labels: 'keep,enhancement,bug,documentation' + exempt-issue-labels: "keep,enhancement,bug,documentation" + exempt-pr-labels: "keep,enhancement,bug,documentation" diff --git a/.github/workflows/release-modules.yml b/.github/workflows/release-hugoblox-modules.yml similarity index 93% rename from .github/workflows/release-modules.yml rename to .github/workflows/release-hugoblox-modules.yml index b85b773f..a009d434 100644 --- a/.github/workflows/release-modules.yml +++ b/.github/workflows/release-hugoblox-modules.yml @@ -1,4 +1,5 @@ -name: Release HugoBlox Modules +name: Release - HugoBlox Modules +run-name: ${{ github.workflow }} - ${{ github.ref_name }} on: workflow_dispatch: @@ -33,7 +34,7 @@ jobs: - name: Set up Python uses: actions/setup-python@v6 with: - python-version: '3.13' + python-version: "3.13" - name: Install Poetry uses: snok/install-poetry@v1 diff --git a/.github/workflows/release-package-splitter.yml b/.github/workflows/release-package-splitter.yml new file mode 100644 index 00000000..f3cf5fe6 --- /dev/null +++ b/.github/workflows/release-package-splitter.yml @@ -0,0 +1,59 @@ +name: "Release - Package Splitter" +run-name: ${{ github.workflow }} - ${{ github.ref_name }} + +on: + push: + branches: + - main + workflow_dispatch: + # IMPORTANT: workflows below must match the upstream workflow's `name:` exactly + workflow_run: + workflows: + - Release - HugoBlox Modules + types: + - completed + +env: + GITHUB_TOKEN: ${{ secrets.ACCESS_TOKEN }} + +jobs: + packages_split: + # Run normally for push/workflow_dispatch; for workflow_run only run on success + if: ${{ github.event_name != 'workflow_run' || github.event.workflow_run.conclusion == 'success' }} + runs-on: ubuntu-latest + + strategy: + fail-fast: false + matrix: + # define package to repository map + package: + - local_path: "starters/academic-cv" + split_repository: "theme-academic-cv" + - local_path: "starters/resume" + split_repository: "theme-resume" + - local_path: "starters/blog" + split_repository: "theme-blog" + - local_path: "starters/documentation" + split_repository: "theme-documentation" + - local_path: "starters/link-in-bio" + split_repository: "theme-link-in-bio" + - local_path: "starters/landing-page" + split_repository: "theme-landing-page" + + steps: + - uses: actions/checkout@v5 + + # step if no tag is pushed + - if: ${{ !startsWith(github.ref, 'refs/tags/') }} + uses: "symplify/monorepo-split-github-action@v2.3.0" + with: + # ↓ split "packages/" directory + package_directory: "${{ matrix.package.local_path }}" + + # ↓ into https://github.com/HugoBlox/ repository + repository_organization: "HugoBlox" + repository_name: "${{ matrix.package.split_repository }}" + + # ↓ the user signed under the split commit + user_name: "Splitter Bot" + user_email: "no.reply@hugoblox.com" diff --git a/.github/workflows/security-codeql.yml b/.github/workflows/security-codeql.yml new file mode 100644 index 00000000..e7069af7 --- /dev/null +++ b/.github/workflows/security-codeql.yml @@ -0,0 +1,51 @@ +name: Security - CodeQL +run-name: ${{ github.workflow }} - ${{ github.ref_name }} + +on: + schedule: + - cron: "0 3 * * 0" + push: + branches: [main] + paths: + - "**/*.js" + - "**/*.jsx" + - "**/*.ts" + - "**/*.tsx" + - "**/*.py" + - ".github/workflows/codeql.yml" + pull_request: + branches: [main] + paths: + - "**/*.js" + - "**/*.jsx" + - "**/*.ts" + - "**/*.tsx" + - "**/*.py" + +permissions: + actions: read + contents: read + security-events: write + +jobs: + analyze: + name: Analyze (CodeQL) + runs-on: ubuntu-latest + strategy: + fail-fast: false + steps: + - name: Checkout repository + uses: actions/checkout@v5 + + - name: Initialize CodeQL + uses: github/codeql-action/init@v3 + with: + languages: "javascript-typescript,python" + + - name: Autobuild + uses: github/codeql-action/autobuild@v3 + + - name: Perform CodeQL Analysis + uses: github/codeql-action/analyze@v3 + with: + category: "/language:javascript-typescript" diff --git a/.github/workflows/split-packages.yaml b/.github/workflows/split-packages.yaml deleted file mode 100644 index 8a7475ee..00000000 --- a/.github/workflows/split-packages.yaml +++ /dev/null @@ -1,58 +0,0 @@ -name: 'Package Splitter' - -on: - push: - branches: - - main - workflow_dispatch: - # IMPORTANT: workflows below must match the upstream workflow's `name:` exactly - workflow_run: - workflows: - - Release HugoBlox Modules - types: - - completed - -env: - GITHUB_TOKEN: ${{ secrets.ACCESS_TOKEN }} - -jobs: - packages_split: - # Run normally for push/workflow_dispatch; for workflow_run only run on success - if: ${{ github.event_name != 'workflow_run' || github.event.workflow_run.conclusion == 'success' }} - runs-on: ubuntu-latest - - strategy: - fail-fast: false - matrix: - # define package to repository map - package: - - local_path: 'starters/academic-cv' - split_repository: 'theme-academic-cv' - - local_path: 'starters/resume' - split_repository: 'theme-resume' - - local_path: 'starters/blog' - split_repository: 'theme-blog' - - local_path: 'starters/documentation' - split_repository: 'theme-documentation' - - local_path: 'starters/link-in-bio' - split_repository: 'theme-link-in-bio' - - local_path: 'starters/landing-page' - split_repository: 'theme-landing-page' - - steps: - - uses: actions/checkout@v5 - - # step if no tag is pushed - - if: ${{ !startsWith(github.ref, 'refs/tags/') }} - uses: 'symplify/monorepo-split-github-action@v2.3.0' - with: - # ↓ split "packages/" directory - package_directory: '${{ matrix.package.local_path }}' - - # ↓ into https://github.com/HugoBlox/ repository - repository_organization: 'HugoBlox' - repository_name: '${{ matrix.package.split_repository }}' - - # ↓ the user signed under the split commit - user_name: 'Splitter Bot' - user_email: 'no.reply@hugoblox.com' diff --git a/hugo-blox-builder.code-workspace b/hugo-blox-builder.code-workspace index e974c885..c8628d7a 100644 --- a/hugo-blox-builder.code-workspace +++ b/hugo-blox-builder.code-workspace @@ -27,29 +27,41 @@ "workbench.editor.labelFormat": "medium", "breadcrumbs.enabled": true, "npm.packageManager": "pnpm", - + "editor.detectIndentation": false, "editor.formatOnSave": true, "editor.defaultFormatter": "esbenp.prettier-vscode", "editor.codeActionsOnSave": { - "source.fixAll.eslint": "explicit", "source.fixAll.stylelint": "explicit" }, - "[javascript]": {"editor.defaultFormatter": "esbenp.prettier-vscode"}, - "[typescript]": {"editor.defaultFormatter": "esbenp.prettier-vscode"}, - "[json]": {"editor.defaultFormatter": "esbenp.prettier-vscode"}, - "[css]": {"editor.defaultFormatter": "esbenp.prettier-vscode"}, - "[html]": {"editor.defaultFormatter": "esbenp.prettier-vscode"}, - "[markdown]": {"editor.defaultFormatter": "esbenp.prettier-vscode"}, + "[javascript]": { "editor.defaultFormatter": "biomejs.biome" }, + "[typescript]": { "editor.defaultFormatter": "biomejs.biome" }, + "[json]": { "editor.defaultFormatter": "biomejs.biome" }, + "[css]": { "editor.defaultFormatter": "esbenp.prettier-vscode" }, + "[html]": { "editor.defaultFormatter": "esbenp.prettier-vscode" }, + "[markdown]": { + "editor.defaultFormatter": "esbenp.prettier-vscode", + "files.trimTrailingWhitespace": false + }, + "[python]": { + "editor.tabSize": 4, + "editor.insertSpaces": true + }, - "eslint.workingDirectories": [{"mode": "auto"}], - "eslint.validate": ["javascript", "javascriptreact", "typescript", "typescriptreact"], + "eslint.workingDirectories": [{ "mode": "auto" }], + "eslint.validate": [ + "javascript", + "javascriptreact", + "typescript", + "typescriptreact" + ], "stylelint.validate": ["css"], "tailwindCSS.emmetCompletions": true, - "yaml.validate": true + "yaml.validate": true, + "prettier.useEditorConfig": true }, "extensions": { "recommendations": [ @@ -65,7 +77,12 @@ "streetsidesoftware.code-spell-checker", "mikestead.dotenv", "eamodio.gitlens", - "bierner.markdown-mermaid" + "bierner.markdown-mermaid", + "EditorConfig.EditorConfig", + "biomejs.biome", + "github.vscode-github-actions", + "timonwong.shellcheck", + "budparr.language-hugo-vscode" ] } }