Skip to content

Copy Parse Markdown and Generate JSON from Source Repo #20

Copy Parse Markdown and Generate JSON from Source Repo

Copy Parse Markdown and Generate JSON from Source Repo #20

name: Copy Parse Markdown and Generate JSON from Source Repo
on:
workflow_dispatch:
inputs:
source_repo:
description: 'Source repository name'
required: true
default: 'DmitryRyumin/NewEraAI-Papers'
source_file_path:
description: 'Path to the file in the source repository'
required: true
default: 'code/markdown_to_json_parser.py'
code_directory:
description: 'Directory where code is stored'
required: true
default: 'code'
display_file_contents:
description: 'Whether or not to display the contents of the doanload file and the destination file'
required: true
default: 'false'
type: choice
options:
- true
- false
schedule:
- cron: '30 23 * * *'
jobs:
copy-code:
runs-on: ubuntu-latest
permissions:
contents: write
env:
INPUT_SOURCE_REPO: ${{ github.event.inputs.source_repo || 'DmitryRyumin/NewEraAI-Papers' }}
INPUT_SOURCE_FILE_PATH: ${{ github.event.inputs.source_file_path || 'code/markdown_to_json_parser.py' }}
INPUT_CODE_DIRECTORY: ${{ github.event.inputs.code_directory || 'code' }}
INPUT_DISPLAY_FILE_CONTENTS: ${{ github.event.inputs.display_file_contents || 'false' }}
steps:
- name: Checkout repository
uses: actions/checkout@v4
continue-on-error: true # Continue with the workflow even if the checkout fails
with:
ref: ${{ github.event.before || 'main' }}
- name: Set SOURCE_FILE_PATH
run: |
echo "SOURCE_FILE_PATH=${{ github.workspace }}/${{ env.INPUT_CODE_DIRECTORY }}/markdown_to_json_parser_new.py" >> $GITHUB_ENV
- name: Set SOURCE_DESTINATION_FILE_PATH
run: |
echo "SOURCE_DESTINATION_FILE_PATH=${{ github.workspace }}/${{ env.INPUT_SOURCE_FILE_PATH }}" >> $GITHUB_ENV
- name: Define show_file_content function
run: echo 'source ${{ github.workspace }}/scripts/show_file_content.sh' > show_file_content_step.sh
- name: Download source file
run: |
if mkdir -p "${{ github.workspace }}/${{ env.INPUT_CODE_DIRECTORY }}"; then
echo "Directory created successfully or already existed."
else
echo "Failed to create directory."
exit 1
fi
source_url="https://raw.githubusercontent.com/${{ env.INPUT_SOURCE_REPO }}/main/${{ env.INPUT_SOURCE_FILE_PATH }}"
if curl -o "${{ env.SOURCE_FILE_PATH }}" "$source_url"; then
echo "Source file downloaded successfully."
else
echo "Failed to download source file."
exit 1
fi
- name: Display content of the downloaded source file
run: |
set -e
source show_file_content_step.sh
show_file_content "${{ env.SOURCE_FILE_PATH }}" "${{ env.INPUT_DISPLAY_FILE_CONTENTS }}"
- name: Display content of destination file from target repository
run: |
set -e
source show_file_content_step.sh
show_file_content "${{ env.SOURCE_DESTINATION_FILE_PATH }}" "${{ env.INPUT_DISPLAY_FILE_CONTENTS }}"
- name: Compare and handle files
run: |
set -e
handle_equal_files() {
echo "Files are equal. Deleting SOURCE_FILE_PATH."
if rm "${{ env.SOURCE_FILE_PATH }}"; then
echo "SOURCE_FILE_PATH deleted successfully."
else
echo "Failed to delete SOURCE_FILE_PATH."
exit 1
fi
}
handle_unequal_files() {
echo "Files are not equal. Replacing SOURCE_DESTINATION_FILE_PATH with content from SOURCE_FILE_PATH."
if cat "${{ env.SOURCE_FILE_PATH }}" > "${{ env.SOURCE_DESTINATION_FILE_PATH }}"; then
echo "SOURCE_DESTINATION_FILE_PATH replaced successfully."
rm "${{ env.SOURCE_FILE_PATH }}"
else
echo "Failed to replace SOURCE_DESTINATION_FILE_PATH."
exit 1
fi
}
handle_missing_destination() {
echo "SOURCE_DESTINATION_FILE_PATH does not exist. Renaming SOURCE_FILE_PATH to SOURCE_DESTINATION_FILE_PATH."
if [ -f "${{ env.SOURCE_FILE_PATH }}" ] && [ -f "${{ env.SOURCE_DESTINATION_FILE_PATH }}" ]; then
if mv "${{ env.SOURCE_FILE_PATH }}" "${{ env.SOURCE_DESTINATION_FILE_PATH }}"; then
echo "Files renamed successfully."
else
echo "Failed to rename files."
exit 1
fi
else
echo "One or both of the files do not exist."
fi
}
if [ -f "${{ env.SOURCE_DESTINATION_FILE_PATH }}" ]; then
if cmp -s "${{ env.SOURCE_DESTINATION_FILE_PATH }}" "${{ env.SOURCE_FILE_PATH }}"; then
handle_equal_files
else
handle_unequal_files
fi
else
handle_missing_destination
fi
- name: Display working code directory content
run: |
ls -al "${{ github.workspace }}/${{ env.INPUT_CODE_DIRECTORY }}"
- name: Auto commit changes
uses: stefanzweifel/git-auto-commit-action@v5
with:
commit_message: 'Copy Parse Markdown and Generate JSON from Source Repo'
env:
PAPER_TOKEN: ${{ secrets.PAPER_TOKEN }}
- name: Set output status
run: echo "status=${{ steps.parse.outcome }}" >> $GITHUB_ENV