@networkpro/blog 1.2.7 → 1.3.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,154 @@
1
+ # .github/workflows/publish-test.yml
2
+ #
3
+ # Copyright © 2025 Network Pro Strategies (Network Pro™)
4
+ # SPDX-License-Identifier: CC-BY-4.0 OR GPL-3.0-or-later
5
+ # This file is part of Network Pro
6
+
7
+ name: Publish to Registries
8
+
9
+ on:
10
+ workflow_dispatch:
11
+
12
+ permissions:
13
+ actions: read
14
+ contents: read
15
+
16
+ # Allow one concurrent deployment
17
+ concurrency:
18
+ group: 'publish'
19
+ cancel-in-progress: true
20
+
21
+ jobs:
22
+ check-codeql:
23
+ uses: ./.github/workflows/check-codeql.yml
24
+
25
+ build:
26
+ needs: check-codeql
27
+ runs-on: ubuntu-24.04
28
+
29
+ steps:
30
+ - name: Checkout repository
31
+ uses: actions/checkout@v4
32
+ with:
33
+ fetch-depth: 0
34
+
35
+ - name: Set up Node.js
36
+ uses: actions/setup-node@v4
37
+ with:
38
+ node-version: 24
39
+ cache: npm
40
+ cache-dependency-path: package-lock.json
41
+
42
+ - name: Install Node.js dependencies
43
+ run: npm ci
44
+
45
+ # Ensure MkDocs builds successfully
46
+ - name: Set up Python
47
+ uses: actions/setup-python@v5
48
+ with:
49
+ python-version: '3.13'
50
+
51
+ - name: Install Python dependencies
52
+ run: pip install -r requirements.txt
53
+
54
+ # Strict mode disabled for mkdocs-material
55
+ - name: Build MkDocs documentation
56
+ run: mkdocs build
57
+
58
+ # Remove build artifacts
59
+ - name: Clean build directory
60
+ run: rm -rf build/
61
+
62
+ # Create Git archive of version-controlled files
63
+ - name: Create clean source archive
64
+ run: git archive --format=tar.gz --output=clean-source.tar.gz HEAD
65
+
66
+ - name: Upload source archive
67
+ uses: actions/upload-artifact@v4
68
+ with:
69
+ name: clean-source
70
+ path: clean-source.tar.gz
71
+
72
+ publish-npm:
73
+ needs: build
74
+ runs-on: ubuntu-24.04
75
+
76
+ steps:
77
+ - name: Download clean source archive
78
+ uses: actions/download-artifact@v4
79
+ with:
80
+ name: clean-source
81
+ path: ./
82
+
83
+ - name: Extract source archive
84
+ run: tar -xzf clean-source.tar.gz
85
+
86
+ - name: Remove extracted source archive
87
+ run: rm clean-source.tar.gz
88
+
89
+ - name: Set up Node.js for npmjs
90
+ uses: actions/setup-node@v4
91
+ with:
92
+ node-version: 24
93
+ registry-url: https://registry.npmjs.org/
94
+ cache: npm
95
+
96
+ - name: Check for existence of package-lock.json
97
+ run: |
98
+ if [ ! -f package-lock.json ]; then
99
+ echo "Warning: package-lock.json not found";
100
+ fi
101
+
102
+ - name: Set up Git user
103
+ run: |
104
+ git config --global user.email "github@sl.neteng.cc"
105
+ git config --global user.name "SunDevil311"
106
+
107
+ - name: Publish package to npmjs
108
+ run: npm publish --dry-run
109
+ env:
110
+ NODE_AUTH_TOKEN: ${{ secrets.NPM_NETPRO }}
111
+
112
+ publish-gpr:
113
+ needs: build
114
+ runs-on: ubuntu-24.04
115
+
116
+ steps:
117
+ - name: Download clean source archive
118
+ uses: actions/download-artifact@v4
119
+ with:
120
+ name: clean-source
121
+ path: ./
122
+
123
+ - name: Extract source archive
124
+ run: tar -xzf clean-source.tar.gz
125
+
126
+ - name: Remove extracted source archive
127
+ run: rm clean-source.tar.gz
128
+
129
+ - name: Set up Node.js for GPR
130
+ uses: actions/setup-node@v4
131
+ with:
132
+ node-version: 24
133
+ registry-url: https://npm.pkg.github.com/
134
+ cache: npm
135
+
136
+ - name: Check for existence of package-lock.json
137
+ run: |
138
+ if [ ! -f package-lock.json ]; then
139
+ echo "Warning: package-lock.json not found";
140
+ fi
141
+
142
+ - name: Set up Git user
143
+ run: |
144
+ git config --global user.email "github@sl.neteng.cc"
145
+ git config --global user.name "SunDevil311"
146
+
147
+ - name: Update package name for GPR
148
+ run: |
149
+ sed -i 's/"name": ".*"/"name": "@netwk-pro\/blog"/' package.json
150
+
151
+ - name: Publish package to GPR
152
+ run: npm publish --dry-run
153
+ env:
154
+ NODE_AUTH_TOKEN: ${{ secrets.NWPRO_GPR }}
@@ -0,0 +1,209 @@
1
+ # .github/workflows/publish.yml
2
+ #
3
+ # Copyright © 2025 Network Pro Strategies (Network Pro™)
4
+ # SPDX-License-Identifier: CC-BY-4.0 OR GPL-3.0-or-later
5
+ # This file is part of Network Pro
6
+
7
+ name: Publish to Registries
8
+
9
+ on:
10
+ workflow_run:
11
+ workflows: ['Build Site and Deploy to GH Pages']
12
+ types:
13
+ - completed
14
+
15
+ permissions:
16
+ actions: read
17
+ contents: read
18
+
19
+ # Allow one concurrent deployment
20
+ concurrency:
21
+ group: 'publish'
22
+ cancel-in-progress: true
23
+
24
+ # cspell:ignore userconfig
25
+
26
+ jobs:
27
+ build:
28
+ if: ${{ github.event.workflow_run.conclusion == 'success' }}
29
+ runs-on: ubuntu-24.04
30
+
31
+ steps:
32
+ - name: Checkout repository
33
+ uses: actions/checkout@v4
34
+ with:
35
+ fetch-depth: 0
36
+
37
+ - name: Set up Node.js
38
+ uses: actions/setup-node@v4
39
+ with:
40
+ node-version: 24
41
+ cache: npm
42
+ cache-dependency-path: package-lock.json
43
+
44
+ - name: Upgrade npm
45
+ run: |
46
+ corepack enable
47
+ npm install -g npm@11.4.1
48
+
49
+ - name: Install Node.js dependencies
50
+ run: npm ci
51
+
52
+ # Ensure MkDocs builds successfully
53
+ - name: Set up Python
54
+ uses: actions/setup-python@v5
55
+ with:
56
+ python-version: '3.13'
57
+
58
+ - name: Install Python dependencies
59
+ run: pip install -r requirements.txt
60
+
61
+ # Strict mode disabled for mkdocs-material
62
+ - name: Build MkDocs documentation
63
+ run: mkdocs build
64
+
65
+ # Remove build artifacts
66
+ #- name: Clean build directory
67
+ # run: rm -rf build/
68
+
69
+ # Create Git archive of version-controlled files
70
+ - name: Create clean source archive
71
+ run: git archive --format=tar.gz --output=clean-source.tar.gz HEAD
72
+
73
+ - name: Upload source archive
74
+ uses: actions/upload-artifact@v4
75
+ with:
76
+ name: clean-source
77
+ path: clean-source.tar.gz
78
+
79
+ publish-npm:
80
+ needs: build
81
+ runs-on: ubuntu-24.04
82
+
83
+ steps:
84
+ - name: Download clean source archive
85
+ uses: actions/download-artifact@v4
86
+ with:
87
+ name: clean-source
88
+ path: ./
89
+
90
+ - name: Extract source archive
91
+ run: tar -xzf clean-source.tar.gz
92
+
93
+ - name: Remove extracted source archive
94
+ run: rm clean-source.tar.gz
95
+
96
+ - name: Set up Node.js for npmjs
97
+ uses: actions/setup-node@v4
98
+ with:
99
+ node-version: 24
100
+ registry-url: https://registry.npmjs.org/
101
+ cache: npm
102
+ cache-dependency-path: package-lock.json
103
+
104
+ - name: Upgrade npm
105
+ run: |
106
+ corepack enable
107
+ npm install -g npm@11.4.1
108
+
109
+ - name: Install Node.js dependencies
110
+ run: npm ci
111
+
112
+ - name: Set up Git user
113
+ run: |
114
+ git config --global user.email "github@sl.neteng.cc"
115
+ git config --global user.name "SunDevil311"
116
+
117
+ - name: Print npm config and registry info
118
+ run: |
119
+ echo "🔍 NPM registry (from config):"
120
+ npm config get registry
121
+
122
+ echo "🔍 NPM user config location:"
123
+ echo "$NPM_CONFIG_USERCONFIG"
124
+
125
+ echo "🔍 .npmrc contents:"
126
+ cat "$NPM_CONFIG_USERCONFIG" || echo "❌ No .npmrc found"
127
+
128
+ echo "🔐 Token prefix:"
129
+ echo "${NODE_AUTH_TOKEN:0:4}********"
130
+ env:
131
+ NODE_AUTH_TOKEN: ${{ secrets.NPM_NETPRO }}
132
+
133
+ - name: Verify npm authentication
134
+ run: npm whoami
135
+ env:
136
+ NODE_AUTH_TOKEN: ${{ secrets.NPM_NETPRO }}
137
+
138
+ - name: Publish package to npmjs
139
+ run: npm publish --access public
140
+ env:
141
+ NODE_AUTH_TOKEN: ${{ secrets.NPM_NETPRO }}
142
+
143
+ publish-gpr:
144
+ needs: build
145
+ runs-on: ubuntu-24.04
146
+
147
+ steps:
148
+ - name: Download clean source archive
149
+ uses: actions/download-artifact@v4
150
+ with:
151
+ name: clean-source
152
+ path: ./
153
+
154
+ - name: Extract source archive
155
+ run: tar -xzf clean-source.tar.gz
156
+
157
+ - name: Remove extracted source archive
158
+ run: rm clean-source.tar.gz
159
+
160
+ - name: Set up Node.js for GPR
161
+ uses: actions/setup-node@v4
162
+ with:
163
+ node-version: 24
164
+ registry-url: https://npm.pkg.github.com/
165
+ cache: npm
166
+ cache-dependency-path: package-lock.json
167
+
168
+ - name: Upgrade npm
169
+ run: |
170
+ corepack enable
171
+ npm install -g npm@11.4.1
172
+
173
+ - name: Install Node.js dependencies
174
+ run: npm ci
175
+
176
+ - name: Set up Git user
177
+ run: |
178
+ git config --global user.email "github@sl.neteng.cc"
179
+ git config --global user.name "SunDevil311"
180
+
181
+ - name: Update package name for GPR
182
+ run: |
183
+ sed -i 's/"name": ".*"/"name": "@netwk-pro\/blog"/' package.json
184
+
185
+ - name: Print npm config and registry info
186
+ run: |
187
+ echo "🔍 NPM registry (from config):"
188
+ npm config get registry
189
+
190
+ echo "🔍 NPM user config location:"
191
+ echo "$NPM_CONFIG_USERCONFIG"
192
+
193
+ echo "🔍 .npmrc contents:"
194
+ cat "$NPM_CONFIG_USERCONFIG" || echo "❌ No .npmrc found"
195
+
196
+ echo "🔐 Token prefix:"
197
+ echo "${NODE_AUTH_TOKEN:0:4}********"
198
+ env:
199
+ NODE_AUTH_TOKEN: ${{ secrets.NWPRO_GPR }}
200
+
201
+ - name: Verify npm authentication
202
+ run: npm whoami
203
+ env:
204
+ NODE_AUTH_TOKEN: ${{ secrets.NWPRO_GPR }}
205
+
206
+ - name: Publish package to GPR
207
+ run: npm publish
208
+ env:
209
+ NODE_AUTH_TOKEN: ${{ secrets.NWPRO_GPR }}
@@ -0,0 +1,32 @@
1
+ /* ==========================================================================
2
+ .markdownlint.mjs
3
+
4
+ Copyright © 2025 Network Pro Strategies (Network Pro™)
5
+ SPDX-License-Identifier: CC-BY-4.0 OR GPL-3.0-or-later
6
+ This file is part of Network Pro.
7
+ ========================================================================== */
8
+
9
+ import noSmartQuotes from './.md-smart-quotes.js'; // adjust path as needed
10
+
11
+ export default {
12
+ // Enable all default rules, then override below
13
+ default: true,
14
+
15
+ // Custom rule: disallow curly (smart) quotes
16
+ customRules: [noSmartQuotes],
17
+
18
+ // Rule exceptions
19
+ MD041: false, // First line in file should be a top-level header
20
+ MD033: false, // Allow inline HTML
21
+ MD013: false, // Ignore line length
22
+ MD025: false, // Multiple top level headers in the same document
23
+
24
+ // Additional parser options
25
+ options: {
26
+ frontMatter: '^---\\n[\\s\\S]*?\\n---', // YAML front matter regex
27
+ },
28
+
29
+ // Rule-specific configurations
30
+ MD007: { indent: 2 }, // Set consistent unordered list indentation (e.g., 2 spaces)
31
+ MD029: { style: 'ordered' }, // Enforce consistent ordered list numbering
32
+ };
@@ -0,0 +1,31 @@
1
+ /* ==========================================================================
2
+ .md-smart-quotes.js
3
+
4
+ Copyright © 2025 Network Pro Strategies (Network Pro™)
5
+ SPDX-License-Identifier: CC-BY-4.0 OR GPL-3.0-or-later
6
+ This file is part of Network Pro.
7
+ ========================================================================== */
8
+
9
+ export default {
10
+ names: ['no-smart-quotes'],
11
+ description: 'Disallow smart quotes (curly quotes)',
12
+ information: new URL('https://github.com/DavidAnson/markdownlint'),
13
+ tags: ['quotes', 'style'],
14
+ function(params, onError) {
15
+ const smartQuoteRegex = /[“”‘’]/g;
16
+
17
+ params.tokens.forEach((token) => {
18
+ if (token.type === 'inline' && smartQuoteRegex.test(token.content)) {
19
+ const matches = [...token.content.matchAll(smartQuoteRegex)];
20
+ matches.forEach((match) => {
21
+ const index = match.index;
22
+ onError({
23
+ lineNumber: token.lineNumber,
24
+ detail: `Smart quote (${match[0]}) detected`,
25
+ range: [index + 1, 1],
26
+ });
27
+ });
28
+ }
29
+ });
30
+ },
31
+ };
@@ -0,0 +1,38 @@
1
+ # .prettierignore
2
+ #
3
+ # SPDX-License-Identifier: CC-BY-4.0 OR GPL-3.0-or-later
4
+ # This file is part of Network Pro.
5
+
6
+ # Custom ignores
7
+ .markdownlint.jsonc
8
+
9
+
10
+ # Node.js dependencies
11
+ node_modules
12
+
13
+ # Build artifacts
14
+ dist
15
+ .vite
16
+ .cache
17
+ coverage
18
+
19
+ # Temporary files
20
+ *.lock
21
+ *.tmp
22
+ *.swp
23
+ *.bak
24
+
25
+ # Static assets
26
+ **/*.png
27
+ **/*.jpg
28
+ **/*.jpeg
29
+ **/*.gif
30
+ **/*.svg
31
+ **/*.woff
32
+ **/*.woff2
33
+ **/*.ttf
34
+ **/*.eot
35
+
36
+ # Configuration files
37
+ package.json
38
+ package-lock.json
package/.prettierrc ADDED
@@ -0,0 +1,29 @@
1
+ {
2
+ "printWidth": 80,
3
+ "tabWidth": 2,
4
+ "useTabs": false,
5
+ "semi": true,
6
+ "singleQuote": true,
7
+ "quoteProps": "as-needed",
8
+ "jsxSingleQuote": true,
9
+ "trailingComma": "all",
10
+ "bracketSpacing": true,
11
+ "objectWrap": "preserve",
12
+ "bracketSameLine": true,
13
+ "arrowParens": "always",
14
+ "requirePragma": false,
15
+ "insertPragma": false,
16
+ "proseWrap": "always",
17
+ "htmlWhitespaceSensitivity": "strict",
18
+ "endOfLine": "lf",
19
+ "embeddedLanguageFormatting": "auto",
20
+ "singleAttributePerLine": false,
21
+ "overrides": [
22
+ {
23
+ "files": "*.jsonc",
24
+ "options": {
25
+ "trailingComma": "none"
26
+ }
27
+ }
28
+ ]
29
+ }
@@ -0,0 +1,34 @@
1
+ # .stylelintignore
2
+ #
3
+ # SPDX-License-Identifier: CC-BY-4.0 OR GPL-3.0-or-later
4
+ # This file is part of Network Pro.
5
+
6
+ # Node.js dependencies
7
+ node_modules
8
+
9
+ # Build artifacts
10
+ build
11
+ .vite
12
+ .cache
13
+ coverage
14
+
15
+ # Temporary files
16
+ *.lock
17
+ *.tmp
18
+ *.swp
19
+ *.bak
20
+
21
+ # Static assets
22
+ **/*.png
23
+ **/*.jpg
24
+ **/*.jpeg
25
+ **/*.gif
26
+ **/*.svg
27
+ **/*.woff
28
+ **/*.woff2
29
+ **/*.ttf
30
+ **/*.eot
31
+
32
+ # Configuration files
33
+ package.json
34
+ package-lock.json
@@ -0,0 +1,69 @@
1
+ {
2
+ "version": 1,
3
+ "selectors": [
4
+ {
5
+ "name": ".fas",
6
+ "description": "FontAwesome v6 solid icon class"
7
+ },
8
+ {
9
+ "name": ".fa-solid",
10
+ "description": "FontAwesome old solid icon class"
11
+ },
12
+ {
13
+ "name": ".fab",
14
+ "description": "FontAwesome v6 brand icon class"
15
+ },
16
+ {
17
+ "name": ".fa-brands",
18
+ "description": "FontAwsome old brand icon class"
19
+ },
20
+ {
21
+ "name": ".fa-square-instagram",
22
+ "description": "FontAwesome brands Instagram icon class"
23
+ },
24
+ {
25
+ "name": ".fa-square-github",
26
+ "description": "FontAwesome brands GitHub icon class"
27
+ },
28
+ {
29
+ "name": ".fa-linkedin",
30
+ "description": "FontAwesome brands LinkedIn icon class"
31
+ },
32
+ {
33
+ "name": ".fa-square-facebook",
34
+ "description": "FontAwesome brands Facebook icon class"
35
+ },
36
+ {
37
+ "name": ".fa-mastodon",
38
+ "description": "FontAwesome brands Pinterest icon class"
39
+ },
40
+ {
41
+ "name": ".fa-arrow-up-right",
42
+ "description": "FontAwesome arrow up right icon class"
43
+ },
44
+ {
45
+ "name": ".fa-arrow-up-right-from-square",
46
+ "description": "FontAwesome arrow up right from square icon class"
47
+ },
48
+ {
49
+ "name": ".fa-2x",
50
+ "description": "FontAwesome 2x extra large icon size class"
51
+ },
52
+ {
53
+ "name": ".fa-lg",
54
+ "description": "FontAwesome large icon size class"
55
+ },
56
+ {
57
+ "name": ".fa-sm",
58
+ "description": "FontAwesome small icon size class"
59
+ },
60
+ {
61
+ "name": ".fa-xs",
62
+ "description": "FontAwesome extra small icon size class"
63
+ },
64
+ {
65
+ "name": ".fa-2xs",
66
+ "description": "FontAwesome 2x extra small icon size class"
67
+ }
68
+ ]
69
+ }
@@ -0,0 +1,40 @@
1
+ {
2
+ // Editor settings
3
+ "editor.defaultFoldingRangeProvider": "esbenp.prettier-vscode",
4
+ "editor.defaultFormatter": "esbenp.prettier-vscode",
5
+ "[markdown]": {
6
+ "editor.defaultFoldingRangeProvider": "esbenp.prettier-vscode",
7
+ "editor.defaultFormatter": "esbenp.prettier-vscode"
8
+ },
9
+ "[json]": {
10
+ "editor.defaultFormatter": "esbenp.prettier-vscode"
11
+ },
12
+ "[jsonc]": {
13
+ "editor.defaultFormatter": "esbenp.prettier-vscode"
14
+ },
15
+ // ESLint configuration
16
+ "eslint.workingDirectories": ["D:\\Netwk-Pro\\git\\blog"],
17
+ "eslint.validate": ["html", "javascript", "javascriptreact", "json", "jsonc"],
18
+ "eslint.lintTask.enable": true,
19
+ "eslint.lintTask.options": "--ext .mjs,.js,.json,.jsonc --config eslint.config.mjs .",
20
+ "eslint.useESLintClass": true,
21
+ "eslint.useFlatConfig": true,
22
+ "eslint.codeActionsOnSave.mode": "problems",
23
+ "eslint.probe": ["javascript", "javascriptreact", "html", "json", "jsonc"],
24
+ // Stylelint configuration
25
+ "stylelint.configBasedir": "D:\\Netwk-Pro\\git\\blog",
26
+ "stylelint.configFile": "stylelint.config.js",
27
+ "stylelint.customSyntax": "postcss-html",
28
+ "stylelint.validate": ["css", "postcss", "html"],
29
+ // Custom CSS data for FontAwesome classes
30
+ "css.customData": [
31
+ ".vscode/customData.json" // Path to your custom data file
32
+ ],
33
+ // Locations of CSS files for validation
34
+ "css.styleSheets": ["**/*.css", "src/stylesheets/*.css"],
35
+ "files.associations": {
36
+ "/img/*": "html"
37
+ },
38
+ "markdown.validate.enabled": false,
39
+ "markdown.validate.ignoredLinks": []
40
+ }