Skip to content

Commit

Permalink
Added Megalinter and configurations as-needed for the template (closes
Browse files Browse the repository at this point in the history
  • Loading branch information
andrewvaughan committed Aug 7, 2023
1 parent c28c39b commit e86452c
Show file tree
Hide file tree
Showing 14 changed files with 203 additions and 2 deletions.
15 changes: 15 additions & 0 deletions .config/dictionaries/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
# CSpell Dictionaries

These `.txt` files contain various dictionaries of custom words that should be accepted by the spelling checker.

Two dictionaries are provided by default:

1. `ops.txt` contains words from the template controls and operations of the project
2. `project.txt` contains words that should be accepted from the project

Additional dictionaries can be added as-needed (e.g., for translations, etc).

## References

* [CSpell Custom Dictionaries](https://cspell.org/docs/dictionaries-custom/)
* [.cspell.json](../linters/.cspell.json)
4 changes: 4 additions & 0 deletions .config/dictionaries/ops.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
devcontainer
megalinter
oxsecurity
stefanzweifel
File renamed without changes.
8 changes: 8 additions & 0 deletions .config/linters/.checkov.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
# This is based on the default Megalinter configuration with some additions
#
# @link https://github.com/oxsecurity/megalinter/blob/main/TEMPLATES/.checkov.yml

quiet: true
skip-check:
- CKV_DOCKER_2
- CKV2_GHA_1
29 changes: 29 additions & 0 deletions .config/linters/.cspell.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
{
"dictionaries": ["ops", "project"],
"dictionaryDefinitions": [
{
"name": "ops",
"path": "../dictionaries/ops.txt",
"addWords": false
},
{
"name": "project",
"path": "../dictionaries/project.txt",
"addWords": true
}
],
"ignorePaths": [
"**/.config/linters/**",
"**/.git/**",
"**/.gitattributes",
"**/.gitignore",
"**/.pnpm-lock.json",
"**/*megalinter*",
"**/node_modules/**",
"**/vscode-extension/**",
"package-lock.json"
],
"language": "en",
"noConfigSearch": true,
"version": "0.2"
}
16 changes: 16 additions & 0 deletions .config/linters/.jscpd.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
{
"threshold": 0,
"reporters": ["html", "markdown"],
"ignore": [
"**/node_modules/**",
"**/.git/**",
"**/.rbenv/**",
"**/.venv/**",
"**/*cache*/**",
"**/.github/**",
"**/.idea/**",
"**/report/**",
"**/*.svg",
"megalinter-reports"
]
}
Empty file removed .github/.empty
Empty file.
90 changes: 90 additions & 0 deletions .github/workflows/mega-linter.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,90 @@
---
# MegaLinter GitHub Action configuration file
# More info at https://megalinter.io
name: MegaLinter

on:
# Trigger mega-linter at every push. Action will also be visible from Pull Requests to master
# push: # Comment this line to trigger action only on pull-requests (not recommended if you don't pay for GH Actions)
pull_request:
branches: [main, production, staging]

env: # Comment env block if you do not want to apply fixes
# Apply linter fixes configuration
APPLY_FIXES: all # When active, APPLY_FIXES must also be defined as environment variable (in github/workflows/mega-linter.yml or other CI tool)
APPLY_FIXES_EVENT: pull_request # Decide which event triggers application of fixes in a commit or a PR (pull_request, push, all)
APPLY_FIXES_MODE: commit # If APPLY_FIXES is used, defines if the fixes are directly committed (commit) or posted in a PR (pull_request)

concurrency:
group: ${{ github.ref }}-${{ github.workflow }}
cancel-in-progress: true

jobs:
build:
name: MegaLinter
runs-on: ubuntu-latest
permissions:
# Give the default GITHUB_TOKEN write permission to commit and push, comment issues & post new PR
# Remove the ones you do not need
contents: write
issues: write
pull-requests: write
steps:
# Git Checkout
- name: Checkout Code
uses: actions/checkout@v3
with:
token: ${{ secrets.PAT || secrets.GITHUB_TOKEN }}
fetch-depth: 0 # If you use VALIDATE_ALL_CODEBASE = true, you can remove this line to improve performances

# MegaLinter
- name: MegaLinter
id: ml
# You can override MegaLinter flavor used to have faster performances
# More info at https://megalinter.io/flavors/
uses: oxsecurity/megalinter@v7
env:
# All available variables are described in documentation
# https://megalinter.io/configuration/
VALIDATE_ALL_CODEBASE: ${{ github.event_name == 'push' && github.ref == 'refs/heads/main' }} # Set true to validate entire codebase
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
# ADD YOUR CUSTOM ENV VARIABLES HERE TO OVERRIDE VALUES OF .mega-linter.yml AT THE ROOT OF YOUR REPOSITORY

# Upload MegaLinter artifacts
- name: Archive production artifacts
if: ${{ success() }} || ${{ failure() }}
uses: actions/upload-artifact@v3
with:
name: MegaLinter reports
path: |
megalinter-reports
mega-linter.log
# Create pull request if applicable (for now works only on PR from same repository, not from forks)
- name: Create Pull Request with applied fixes
id: cpr
if: steps.ml.outputs.has_updated_sources == 1 && (env.APPLY_FIXES_EVENT == 'all' || env.APPLY_FIXES_EVENT == github.event_name) && env.APPLY_FIXES_MODE == 'pull_request' && (github.event_name == 'push' || github.event.pull_request.head.repo.full_name == github.repository) && !contains(github.event.head_commit.message, 'skip fix')
uses: peter-evans/create-pull-request@v5
with:
token: ${{ secrets.PAT || secrets.GITHUB_TOKEN }}
commit-message: "[MegaLinter] Apply linters automatic fixes"
title: "[MegaLinter] Apply linters automatic fixes"
labels: bot
- name: Create PR output
if: steps.ml.outputs.has_updated_sources == 1 && (env.APPLY_FIXES_EVENT == 'all' || env.APPLY_FIXES_EVENT == github.event_name) && env.APPLY_FIXES_MODE == 'pull_request' && (github.event_name == 'push' || github.event.pull_request.head.repo.full_name == github.repository) && !contains(github.event.head_commit.message, 'skip fix')
run: |
echo "Pull Request Number - ${{ steps.cpr.outputs.pull-request-number }}"
echo "Pull Request URL - ${{ steps.cpr.outputs.pull-request-url }}"
# Push new commit if applicable (for now works only on PR from same repository, not from forks)
- name: Prepare commit
if: steps.ml.outputs.has_updated_sources == 1 && (env.APPLY_FIXES_EVENT == 'all' || env.APPLY_FIXES_EVENT == github.event_name) && env.APPLY_FIXES_MODE == 'commit' && github.ref != 'refs/heads/main' && (github.event_name == 'push' || github.event.pull_request.head.repo.full_name == github.repository) && !contains(github.event.head_commit.message, 'skip fix')
run: sudo chown -Rc $UID .git/
- name: Commit and push applied linter fixes
if: steps.ml.outputs.has_updated_sources == 1 && (env.APPLY_FIXES_EVENT == 'all' || env.APPLY_FIXES_EVENT == github.event_name) && env.APPLY_FIXES_MODE == 'commit' && github.ref != 'refs/heads/main' && (github.event_name == 'push' || github.event.pull_request.head.repo.full_name == github.repository) && !contains(github.event.head_commit.message, 'skip fix')
uses: stefanzweifel/git-auto-commit-action@v4
with:
branch: ${{ github.event.pull_request.head.ref || github.head_ref || github.ref }}
commit_message: "[MegaLinter] Apply linters fixes"
commit_user_name: megalinter-bot
commit_user_email: [email protected]
2 changes: 1 addition & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -12,5 +12,5 @@
# MEGALINTER
#

.ruff_cache/
megalinter-reports/
.ruff_cache
1 change: 1 addition & 0 deletions .lycheeignore
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
megalinter\.io
11 changes: 11 additions & 0 deletions .mega-linter.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
# Configuration file for MegaLinter
# See all available variables at https://megalinter.io/configuration/ and in linters documentation

APPLY_FIXES: all
FILEIO_REPORTER: false
FLAVOR_SUGGESTIONS: false
IGNORE_GITIGNORED_FILES: true
LINTER_RULES_PATH: .config/linters
PRINT_ALPACA: false
SHOW_ELAPSED_TIME: true
SHOW_SKIPPED_LINTERS: false
13 changes: 13 additions & 0 deletions Makefile
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
.PHONY: all test clean

all:
$(error Not implemented)

test: test-lint

test-lint:
npx mega-linter-runner

clean:
rm -rf megalinter-reports
rm -rf .ruff_cache
11 changes: 10 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,14 +6,23 @@ When creating a new project from this template, ensure the following steps are t

- [ ] Add and/or remove any files or folders that do not apply to the project
- [ ] Remove all `.empty` files with `find . -type f -name '.empty' -delete`

Linting Configuration:

- [ ] Update `.github/workflows/mega-linter.yml` with a flavor more-appropriate for your project
- [ ] Update `.mega-linter.yml` and the files in `.config/linters` to suit your project needs
- [ ] Update `.config/dictionaries/project.txt` with any dictionary words custom to this project

Wrap-up:

- [ ] Remove the entire `Checklist` section from the `README.md` file, including sub-sections

### Folder Structure

This template comes with the following standard folder structure:

| Folder | Purpose |
| :----------------------------- | :----------------------------------------------------------------------------------------------------------------------------------------------------- |
|:-------------------------------|:-------------------------------------------------------------------------------------------------------------------------------------------------------|
| [.build](.build) | All scripts and resources tied to deployment (e.g., Docker Compose) |
| [.config](.config) | All configuration files for local development |
| [.devcontainer](.devcontainer) | DevContainer configurations ([GitHub Docs][dc-gh], [VSCode Docs][dc-vsc], [Reference][dc-ref]) |
Expand Down
5 changes: 5 additions & 0 deletions lychee.toml
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
# Website timeout from connect to response finished.
timeout = 5

# When links are available using HTTPS, treat HTTP links as errors.
require_https = true

0 comments on commit e86452c

Please sign in to comment.