GV

GeezerVison

The World Wide Web, restored to 800 pixels of glory.

Home|About|Gaming cabinet|Archives|How it works|Starter sites

On this site

  • Sign in
  • ActionsCI/CD and automation
  • CodespacesCloud development environments
  • All Features
  • Documentation
  • Training
  • Certifications
  • Build with Copilot
  • Customize Copilot
  • Integrations
  • Trending repos
  • GitHub Sponsors
  • Developer articles
  • Enterprises

This view

  • Original page
  • New address

GeezerVison is showing github.com — GitHub - checkmake/checkmake: Linter/analyzer for Makefiles

BranchesTags
Open more actions menu

Latest commit

 

History

380 Commits
380 Commits

Folders and files

NameName
Last commit message
Last commit date
.github
.github
 
 
buildenv
buildenv
 
 
cmd/checkmake
cmd/checkmake
 
 
config
config
 
 
docs
docs
 
 
fixtures
fixtures
 
 
formatters
formatters
 
 
hack
hack
 
 
logger
logger
 
 
man/man1
man/man1
 
 
parser
parser
 
 
rules
rules
 
 
validator
validator
 
 
.codeclimate.yml
.codeclimate.yml
 
 
.gitattributes
.gitattributes
 
 
.gitignore
.gitignore
 
 
.golangci.yml
.golangci.yml
 
 
.pre-commit-config.yaml
.pre-commit-config.yaml
 
 
.pre-commit-hooks.yaml
.pre-commit-hooks.yaml
 
 
CHANGELOG.md
CHANGELOG.md
 
 
CODE_OF_CONDUCT.md
CODE_OF_CONDUCT.md
 
 
Containerfile
Containerfile
 
 
LICENSE
LICENSE
 
 
Makefile
Makefile
 
 
README.md
README.md
 
 
checkmake.ini
checkmake.ini
 
 
go.mod
go.mod
 
 
go.sum
go.sum
 
 

Repository files navigation

checkmake

Build Status Coverage Status Code Climate Go Report Card Packagecloud MIT license Go Reference

Overview

checkmake is a linter for Makefiles. It scans Makefiles for potential issues based on configurable rules.

Usage

% checkmake Makefile
% checkmake Makefile foo.mk bar.mk baz.mk

checkmake analyzes one or more Makefiles and reports potential issues according to configurable rules.

Command-line options

Usage:
  checkmake [flags] [makefile...]
  checkmake [command]

Available Commands:
  completion  Generate the autocompletion script for the specified shell
  help        Help about any command
  list-rules  List registered rules

Flags:
      --config string   Configuration file to read (default "checkmake.ini")
      --debug           Enable debug mode
      --format string   Custom Go template for text output (ignored in JSON mode)
  -h, --help            help for checkmake
  -o, --output string   Output format: 'text' (default) or 'json' (mutually exclusive with --format) (default "text")
  -v, --version         version for checkmake

Use "checkmake [command] --help" for more information about a command.

Example output

% checkmake fixtures/missing_phony.make
      RULE                 DESCRIPTION                      FILE NAME            LINE NUMBER
  minphony        Missing required phony target    fixtures/missing_phony.make   21
                  "all"
  minphony        Missing required phony target    fixtures/missing_phony.make   21
                  "test"
  phonydeclared   Target "all" should be           fixtures/missing_phony.make   16
                  declared PHONY.

Container usage

building or running a container image can be done with docker and podman.

building an image

docker build --build-arg BUILDER_NAME='Your Name' --build-arg [email protected] . -t checker

Alternatively, the image can be built with the make target image-build :

$ BUILDER_NAME='Your Name' BUILDER_EMAIL='your@mail' image-build

By default, the image tag is constructed as IMAGE_REGISTRY/checkmake/checkmake:IMAGE_VERSION_TAG

The image registry defaults to quay.io but can be overridden by the IMAGE_REGISTRY make variable.

The image version tag defaults to latest and can be overridden with the make variable IMAGE_VERSION_TAG.

The container command used for building (docker or podman) is auto-detected with a preference for podman but can be overridden by the make variable CONTAINER_CMD.

publishing an image

The locally built image can be published with a make image-pushcommand corresponding to the previously described make image-buildcommand or alrenatively directly using docker push or podman push

published images on quay

Official images are published on quay.io

running checkmake in container

Then checkmake can be run in a contaner based on a locally built or pulled image with a Makefile attached. below is an example of it assuming the Makefile is in the current working directory:

docker run --workdir / -v "$PWD"/Makefile:/Makefile quay.io/checkmake/checkmake:latest 

Variant for using an additional config file:

docker run --workdir / -v "$PWD"/Makefile:/Makefile -v "$PWD"/checkmake.ini:/checkmake.ini  quay.io/checkmake/checkmake:latest

Note that this uses the default config file name checkmake.ini in the CWD so that it will be picked up by checkmake automatically.

pre-commit usage

This repo includes a pre-commit hook, which you may choose to use in your own repos. Simply add a .pre-commit-config.yaml to your repo's top-level directory

repos:
-   repo: https://github.com/checkmake/checkmake.git
    # Or another commit hash or version
    rev: 0.2.2
    hooks:
    # Use this hook to let pre-commit build checkmake in its sandbox
    -   id: checkmake
    # OR Use this hook to use a pre-installed checkmake executable
    # -   id: checkmake-system

There are two hooks available:

  • checkmake (Recommended)

    pre-commit will set up a Go environment from scratch to compile and run checkmake. See the pre-commit golang plugin docs for more information.

  • checkmake-system

    pre-commit will look for checkmake on your PATH. This hook requires you to install checkmake separately, e.g. with your package manager or a prebuilt binary release. Only recommended if it's permissible to require all repository users install checkmake manually.

Then, run pre-commit as usual as a part of git commit or explicitly, for example:

pre-commit run --all-files

pre-commit in GitHub Actions

You may also choose to run this as a GitHub Actions workflow. To do this, add a .github/workflows/pre-commit.yml workflow to your repo:

name: pre-commit

on:
  pull_request:
    branches:
      - master
      - main
    paths:
      - '.pre-commit-config.yaml'
      - '.pre-commit-hooks.yaml'
      - 'Makefile'
      - 'makefile'
      - 'GNUmakefile'
      - '**.mk'
      - '**.make'
  push:
    paths:
      - '.pre-commit-config.yaml'
      - '.pre-commit-hooks.yaml'
      - 'Makefile'
      - 'makefile'
      - 'GNUmakefile'
      - '**.mk'
      - '**.make'

jobs:
  pre-commit:
    runs-on: ubuntu-latest
    steps:
    - uses: actions/checkout@v3
    - uses: actions/setup-python@v3
    - name: Set up Go 1.17
      uses: actions/setup-go@v2
      with:
        go-version: 1.17
      id: go
    - uses: pre-commit/[email protected]

Installation

With Go

With go 1.16 or higher:

go install github.com/checkmake/checkmake/cmd/checkmake@latest
checkmake Makefile

Or alternatively, run it directly:

go run github.com/checkmake/checkmake/cmd/checkmake@latest Makefile

From Packages

checkmake is available in many Linux distributions and package managers. See Repology for full list:

Repology

Packages are also available on packagecloud.io.

Build

You'll need Go installed.

git clone https://github.com/checkmake/checkmake
cd checkmake
make checkmake

To build the man page (optional), install pandoc and run:

make checkmake.1

Use in CI

MegaLinter

checkmake is natively embedded within MegaLinter

To install it, run npx mega-linter-runner --install (requires Node.js)

Inspiration

This is totally inspired by an idea by Dan Buch.

About

Linter/analyzer for Makefiles

Topics

hacktoberfestlintlintermakemakefile

Resources

Readme
MIT license

Code of conduct

Code of conduct

Contributing

Contributing
Activity
Custom properties

Stars

1.2k stars

Watchers

9 watching

Forks

55 forks
Report repository

Releases

Packages

Used by

Contributors

Languages

You are visitor 01402503 — GeezerVison does not store the pages you look up.
Best viewed with Netscape Navigator 4.7 or Internet Explorer 6 at 800×600. No cookies required.