mirror of
https://github.com/Lissy93/personal-security-checklist.git
synced 2024-12-22 20:05:05 +07:00
Writes a script to automate insertion of checklist
This commit is contained in:
parent
20bddeee87
commit
d1dbc86a2e
50
.github/workflows/insert-checklist.yml
vendored
Normal file
50
.github/workflows/insert-checklist.yml
vendored
Normal file
@ -0,0 +1,50 @@
|
|||||||
|
name: ☑️ Generate and insert markdown from YAML
|
||||||
|
|
||||||
|
on:
|
||||||
|
workflow_dispatch:
|
||||||
|
push:
|
||||||
|
branches: [ main ]
|
||||||
|
paths: ['personal-security-checklist.yml']
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
build:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
|
||||||
|
steps:
|
||||||
|
- name: Checkout repository 🛎️
|
||||||
|
uses: actions/checkout@v2
|
||||||
|
|
||||||
|
# Get current date-time (used for commit message)
|
||||||
|
- name: Get Date 📅
|
||||||
|
id: date
|
||||||
|
run: echo "::set-output name=date::$(date +'%d-%b-%Y')"
|
||||||
|
|
||||||
|
# Downloads + installs Python (used for running gen scripts)
|
||||||
|
- name: Set up Python 🐍
|
||||||
|
uses: actions/setup-python@v2
|
||||||
|
with:
|
||||||
|
python-version: '3.x'
|
||||||
|
|
||||||
|
# Install contents of requirements.txt
|
||||||
|
- name: Install dependencies 📥
|
||||||
|
run: |
|
||||||
|
python -m pip install --upgrade pip
|
||||||
|
cd lib && pip install -r requirements.txt
|
||||||
|
|
||||||
|
# The make command triggers all the Python scripts, generates output
|
||||||
|
- name: Run make command 🔨
|
||||||
|
run: python lib/generate.py
|
||||||
|
|
||||||
|
# Commit and push the outputed JSON files
|
||||||
|
- name: Commit and push generated files ⤴️
|
||||||
|
run: |
|
||||||
|
git config --global user.name "Liss-Bot"
|
||||||
|
git config --global user.email "alicia-gh-bot@mail.as93.net"
|
||||||
|
git pull origin main
|
||||||
|
git add CHECKLIST.md
|
||||||
|
if git diff --staged --quiet; then
|
||||||
|
echo "Nothin new added, so nothing to commit, exiting..."
|
||||||
|
else
|
||||||
|
git commit -m "Updates checklist (auto-generated, on ${{ steps.date.outputs.date }})"
|
||||||
|
git push
|
||||||
|
fi
|
@ -0,0 +1,65 @@
|
|||||||
|
import os
|
||||||
|
import yaml
|
||||||
|
import logging
|
||||||
|
|
||||||
|
# Configure Logging
|
||||||
|
logging.basicConfig(level=logging.INFO)
|
||||||
|
logger = logging.getLogger(__name__)
|
||||||
|
|
||||||
|
project_root = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
|
||||||
|
yaml_file_path = os.path.join(project_root, 'personal-security-checklist.yml')
|
||||||
|
markdown_file_path = os.path.join(project_root, 'CHECKLIST.md')
|
||||||
|
|
||||||
|
|
||||||
|
def read_yaml(file_path):
|
||||||
|
logger.info(f"Reading YAML file from {file_path}...")
|
||||||
|
with open(file_path, 'r') as file:
|
||||||
|
return yaml.safe_load(file)
|
||||||
|
|
||||||
|
def generate_markdown_section(section):
|
||||||
|
markdown = f"## {section['title']}\n\n"
|
||||||
|
markdown += f"{section['intro']}\n\n"
|
||||||
|
markdown += "**Security** | **Priority** | **Details and Hints**\n"
|
||||||
|
markdown += "--- | --- | ---\n"
|
||||||
|
for item in section['checklist']:
|
||||||
|
markdown += f"**{item['point']}** | {item['priority']} | {item['details']}\n"
|
||||||
|
|
||||||
|
if 'softwareLinks' in section:
|
||||||
|
software_links = [software for software in section['softwareLinks'] if 'title' in software and 'url' in software]
|
||||||
|
if software_links:
|
||||||
|
markdown += "\n### Recommended Software\n"
|
||||||
|
for software in software_links:
|
||||||
|
markdown += f"- [{software['title']}]({software['url']})\n"
|
||||||
|
|
||||||
|
return markdown
|
||||||
|
|
||||||
|
def insert_markdown_content(md_file_path, new_content):
|
||||||
|
start_marker, end_marker = "<!-- checklist-start -->", "<!-- checklist-end -->"
|
||||||
|
logger.info(f"Inserting generated markdown into {md_file_path} between markers...")
|
||||||
|
|
||||||
|
with open(md_file_path, 'r') as file:
|
||||||
|
content = file.read()
|
||||||
|
|
||||||
|
start_index = content.find(start_marker)
|
||||||
|
end_index = content.find(end_marker, start_index)
|
||||||
|
|
||||||
|
if start_index == -1 or end_index == -1:
|
||||||
|
logger.error("Markers not found in the markdown file.")
|
||||||
|
return
|
||||||
|
|
||||||
|
updated_content = content[:start_index + len(start_marker)] + "\n" + new_content + "\n" + content[end_index:]
|
||||||
|
|
||||||
|
with open(md_file_path, 'w') as file:
|
||||||
|
file.write(updated_content)
|
||||||
|
logger.info("Markdown content successfully inserted.")
|
||||||
|
|
||||||
|
def main():
|
||||||
|
yaml_data = read_yaml(yaml_file_path)
|
||||||
|
markdown_content = ""
|
||||||
|
for section in yaml_data:
|
||||||
|
markdown_content += generate_markdown_section(section) + "\n\n"
|
||||||
|
insert_markdown_content(markdown_file_path, markdown_content)
|
||||||
|
logger.info("Script completed successfully!")
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
main()
|
2
lib/requirements.txt
Normal file
2
lib/requirements.txt
Normal file
@ -0,0 +1,2 @@
|
|||||||
|
PyYAML==6.0.1
|
||||||
|
requests==2.31.0
|
Loading…
Reference in New Issue
Block a user