Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
9 changes: 9 additions & 0 deletions .github/linters/.codespellrc
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
[codespell]
# Binary and generated files produce nothing but noise: codespell reads PDFs
# as text and lockfiles are full of package names that look like typos.
skip = *.pdf,*.lock,*.min.js,*.min.css,*.svg,*.png,*.jpg,*.ico,./node_modules,./.git,./dist,./build,pnpm-lock.yaml,package-lock.json,uv.lock,go.sum
# coo — Chief Operating Officer
# pres — slide/presentation identifier, not "press"
# unparseable— an accepted spelling
# lifes — "still lifes" is the Conway's Game of Life term of art
ignore-words-list = coo,pres,unparseable,lifes
14 changes: 14 additions & 0 deletions .github/linters/.htmlhintrc
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
{
"tagname-lowercase": true,
"attr-lowercase": true,
"attr-value-double-quotes": true,
"tag-pair": true,
"spec-char-escape": true,
"id-unique": true,
"src-not-empty": true,
"attr-no-duplication": true,
"title-require": true,
"_comment": "doctype-first is off because Jinja partials are fragments, not documents. id-class-value is off because camelCase ids are standard in JS-driven pages and are queried by name from script.",
"doctype-first": false,
"id-class-value": false
}
6 changes: 6 additions & 0 deletions .github/linters/.markdown-lint.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
---
# Hard-wrapping prose at a fixed column is a style most markdown tooling has
# moved on from.
MD013: false
# A README that opens with a sentence rather than a title is fine.
MD041: false
55 changes: 55 additions & 0 deletions .github/workflows/linter.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,55 @@
---
name: Lint

on: # yamllint disable-line rule:truthy
push:
pull_request:

permissions: {}

jobs:
build:
name: Lint
runs-on: ubuntu-latest

permissions:
contents: read
packages: read
statuses: write

steps:
- name: Checkout code
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
with:
# zizmor/artipacked: keep the token out of .git/config; this job
# only reads the tree, it never pushes.
persist-credentials: false
# super-linter diffs against the base, so it needs full history.
fetch-depth: 0

- name: Super-linter
uses: super-linter/super-linter@4ce20838b8ab83717e78138c5b3a1407148e0918 # v8.7.0
env:
VALIDATE_ALL_CODEBASE: true
DEFAULT_BRANCH: main
# Terminology rules fight the prose in these repos more than they help.
VALIDATE_NATURAL_LANGUAGE: false
# Flags intentional repetition (generated files, repeated markup) far more
# often than real duplication.
VALIDATE_JSCPD: false
# biome and prettier disagree on indentation (tabs vs spaces) and both
# run on the same files, so no formatting satisfies both. prettier wins
# here because it covers more file types; BIOME_LINT stays on.
VALIDATE_BIOME_FORMAT: false
# stylelint and biome both lint CSS with different opinions. biome is the
# more widely used of the two and also covers js/ts, so it is the one kept.
VALIDATE_CSS: false
# black and ruff format disagree on assert-message wrapping, and both
# run here. ruff is the more widely used of the two and its formatter
# is >99.9% black-compatible, so ruff format is the authority.
VALIDATE_PYTHON_BLACK: false
# super-linter warns that biome and eslint both lint JSON and may
# conflict. biome is the one kept, per the same call made for CSS.
VALIDATE_JSON: false
VALIDATE_JSONC: false
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
2 changes: 2 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,7 +1,9 @@
# strangerduino

Stranger Things Christmas Lights Communicator

## Description

Built for a family member's Halloween display, this allows for displaying arbitrary "words" as highlighted by an appropriately numbered LED light, as well as a randomized "Christmas" mode.

This assumes a LED light string supported by the [FastLED](https://fastled.io/) library.