CleanUpWiki_v12 - itnett/FTD02H-N GitHub Wiki

Det ser ut som at det har oppstått en feil når skriptet prøvde å pushe endringer til Wiki-repositoriet. Meldingen indikerer at main-grenen ikke eksisterer i Wiki-repositoriet, og det er sannsynlig at master er standardgrenen for dette repositoriet. La oss justere skriptet for å bruke riktig gren for Wiki-repoet.

Oppdatert skript for Wiki-repo:

Her er en liten justering i skriptet for å sikre at vi bruker master-grenen når vi jobber med Wiki-repositoriet:

# Funksjon for å utføre Git-operasjoner
def git_operations(directory, commit_message, branch='main'):
    os.chdir(directory)
    
    # Legg til filer i staging
    subprocess.run(["git", "add", "."])
    
    # Commit med en beskrivelse
    subprocess.run(["git", "commit", "-m", commit_message])
    
    # Oppdaterer (puller) siste endringer
    subprocess.run(["git", "pull", "--rebase"])
    
    # Pusher til remote repository
    subprocess.run(["git", "push", "-u", "origin", branch])

# Hovedløp
# Git-operasjoner med logging og commit-melding
commit_message_code_repo = generate_commit_message()
commit_message_wiki_repo = generate_commit_message()

# Pusher til 'main'-grenen for code_repo_directory
git_operations(code_repo_directory, commit_message_code_repo, branch='main')

# Pusher til 'master'-grenen for dump_directory (Wiki-repoet)
git_operations(dump_directory, commit_message_wiki_repo, branch='master')

Hva er nytt?

  • Branch-parameter: Jeg har lagt til en branch-parameter til git_operations-funksjonen som standard er satt til main, men for Wiki-repoet setter vi den til master.
  • Bruk av riktig gren: Når vi pusher endringer til dump_directory, bruker vi nå master-grenen i stedet for main.

Hva bør du gjøre videre?

  1. Oppdatere skriptet: Oppdater skriptet med endringene ovenfor.
  2. Kjør skriptet igjen: Dette vil forsøke å pushe endringene til master-grenen i Wiki-repoet.

Dette burde løse problemet, og alt burde da bli pushet korrekt til GitHub.

Her er den fullstendige oppdaterte versjonen av skriptet som tar hensyn til den grenen som skal brukes for Wiki-repoet:

import os
import re
import subprocess
import datetime
import yaml

# Last inn konfigurasjon fra YAML-fil
with open('input.yml', 'r') as file:
    config = yaml.safe_load(file)

wiki_repo_url = config['wiki_repo_url']
dump_directory = config['dump_directory']
code_repo_url = config['code_repo_url']
code_repo_directory = config['code_repo_directory']

# Funksjon for å identifisere kjørbar kode i et kjent format
def is_executable_code_block(code_block):
    executable_patterns = [r'^```python', r'^```bash', r'^```sql', r'^```makefile', r'^```shell']
    for pattern in executable_patterns:
        if re.search(pattern, code_block, re.MULTILINE):
            return True
    return False

# Funksjon for å migrere kodeblokker
def migrate_code_blocks(input_dir, output_dir):
    if not os.path.exists(output_dir):
        os.makedirs(output_dir)

    for root, _, files in os.walk(input_dir):
        for file in files:
            if file.endswith('.md'):
                file_path = os.path.join(root, file)
                with open(file_path, 'r', encoding='utf-8') as f:
                    content = f.read()

                # Finn alle kodeblokker
                code_blocks = re.findall(r'```.*?```', content, re.DOTALL)

                for block in code_blocks:
                    if is_executable_code_block(block):
                        # Bestem filtype basert på innholdet
                        if '```python' in block:
                            extension = 'py'
                            folder = 'Python'
                        elif '```bash' in block or '```shell' in block:
                            extension = 'sh'
                            folder = 'ShellScripts'
                        elif '```sql' in block:
                            extension = 'sql'
                            folder = 'SQL'
                        elif '```makefile' in block:
                            extension = 'makefile'
                            folder = 'Makefiles'
                        else:
                            continue

                        # Opprett mappe hvis den ikke finnes
                        folder_path = os.path.join(output_dir, folder)
                        if not os.path.exists(folder_path):
                            os.makedirs(folder_path)

                        output_file_path = os.path.join(folder_path, f"{os.path.splitext(file)[0]}.{extension}")
                        with open(output_file_path, 'w', encoding='utf-8') as code_file:
                            code_file.write(block.strip('`').strip())

                        # Lag en README.md for hver fil
                        readme_file_path = os.path.join(folder_path, "README.md")
                        with open(readme_file_path, 'a', encoding='utf-8') as readme_file:
                            readme_file.write(f"- {os.path.splitext(file)[0]}.{extension} er hentet fra {file_path}\n")

                        print(f"Kode blokk eksportert til {output_file_path}")

# Funksjon for å oppdatere URL-er i wiki-sidene
def update_wiki_urls(directory, old_base_url, new_base_url):
    for root, _, files in os.walk(directory):
        for file in files:
            if file.endswith('.md'):
                file_path = os.path.join(root, file)
                with open(file_path, 'r', encoding='utf-8') as f:
                    content = f.read()

                updated_content = re.sub(old_base_url, new_base_url, content)

                with open(file_path, 'w', encoding='utf-8') as f:
                    f.write(updated_content)
                print(f"Oppdatert URL-er i {file_path}")

# Funksjon for å utføre Git-operasjoner
def git_operations(directory, commit_message, branch='main'):
    os.chdir(directory)
    
    # Legg til filer i staging
    subprocess.run(["git", "add", "."])
    
    # Commit med en beskrivelse
    subprocess.run(["git", "commit", "-m", commit_message])
    
    # Oppdaterer (puller) siste endringer
    subprocess.run(["git", "pull", "--rebase"])
    
    # Pusher til remote repository
    subprocess.run(["git", "push", "-u", "origin", branch])

# Funksjon for å generere en commit-melding med tidsstempel
def generate_commit_message():
    return f"Automatisk oppdatering - {datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S')}"

# Hovedløp
# Klon Wiki-repoet hvis ikke det allerede er klonet
if not os.path.exists(dump_directory):
    subprocess.run(["git", "clone", wiki_repo_url, dump_directory])
else:
    print("Wiki-repoet er allerede klonet.")

# Migrer kodeblokker fra klonet repo til kode-repo
migrate_code_blocks(dump_directory, code_repo_directory)

# Oppdatere URL-er i wiki-repoet
old_base_url = f'{code_repo_url}/blob/main/'
new_base_url = f'{code_repo_url}/blob/main/'
update_wiki_urls(dump_directory, old_base_url, new_base_url)

# Git-operasjoner med logging og commit-melding
commit_message_code_repo = generate_commit_message()
commit_message_wiki_repo = generate_commit_message()

# Pusher til 'main'-grenen for code_repo_directory
git_operations(code_repo_directory, commit_message_code_repo, branch='main')

# Pusher til 'master'-grenen for dump_directory (Wiki-repoet)
git_operations(dump_directory, commit_message_wiki_repo, branch='master')

Sjekklisten for CLI-test:

  1. Git-kloning: Skriptet sjekker om Wiki-repoet allerede er klonet, hvis ikke kloner det repoet til dump_directory.
  2. Kodeblokkmigrering: Migrerer alle relevante kodeblokker fra Wiki-repoet til code_repo_directory, og organiserer dem i mapper basert på filtypen.
  3. URL-oppdatering: Oppdaterer alle URL-er i Wiki-repoet slik at de peker til den nye lokasjonen til kodefilene i code_repo_directory.
  4. Git-operasjoner: Skriptet håndterer add, commit, pull, og push for begge repositoriene (kode- og wiki-repoene), og sørger for at endringer pushes til riktig gren.

Testing:

  • Kjør skriptet på nytt: Test med den nyeste versjonen, og observer at koden håndterer alt som forventet. Hvis det oppstår feil, kan du vurdere å kjøre skriptet i små biter manuelt for å verifisere hver del.
  • Se etter output: Sjekk både GitHub-repoene (https://github.com/itnett/FTD02N.git og https://github.com/itnett/FTD02N.wiki.git) for å sikre at alt ser riktig ut etter kjøringen.

La meg vite om du vil fortsette med denne testen, eller om det er andre tilpasninger du trenger før du kjører skriptet.