All checks were successful
Build and Release / Create Release (push) Has been skipped
Build and Release / Unit Tests (push) Successful in 3m16s
Build and Release / Integration Tests (PostgreSQL) (push) Successful in 4m41s
Build and Release / Lint (push) Successful in 4m53s
Build and Release / Build Binaries (amd64, windows) (push) Has been skipped
Build and Release / Build Binaries (arm64, darwin) (push) Has been skipped
Build and Release / Build Binaries (arm64, linux) (push) Has been skipped
Build and Release / Build Binaries (amd64, darwin) (push) Has been skipped
Build and Release / Build Binaries (amd64, linux) (push) Has been skipped
The previous process.cwd() approach still failed on CI runners. Using import.meta.dirname gives us the actual directory of the config file, which is the project root, regardless of runner execution context. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
152 lines
7.2 KiB
TypeScript
152 lines
7.2 KiB
TypeScript
import path from 'node:path';
|
|
import type {Config} from 'stylelint';
|
|
|
|
// Use import.meta.dirname for reliable path resolution in ESM context
|
|
// This gives us the directory where this config file lives (project root)
|
|
const cssVarFiles = [
|
|
path.join(import.meta.dirname, 'web_src/css/base.css'),
|
|
path.join(import.meta.dirname, 'web_src/css/themes/theme-gitea-light.css'),
|
|
path.join(import.meta.dirname, 'web_src/css/themes/theme-gitea-dark.css'),
|
|
];
|
|
|
|
export default {
|
|
extends: 'stylelint-config-recommended',
|
|
reportUnscopedDisables: true,
|
|
reportNeedlessDisables: true,
|
|
reportInvalidScopeDisables: true,
|
|
plugins: [
|
|
'stylelint-declaration-strict-value',
|
|
'stylelint-declaration-block-no-ignored-properties',
|
|
'stylelint-value-no-unknown-custom-properties',
|
|
'@stylistic/stylelint-plugin',
|
|
],
|
|
ignoreFiles: [
|
|
'**/*.go',
|
|
'/web_src/fomantic',
|
|
],
|
|
overrides: [
|
|
{
|
|
files: ['**/chroma/*', '**/codemirror/*', '**/standalone/*', '**/console.css', 'font_i18n.css'],
|
|
rules: {
|
|
'scale-unlimited/declaration-strict-value': null,
|
|
},
|
|
},
|
|
{
|
|
files: ['**/chroma/*', '**/codemirror/*'],
|
|
rules: {
|
|
'block-no-empty': null,
|
|
},
|
|
},
|
|
{
|
|
files: ['**/*.vue'],
|
|
customSyntax: 'postcss-html',
|
|
},
|
|
],
|
|
rules: {
|
|
'@stylistic/at-rule-name-case': null,
|
|
'@stylistic/at-rule-name-newline-after': null,
|
|
'@stylistic/at-rule-name-space-after': null,
|
|
'@stylistic/at-rule-semicolon-newline-after': null,
|
|
'@stylistic/at-rule-semicolon-space-before': null,
|
|
'@stylistic/block-closing-brace-empty-line-before': null,
|
|
'@stylistic/block-closing-brace-newline-after': null,
|
|
'@stylistic/block-closing-brace-newline-before': null,
|
|
'@stylistic/block-closing-brace-space-after': null,
|
|
'@stylistic/block-closing-brace-space-before': null,
|
|
'@stylistic/block-opening-brace-newline-after': null,
|
|
'@stylistic/block-opening-brace-newline-before': null,
|
|
'@stylistic/block-opening-brace-space-after': null,
|
|
'@stylistic/block-opening-brace-space-before': 'always',
|
|
'@stylistic/color-hex-case': 'lower',
|
|
'@stylistic/declaration-bang-space-after': 'never',
|
|
'@stylistic/declaration-bang-space-before': null,
|
|
'@stylistic/declaration-block-semicolon-newline-after': null,
|
|
'@stylistic/declaration-block-semicolon-newline-before': null,
|
|
'@stylistic/declaration-block-semicolon-space-after': null,
|
|
'@stylistic/declaration-block-semicolon-space-before': 'never',
|
|
'@stylistic/declaration-block-trailing-semicolon': null,
|
|
'@stylistic/declaration-colon-newline-after': null,
|
|
'@stylistic/declaration-colon-space-after': null,
|
|
'@stylistic/declaration-colon-space-before': 'never',
|
|
'@stylistic/function-comma-newline-after': null,
|
|
'@stylistic/function-comma-newline-before': null,
|
|
'@stylistic/function-comma-space-after': null,
|
|
'@stylistic/function-comma-space-before': null,
|
|
'@stylistic/function-max-empty-lines': 0,
|
|
'@stylistic/function-parentheses-newline-inside': null,
|
|
'@stylistic/function-parentheses-space-inside': null,
|
|
'@stylistic/function-whitespace-after': null,
|
|
'@stylistic/indentation': 2,
|
|
'@stylistic/linebreaks': null,
|
|
'@stylistic/max-empty-lines': 1,
|
|
'@stylistic/max-line-length': null,
|
|
'@stylistic/media-feature-colon-space-after': null,
|
|
'@stylistic/media-feature-colon-space-before': 'never',
|
|
'@stylistic/media-feature-name-case': null,
|
|
'@stylistic/media-feature-parentheses-space-inside': null,
|
|
'@stylistic/media-feature-range-operator-space-after': 'always',
|
|
'@stylistic/media-feature-range-operator-space-before': 'always',
|
|
'@stylistic/media-query-list-comma-newline-after': null,
|
|
'@stylistic/media-query-list-comma-newline-before': null,
|
|
'@stylistic/media-query-list-comma-space-after': null,
|
|
'@stylistic/media-query-list-comma-space-before': null,
|
|
'@stylistic/named-grid-areas-alignment': null,
|
|
'@stylistic/no-empty-first-line': null,
|
|
'@stylistic/no-eol-whitespace': true,
|
|
'@stylistic/no-extra-semicolons': true,
|
|
'@stylistic/no-missing-end-of-source-newline': null,
|
|
'@stylistic/number-leading-zero': null,
|
|
'@stylistic/number-no-trailing-zeros': null,
|
|
'@stylistic/property-case': 'lower',
|
|
'@stylistic/selector-attribute-brackets-space-inside': null,
|
|
'@stylistic/selector-attribute-operator-space-after': null,
|
|
'@stylistic/selector-attribute-operator-space-before': null,
|
|
'@stylistic/selector-combinator-space-after': null,
|
|
'@stylistic/selector-combinator-space-before': null,
|
|
'@stylistic/selector-descendant-combinator-no-non-space': null,
|
|
'@stylistic/selector-list-comma-newline-after': null,
|
|
'@stylistic/selector-list-comma-newline-before': null,
|
|
'@stylistic/selector-list-comma-space-after': 'always-single-line',
|
|
'@stylistic/selector-list-comma-space-before': 'never-single-line',
|
|
'@stylistic/selector-max-empty-lines': 0,
|
|
'@stylistic/selector-pseudo-class-case': 'lower',
|
|
'@stylistic/selector-pseudo-class-parentheses-space-inside': 'never',
|
|
'@stylistic/selector-pseudo-element-case': 'lower',
|
|
'@stylistic/string-quotes': 'double',
|
|
'@stylistic/unicode-bom': null,
|
|
'@stylistic/unit-case': 'lower',
|
|
'@stylistic/value-list-comma-newline-after': null,
|
|
'@stylistic/value-list-comma-newline-before': null,
|
|
'@stylistic/value-list-comma-space-after': null,
|
|
'@stylistic/value-list-comma-space-before': null,
|
|
'@stylistic/value-list-max-empty-lines': 0,
|
|
'at-rule-no-unknown': [true, {ignoreAtRules: ['tailwind']}],
|
|
'at-rule-no-vendor-prefix': true,
|
|
'csstools/value-no-unknown-custom-properties': [true, {importFrom: cssVarFiles}],
|
|
'declaration-block-no-duplicate-properties': [true, {ignore: ['consecutive-duplicates-with-different-values']}],
|
|
'declaration-block-no-redundant-longhand-properties': [true, {ignoreShorthands: ['flex-flow', 'overflow', 'grid-template']}],
|
|
'declaration-property-unit-disallowed-list': {'line-height': ['em']},
|
|
'declaration-property-value-disallowed-list': {'word-break': ['break-word']},
|
|
'font-family-name-quotes': 'always-where-recommended',
|
|
'function-name-case': 'lower',
|
|
'function-url-quotes': 'always',
|
|
'import-notation': 'string',
|
|
'length-zero-no-unit': [true, {ignore: ['custom-properties'], ignoreFunctions: ['var']}],
|
|
'media-feature-name-no-vendor-prefix': true,
|
|
'no-descending-specificity': null,
|
|
'no-invalid-position-at-import-rule': [true, {ignoreAtRules: ['tailwind']}],
|
|
'no-unknown-animations': null,
|
|
'no-unknown-custom-media': null,
|
|
'no-unknown-custom-properties': null,
|
|
'plugin/declaration-block-no-ignored-properties': true,
|
|
'scale-unlimited/declaration-strict-value': [['/color$/', 'font-weight'], {ignoreValues: '/^(inherit|transparent|unset|initial|currentcolor|none)$/', ignoreFunctions: true, disableFix: true, expandShorthand: true}],
|
|
'selector-attribute-quotes': 'always',
|
|
'selector-no-vendor-prefix': true,
|
|
'selector-pseudo-element-colon-notation': 'double',
|
|
'selector-type-case': 'lower',
|
|
'selector-type-no-unknown': [true, {ignore: ['custom-elements']}],
|
|
'shorthand-property-no-redundant-values': true,
|
|
'value-no-vendor-prefix': [true, {ignoreValues: ['box', 'inline-box']}],
|
|
},
|
|
} satisfies Config;
|