@networkpro/blog 1.2.8 → 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,12 @@
1
+ # .browserslistrc
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
+ # Supported browsers
7
+
8
+ defaults and fully supports es6-module
9
+ maintained node versions
10
+ last 2 node major versions
11
+ last 2 versions
12
+ not dead
package/.editorconfig ADDED
@@ -0,0 +1,60 @@
1
+ # .editorconfig
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
+ # EditorConfig helps developers define and maintain consistent
7
+ # coding styles between different editors and IDEs
8
+ # See http://editorconfig.org/ for full details
9
+
10
+ ; top-most EditorConfig file
11
+ root = true
12
+
13
+ ; define basic and global for any file
14
+ [*]
15
+ charset = utf-8
16
+ end_of_line = lf
17
+ indent_size = 2
18
+ indent_style = space
19
+ max_line_length = 80
20
+ insert_final_newline = true
21
+ trim_trailing_whitespace = true
22
+
23
+ ; DOS/Windows batch scripts -
24
+ [*.{bat,cmd}]
25
+ end_of_line = crlf
26
+
27
+ ; Cascading Stylesheets -
28
+ [*.css]
29
+ indent_size = 2
30
+
31
+ ; HTML files -
32
+ [*.{html,htm}]
33
+ indent_size = 2
34
+
35
+ ; JavaScript files -
36
+ [*.{mjs,js,ts}]
37
+ curly_bracket_next_line = true
38
+ quote_type = single
39
+
40
+ ; JSON files (normal and commented version) -
41
+ [*.{json,jsonc}]
42
+ indent_size = 2
43
+ quote_type = double
44
+
45
+ ; Make - match it own default syntax
46
+ [Makefile]
47
+ indent_style = tab
48
+
49
+ ; Markdown files - preserve trail spaces that means break line
50
+ [*.{md,markdown}]
51
+ trim_trailing_whitespace = false
52
+
53
+ ; PowerShell - match defaults for New-ModuleManifest and PSScriptAnalyzer Invoke-Formatter
54
+ [*.{ps1,psd1,psm1}]
55
+ charset = utf-8-bom
56
+ end_of_line = crlf
57
+
58
+ ; YML config files - match it own default syntax
59
+ [*.{yaml,yml}]
60
+ indent_size = 2
package/.gitattributes ADDED
@@ -0,0 +1,199 @@
1
+ # .gitattributes
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
+ ## GITATTRIBUTES FOR WEB PROJECTS
7
+ #
8
+ # These settings are for any web project.
9
+ #
10
+ # Details per file setting:
11
+ # text These files should be normalized (i.e. convert CRLF to LF).
12
+ # binary These files are binary and should be left untouched.
13
+ #
14
+ # Note that binary is a macro for -text -diff.
15
+ ######################################################################
16
+
17
+ ## AUTO-DETECT
18
+ ## Handle line endings automatically for files detected as
19
+ ## text and leave all files detected as binary untouched.
20
+ ## This will handle all files NOT defined below.
21
+ * text=auto
22
+
23
+ ## SOURCE CODE
24
+ *.bat text eol=crlf
25
+ *.coffee text
26
+ *.css text
27
+ *.htm text
28
+ *.html text
29
+ *.inc text
30
+ *.ini text
31
+ *.js text
32
+ *.json text
33
+ *.jsx text
34
+ *.less text
35
+ *.od text
36
+ *.onlydata text
37
+ *.php text
38
+ *.pl text
39
+ *.py text
40
+ *.rb text
41
+ *.sass text
42
+ *.scm text
43
+ *.scss text
44
+ *.sh text eol=lf
45
+ *.sql text
46
+ *.styl text
47
+ *.tag text
48
+ *.ts text
49
+ *.tsx text
50
+ *.xml text
51
+ *.xhtml text
52
+
53
+ ## DOCKER
54
+ *.dockerignore text
55
+ Dockerfile text
56
+
57
+ ## DOCUMENTATION
58
+ *.markdown text
59
+ *.md text
60
+ *.mdwn text
61
+ *.mdown text
62
+ *.mkd text
63
+ *.mkdn text
64
+ *.mdtxt text
65
+ *.mdtext text
66
+ *.txt text
67
+ AUTHORS text
68
+ CHANGELOG text
69
+ CHANGES text
70
+ CONTRIBUTING text
71
+ COPYING text
72
+ copyright text
73
+ *COPYRIGHT* text
74
+ INSTALL text
75
+ license text
76
+ LICENSE text
77
+ NEWS text
78
+ readme text
79
+ *README* text
80
+ TODO text
81
+
82
+ ## TEMPLATES
83
+ *.dot text
84
+ *.ejs text
85
+ *.haml text
86
+ *.handlebars text
87
+ *.hbs text
88
+ *.hbt text
89
+ *.jade text
90
+ *.latte text
91
+ *.mustache text
92
+ *.njk text
93
+ *.phtml text
94
+ *.tmpl text
95
+ *.tpl text
96
+ *.twig text
97
+
98
+ ## LINTERS
99
+ .babelrc text
100
+ .csslintrc text
101
+ .eslintrc text
102
+ .htmlhintrc text
103
+ .jscsrc text
104
+ .jshintrc text
105
+ .jshintignore text
106
+ .prettierrc text
107
+ .stylelintrc text
108
+
109
+ ## CONFIGS
110
+ *.bowerrc text
111
+ *.cnf text
112
+ *.conf text
113
+ *.config text
114
+ .browserslistrc text
115
+ .editorconfig text
116
+ .gitattributes text
117
+ .gitconfig text
118
+ .gitignore text
119
+ .htaccess text
120
+ *.npmignore text
121
+ *.yaml text
122
+ *.yml text
123
+ browserslist text
124
+ Makefile text
125
+ makefile text
126
+
127
+ ## HEROKU
128
+ Procfile text
129
+ .slugignore text
130
+
131
+ ## GRAPHICS
132
+ *.ai binary
133
+ *.bmp binary
134
+ *.eps binary
135
+ *.gif binary
136
+ *.ico binary
137
+ *.jng binary
138
+ *.jp2 binary
139
+ *.jpg binary
140
+ *.jpeg binary
141
+ *.jpx binary
142
+ *.jxr binary
143
+ *.pdf binary
144
+ *.png binary
145
+ *.psb binary
146
+ *.psd binary
147
+ *.svg text
148
+ *.svgz binary
149
+ *.tif binary
150
+ *.tiff binary
151
+ *.wbmp binary
152
+ *.webp binary
153
+
154
+ ## AUDIO
155
+ *.kar binary
156
+ *.m4a binary
157
+ *.mid binary
158
+ *.midi binary
159
+ *.mp3 binary
160
+ *.ogg binary
161
+ *.ra binary
162
+
163
+ ## VIDEO
164
+ *.3gpp binary
165
+ *.3gp binary
166
+ *.as binary
167
+ *.asf binary
168
+ *.asx binary
169
+ *.fla binary
170
+ *.flv binary
171
+ *.m4v binary
172
+ *.mng binary
173
+ *.mov binary
174
+ *.mp4 binary
175
+ *.mpeg binary
176
+ *.mpg binary
177
+ *.ogv binary
178
+ *.swc binary
179
+ *.swf binary
180
+ *.webm binary
181
+
182
+ ## ARCHIVES
183
+ *.7z binary
184
+ *.gz binary
185
+ *.jar binary
186
+ *.rar binary
187
+ *.tar binary
188
+ *.zip binary
189
+
190
+ ## FONTS
191
+ *.ttf binary
192
+ *.eot binary
193
+ *.otf binary
194
+ *.woff binary
195
+ *.woff2 binary
196
+
197
+ ## EXECUTABLES
198
+ *.exe binary
199
+ *.pyc binary
@@ -0,0 +1,34 @@
1
+ # Commit Message Guide
2
+
3
+ To maintain clarity and consistency, use one of the following commit types when
4
+ writing messages. Keep them short and focused — the `CHANGELOG.md` remains the
5
+ source of truth for full details.
6
+
7
+ ## Commit Types
8
+
9
+ | Type | Description |
10
+ | ----------- | ------------------------------------------------------------ |
11
+ | `feat:` | A new feature or enhancement |
12
+ | `fix:` | A bug fix |
13
+ | `chore:` | Tooling, build scripts, release prep, or other meta changes |
14
+ | `docs:` | Documentation-only changes |
15
+ | `style:` | Formatting or stylistic changes that don't affect behavior |
16
+ | `refactor:` | Code changes that restructure without changing functionality |
17
+ | `test:` | Adding or updating tests |
18
+
19
+ ## Examples
20
+
21
+ - `feat: add cryptomator entry to FOSS spotlight`
22
+ - `fix: correct author metadata in app.html`
23
+ - `chore: prepare v1.13.8 release`
24
+ - `docs: update changelog for v1.13.8`
25
+ - `style: clean up indentation in layout.svelte`
26
+ - `refactor: split utility functions from helpers.js`
27
+ - `test: add unit tests for buildPath util`
28
+
29
+ ---
30
+
31
+ Stick to one type per commit when possible. For mixed changes, pick the most
32
+ meaningful one.
33
+
34
+ Consistency helps, but don’t overthink it — use what makes sense.
@@ -0,0 +1,31 @@
1
+ # Copyright © 2025 Network Pro Strategies (Network Pro™)
2
+ # SPDX-License-Identifier: CC-BY-4.0 OR GPL-3.0-or-later
3
+ # This file is part of Network Pro
4
+
5
+ blank_issues_enabled: true
6
+ contact_links:
7
+ - name: 🐛 File a Bug Report
8
+ url: https://github.com/netwk-pro/netwk-pro.github.io/issues/new?template=bug_report.yml
9
+ about: Please open all bug reports in the main repository.
10
+
11
+ - name: ✨ Feature Request
12
+ url: https://github.com/netwk-pro/netwk-pro.github.io/issues/new?template=feature_request.yml
13
+ about: Suggest new or updated features in the main repository.
14
+
15
+ - name: ⚖️ Legal or Compliance Issue
16
+ url: https://github.com/netwk-pro/netwk-pro.github.io/issues/new?template=legal_review.yml
17
+ about: Raise legal or policy-related issues centrally.
18
+
19
+ - name: Ask the Community
20
+ url: https://discuss.neteng.pro
21
+ about: Join the GitHub Discussions forum to get support from the community.
22
+
23
+ - name: Stack Overflow (Internal Team)
24
+ url: https://stack.neteng.pro
25
+ about:
26
+ Search or post questions in our internal Stack Overflow for Teams
27
+ instance.
28
+
29
+ - name: Contact Network Pro
30
+ url: https://netwk.pro/contact?utm_source=github
31
+ about: Contact us directly for help or private inquiries.
@@ -0,0 +1,34 @@
1
+ # .github/workflows/auto-assign.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
+ # This workflow will auto-assign an issue or PR to a specific user
8
+ # when a new issue or PR is opened.
9
+
10
+ name: Auto Assign
11
+
12
+ on:
13
+ issues:
14
+ types: [opened]
15
+ pull_request:
16
+ types: [opened, edited, synchronize, reopened]
17
+
18
+ permissions:
19
+ issues: write
20
+ contents: read
21
+ pull-requests: write
22
+
23
+ jobs:
24
+ auto-assign:
25
+ runs-on: ubuntu-24.04
26
+
27
+ steps:
28
+ - name: 'Auto-assign issue or PR'
29
+ uses: pozil/auto-assign-issue@v2
30
+ with:
31
+ repo-token: ${{ secrets.GITHUB_TOKEN }}
32
+ assignees: SunDevil311
33
+ numOfAssignee: 1
34
+ allowSelfAssign: true
@@ -0,0 +1,40 @@
1
+ # .github/workflows/backup-branch.yml
2
+ #
3
+ # Syncs backup/nightly-snapshot branch with master every day at 10:00 UTC.
4
+ # Only triggers on the default branch and not on PRs
5
+ #
6
+ # Copyright © 2025 Network Pro Strategies (Network Pro™)
7
+ # SPDX-License-Identifier: CC-BY-4.0 OR GPL-3.0-or-later
8
+ # This file is part of Network Pro
9
+
10
+ name: Nightly Backup Branch Sync
11
+
12
+ on:
13
+ schedule:
14
+ - cron: '0 11 * * *' # Every day at 11:00 AM UTC (4:00 AM MST)
15
+ workflow_dispatch: # Allow manual triggering too
16
+
17
+ permissions:
18
+ contents: write
19
+
20
+ jobs:
21
+ sync-backup:
22
+ name: Sync backup/nightly-snapshot to master
23
+ runs-on: ubuntu-24.04
24
+ if: github.ref == 'refs/heads/master' && github.event_name != 'pull_request'
25
+
26
+ steps:
27
+ - name: Checkout master branch
28
+ uses: actions/checkout@v4
29
+ with:
30
+ ref: master
31
+ fetch-depth: 0 # Required to push to another branch
32
+
33
+ - name: Set up Git
34
+ run: |
35
+ git config user.name "SunDevil311"
36
+ git config user.email "github@sl.neteng.cc"
37
+
38
+ - name: Force-push to backup/nightly-snapshot
39
+ run: |
40
+ git push --force origin HEAD:refs/heads/backup/nightly-snapshot
@@ -0,0 +1,85 @@
1
+ # .github/workflows/build-and-deploy.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: Build Site and Deploy to GH Pages
8
+
9
+ on:
10
+ release:
11
+ types: [created]
12
+ workflow_dispatch:
13
+
14
+ # Sets permissions of the GITHUB_TOKEN to allow deployment to GitHub Pages
15
+ permissions:
16
+ actions: read
17
+ contents: read
18
+ pages: write
19
+ id-token: write
20
+
21
+ # Allow one concurrent deployment
22
+ concurrency:
23
+ group: 'pages'
24
+ cancel-in-progress: true
25
+
26
+ jobs:
27
+ check-codeql:
28
+ uses: ./.github/workflows/check-codeql.yml
29
+
30
+ build:
31
+ needs: check-codeql
32
+ runs-on: ubuntu-24.04
33
+
34
+ steps:
35
+ - name: Checkout repository
36
+ uses: actions/checkout@v4
37
+ with:
38
+ fetch-depth: 0
39
+
40
+ - name: Set up Node.js
41
+ uses: actions/setup-node@v4
42
+ with:
43
+ node-version: lts/*
44
+ check-latest: true
45
+ cache: npm
46
+ cache-dependency-path: package-lock.json
47
+
48
+ - name: Set up Pages
49
+ uses: actions/configure-pages@v5
50
+
51
+ - name: Install Node.js dependencies
52
+ run: npm ci
53
+
54
+ # Begin Material for MkDocs setup
55
+ - name: Set up Python
56
+ uses: actions/setup-python@v5
57
+ with:
58
+ python-version: '3.13'
59
+
60
+ - name: Install Python dependencies
61
+ run: pip install -r requirements.txt
62
+
63
+ # Strict mode disabled for mkdocs-material
64
+ - name: Build MkDocs documentation
65
+ run: mkdocs build
66
+
67
+ - name: Copy package.json to build directory
68
+ run: cp package.json build/
69
+
70
+ - name: Upload artifact
71
+ uses: actions/upload-pages-artifact@v3
72
+ with:
73
+ path: ./build
74
+
75
+ deploy:
76
+ needs: [check-codeql, build]
77
+ environment:
78
+ name: github-pages
79
+ url: ${{ steps.deployment.outputs.page_url }}
80
+ runs-on: ubuntu-24.04
81
+
82
+ steps:
83
+ - name: Deploy to GitHub Pages
84
+ id: deployment
85
+ uses: actions/deploy-pages@v4
@@ -0,0 +1,40 @@
1
+ # .github/workflows/check-codeql.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: CodeQL Status Check
8
+
9
+ permissions:
10
+ actions: read
11
+ contents: read
12
+
13
+ on:
14
+ workflow_call:
15
+
16
+ jobs:
17
+ check:
18
+ name: Check CodeQL Status
19
+ runs-on: ubuntu-24.04
20
+
21
+ steps:
22
+ - name: Check CodeQL Workflow
23
+ env:
24
+ GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
25
+ run: |
26
+ gh --version
27
+
28
+ if ! gh run list --repo "${GITHUB_REPOSITORY}" --workflow "CodeQL" --limit 1 --json conclusion --jq '.[0].conclusion' > codeql_status.txt; then
29
+ echo "::error title=CodeQL Check Failed::Could not retrieve CodeQL run status. Blocking deployment."
30
+ exit 1
31
+ fi
32
+
33
+ CODEQL_STATUS=$(cat codeql_status.txt)
34
+ echo "CodeQL status: $CODEQL_STATUS"
35
+ if [[ "$CODEQL_STATUS" != "success" ]]; then
36
+ echo "::error title=CodeQL Check Failed::Latest CodeQL run did not succeed. Blocking deployment."
37
+ exit 1
38
+ fi
39
+
40
+ rm -f codeql_status.txt
@@ -0,0 +1,21 @@
1
+ # .github/workflows/dependency-review.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: Dependency Review
8
+ on: [pull_request]
9
+
10
+ permissions:
11
+ contents: read
12
+
13
+ jobs:
14
+ dependency-review:
15
+ runs-on: ubuntu-24.04
16
+ steps:
17
+ - name: 'Checkout Repository'
18
+ uses: actions/checkout@v4
19
+
20
+ - name: 'Dependency Review'
21
+ uses: actions/dependency-review-action@v4
@@ -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
+ }
package/CHANGELOG.md CHANGED
@@ -16,6 +16,88 @@ formatting may vary.
16
16
 
17
17
  ---
18
18
 
19
+ ## [1.3.4] - 2025-06-23
20
+
21
+ ### Changed
22
+
23
+ - Bumped version to `v1.3.4`.
24
+
25
+ ### Fixed
26
+
27
+ - Removed legacy `.npmrc` file that was overriding registry authentication and
28
+ causing `401 Unauthorized` errors during publishing.
29
+ - Restored default registry handling through `setup-node` for reliable
30
+ token-based authentication to `npmjs.org`.
31
+
32
+ ---
33
+
34
+ ## [1.3.3] - 2025-06-23
35
+
36
+ ### Added
37
+
38
+ - Diagnostic logging to verify active registry, token configuration, and
39
+ `.npmrc` state prior to publishing.
40
+
41
+ ### Changed
42
+
43
+ - Bumped version to `v1.3.3`.
44
+
45
+ ### Fixed
46
+
47
+ - Resolved persistent authentication failure during publish by reintroducing
48
+ `npm ci` and upgrading npm in registry workflows.
49
+ - Adjusted step ordering to ensure environment and Git config are fully
50
+ initialized before registry checks.
51
+
52
+ ---
53
+
54
+ ## [1.3.2] - 2025-06-23
55
+
56
+ ### Added
57
+
58
+ - Authentication check (`npm whoami`) before publish to confirm registry access.
59
+
60
+ ### Changed
61
+
62
+ - Bumped version to `v1.3.2`.
63
+
64
+ ### Fixed
65
+
66
+ - Resolved publishing failure caused by missing lockfile and outdated npm
67
+ version in registry workflows.
68
+ - Reintroduced `npm ci` and upgraded npm to ensure compatibility with scoped
69
+ package publishing.
70
+
71
+ ---
72
+
73
+ ## [1.3.1]
74
+
75
+ ### Changes
76
+
77
+ - Removed `cache-dependency-path` from publish workflows to avoid
78
+ lockfile-related cache issues.
79
+ - Verified presence of `package-lock.json` in the extracted archive and
80
+ maintained default npm caching behavior.
81
+ - Bumped version to `v1.3.1`.
82
+
83
+ ---
84
+
85
+ ## [1.3.0]
86
+
87
+ ### Added
88
+
89
+ - Introduced a test publish workflow (`.github/workflows/publish-test.yml`) to
90
+ validate the `git archive` packaging method via dry-run publishing.
91
+
92
+ ### Changed
93
+
94
+ - Bumped version to `v1.3.0`.
95
+ - Reformatted `.github/COMMIT_GUIDE.md` to align with Prettier conventions.
96
+ - Refactored `.github/workflows/publish.yml` to use `git archive` for publishing
97
+ to registries.
98
+
99
+ ---
100
+
19
101
  ## [1.2.8] - 2025-06-23
20
102
 
21
103
  ### Added
@@ -62,6 +144,10 @@ formatting may vary.
62
144
 
63
145
  <!-- Link references -->
64
146
 
65
- [Unreleased]: https://github.com/netwk-pro/blog/compare/v1.2.8...HEAD
147
+ [Unreleased]: https://github.com/netwk-pro/blog/compare/v1.3.3...HEAD
148
+ [1.3.3]: https://github.com/netwk-pro/blog/releases/tag/v1.3.3
149
+ [1.3.2]: https://github.com/netwk-pro/blog/releases/tag/v1.3.2
150
+ [1.3.1]: https://github.com/netwk-pro/blog/releases/tag/v1.3.1
151
+ [1.3.0]: https://github.com/netwk-pro/blog/releases/tag/v1.3.0
66
152
  [1.2.8]: https://github.com/netwk-pro/blog/releases/tag/v1.2.8
67
153
  [1.2.7]: https://github.com/netwk-pro/blog/releases/tag/v1.2.7
File without changes
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@networkpro/blog",
3
- "version": "1.2.8",
3
+ "version": "1.3.4",
4
4
  "description": "The official blog of Network Pro Strategies (Network Pro™).",
5
5
  "keywords": [
6
6
  "advisory",
@@ -0,0 +1,11 @@
1
+ authors:
2
+ team:
3
+ name: Network Pro
4
+ description: Creator
5
+ avatar: https://avatars.githubusercontent.com/u/170266279
6
+ url: https://netwk.pro/
7
+ SunDevil311:
8
+ name: Scott Lopez
9
+ description: Creator
10
+ avatar: https://avatars.githubusercontent.com/u/10506001
11
+ url: https://github.com/SunDevil311
@@ -0,0 +1 @@
1
+ draft: true