diff --git a/.gitea/workflows/auto_pr.yaml b/.gitea/workflows/auto_pr.yaml new file mode 100644 index 0000000..d14e2ac --- /dev/null +++ b/.gitea/workflows/auto_pr.yaml @@ -0,0 +1,35 @@ +name: Generate Release + +run-name: Release_Generator +on: + push: + branches: + - auto-* + - workflow_update + - pis-* + +jobs: + validate_and_release: + runs-on: ubuntu-latest + permissions: + contents: write + steps: + - name: Check out Repo code + uses: actions/checkout@v3 + + - name: Validate YAML + uses: https://github.com/GrantBirki/json-yaml-validate@v2.6.1 + + - name: Install Dependencies + run: npm i + + - name: Merge to gw.yaml + run: node ./scripts/merge-yaml.js + + - name: Commit Changes + uses: https://github.com/stefanzweifel/git-auto-commit-action@v5 + with: + commit_message: Sort & Merge PIS Files + commit_user_name: owlbot + commit_user_email: owlbot@owlboard.info + commit_author: Robotic Owl \ No newline at end of file diff --git a/.gitea/workflows/release.yaml b/.gitea/workflows/release.yaml new file mode 100644 index 0000000..47003eb --- /dev/null +++ b/.gitea/workflows/release.yaml @@ -0,0 +1,32 @@ +name: Generate Release + +run-name: Release_Generator +on: + push: + branches: + - main + +jobs: + validate_and_release: + runs-on: ubuntu-latest + steps: + - name: Check out Repo code + uses: actions/checkout@v3 + + - name: Validate YAML + uses: https://github.com/GrantBirki/json-yaml-validate@v2.6.1 + + - name: Get current timestamp + id: timestamp + run: echo "::set-output name=date::$(date +'%Y%m%d_%H%M%S')" + + - name: Create Release + if: success() + uses: akkuman/gitea-release-action@v1 + env: + NODE_OPTIONS: '--experimental-fetch' + with: + body: Automatic release after changes + tag_name: ${{ steps.timestamp.outputs.date }} + name: ${{ steps.timestamp.outputs.date }} + token: ${{ secrets.OWLBOT_KEY }} diff --git a/package.json b/package.json new file mode 100644 index 0000000..03bc394 --- /dev/null +++ b/package.json @@ -0,0 +1,14 @@ +{ + "name": "merge-yaml", + "version": "1.0.0", + "description": "Contains OwlBoard provided data. Queried programatically by the OwlBoard dbmanager application to be loaded into the database.", + "main": "index.js", + "scripts": { + "test": "echo \"Error: no test specified\" && exit 1" + }, + "author": "", + "license": "ISC", + "dependencies": { + "yaml": "^2.4.1" + } +} diff --git a/scripts/merge-yaml.js b/scripts/merge-yaml.js new file mode 100644 index 0000000..b16a9a4 --- /dev/null +++ b/scripts/merge-yaml.js @@ -0,0 +1,69 @@ +const fs = require('fs') +const yaml = require('yaml') + +const directoryPath = './pis/' + +function sortAndMergeYAMLFiles() { + try { + const files = fs.readdirSync(directoryPath); + + let mergedData = []; + + files.forEach(file => { + const data = fs.readFileSync(directoryPath + file, 'utf-8'); + + const parsedData = yaml.parse(data) + + if (parsedData && typeof parsedData === 'object' && parsedData.pis) { + mergedData.push(...parsedData.pis) + } else { + if (Array.isArray(parsedData)) { + mergedData.push(...parsedData); + } else { + console.error("Incorrect YAML") + } + } + }); + + mergedData.sort((a, b) => { + const codeA = parseInt(a.code); + const codeB = parseInt(b.code); + return codeA - codeB + }) + + + + // Construct the output string, removing duplicates + let outputString = "pis:\n"; + const seenCodes = new Set(); + mergedData.forEach(item => { + if (!seenCodes.has(item.code) && item.stops.length > 0) { + seenCodes.add(item.code); + outputString += ` - code: "${item.code}"\n`; + outputString += ` stops: [${item.stops.map(stop => `${stop}`).join(',')}]\n`; + outputString += ` toc: "${item.toc || "gw"}"\n`; + } + }); + + try { + fs.writeFileSync('./pis/codes.yaml', outputString); + console.log("Overwritten codes.yaml") + } catch (err) { + console.error("Error writing codes.yaml", err) + } + + // Remove any files created by dgp2 + files.forEach(file => { + if (file.startsWith('auto-')) { + fs.unlinkSync(directoryPath + file); + console.log(`Deleted file: ${file}`); + } + }); + + } catch(err) { + console.error('Error merging YAML:', err) + } +} + + +sortAndMergeYAMLFiles(); \ No newline at end of file