mirror of
https://github.com/xivdev/EXDSchema.git
synced 2025-06-05 23:57:46 +00:00
Add validate action
This commit is contained in:
parent
96e7cd1e9c
commit
184f1c987a
1 changed files with 157 additions and 0 deletions
157
.github/workflows/validate.yml
vendored
Normal file
157
.github/workflows/validate.yml
vendored
Normal file
|
@ -0,0 +1,157 @@
|
|||
name: Validate Schemas
|
||||
on: [push]
|
||||
|
||||
jobs:
|
||||
generate-matrix:
|
||||
name: Generate Job Matrix
|
||||
runs-on: ubuntu-latest
|
||||
outputs:
|
||||
changed_schema: ${{ steps.check-schemas.outputs.changed_schema }}
|
||||
matrix: ${{ steps.set-matrix.outputs.matrix }}
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
with:
|
||||
fetch-depth: 0
|
||||
|
||||
- uses: tj-actions/changed-files@v40
|
||||
id: changed-files
|
||||
|
||||
# Don't run if there are no changes in the Schemas folder
|
||||
- name: Check for changes in Schemas folder
|
||||
id: check-schemas
|
||||
run: |
|
||||
changed_schema=false
|
||||
for file in ${{ steps.changed-files.outputs.all_changed_files }}; do
|
||||
if [[ $file == *"Schemas"* ]]; then
|
||||
changed_schema=true
|
||||
fi
|
||||
done
|
||||
echo "changed_schema=$changed_schema"
|
||||
echo "changed_schema=$changed_schema" >> $GITHUB_OUTPUT
|
||||
|
||||
# Create a list of all game versions with a changed schema.
|
||||
# We manually create a JSON string here because that's the only way
|
||||
# to get this info into the matrix for the next job
|
||||
- name: Set Matrix
|
||||
if: steps.check-schemas.outputs.changed_schema == 'true'
|
||||
id: set-matrix
|
||||
run: |
|
||||
JSON="{\"gamever\":["
|
||||
for file in ${{ steps.changed-files.outputs.all_changed_files }}; do
|
||||
folder="$(basename "$(dirname "$file")")"
|
||||
# do something with $folder
|
||||
echo "$folder"
|
||||
JSONline="\"$folder\","
|
||||
|
||||
# de-dupe and ignore non-game versions
|
||||
if [[ "$JSON" != *"$JSONline"* ]]; then
|
||||
# grep regex for \d{4}\.\d{2}\.\d{2}\.\d{4}\.\d{4}
|
||||
if [[ $folder =~ ^[0-9]{4}\.[0-9]{2}\.[0-9]{2}\.[0-9]{4}\.[0-9]{4}$ ]]; then
|
||||
JSON="$JSON$JSONline"
|
||||
fi
|
||||
fi
|
||||
done
|
||||
|
||||
# Remove last "," and add the closing bracket
|
||||
if [[ $JSON == *, ]]; then
|
||||
JSON="${JSON%?}"
|
||||
fi
|
||||
JSON="$JSON]}"
|
||||
|
||||
echo $JSON
|
||||
echo "matrix=$( echo "$JSON" )" >> $GITHUB_OUTPUT
|
||||
|
||||
validate:
|
||||
name: Validate
|
||||
# Crucially must run on a self-hosted runner with the expected setup in /opt/
|
||||
# it is recommended that the self-hosted runner uses DirectoryManager on a schedule
|
||||
# for automatic updates to the output and storage directories
|
||||
# Expected "directory" (from EXDTools/DirectoryManager) directory: `/opt/exd/output/`
|
||||
# Expected storage directory (same): `/opt/exd/storage/`
|
||||
# Everything else is handled by the action.
|
||||
runs-on: self-hosted
|
||||
needs: generate-matrix
|
||||
if: needs.generate-matrix.outputs.changed_schema == 'true'
|
||||
strategy:
|
||||
matrix: ${{fromJson(needs.generate-matrix.outputs.matrix)}}
|
||||
steps:
|
||||
- run: echo "Validating ${{ matrix.gamever }}"
|
||||
|
||||
- uses: actions/checkout@v4
|
||||
|
||||
# Fetch SchemaValidator from xivdev/EXDTools latest releases
|
||||
- name: Download SchemaValidator
|
||||
uses: robinraju/release-downloader@v1.8
|
||||
with:
|
||||
repository: "xivdev/EXDTools"
|
||||
latest: true
|
||||
fileName: "SchemaValidator-linux-x64"
|
||||
token: ${{ secrets.xtoken }} # TODO: Remove this when the repo is public
|
||||
|
||||
# Fetch Schema.json from xivdev/EXDTools latest releases
|
||||
- name: Download Schema.json
|
||||
uses: robinraju/release-downloader@v1.8
|
||||
with:
|
||||
repository: "xivdev/EXDTools"
|
||||
latest: true
|
||||
fileName: "Schema.json"
|
||||
token: ${{ secrets.xtoken }} # TODO: Remove this when the repo is public
|
||||
|
||||
- name: Run SchemaValidator
|
||||
run: |
|
||||
chmod +x SchemaValidator-linux-x64
|
||||
./SchemaValidator-linux-x64 /opt/exd/output/${{ matrix.gamever }}.json /opt/exd/storage/ Schema.json Schemas/${{ matrix.gamever }}/ CI
|
||||
|
||||
- name: Process results
|
||||
run: |
|
||||
cat message
|
||||
|
||||
failureCount=$(cat failure)
|
||||
if [[ $failureCount -gt 0 ]]; then
|
||||
exit 1
|
||||
fi
|
||||
|
||||
errorCount=$(cat error)
|
||||
if [[ $errorCount -gt 0 ]]; then
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Publish a release if the validation was successful on main
|
||||
publish:
|
||||
name: Publish
|
||||
runs-on: ubuntu-latest
|
||||
needs: validate
|
||||
if: github.ref == 'refs/heads/main'
|
||||
permissions:
|
||||
contents: write
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
|
||||
- name: Define version
|
||||
id: define-version
|
||||
run: echo "version=$(git rev-parse --short HEAD)" >> $GITHUB_OUTPUT
|
||||
|
||||
- name: Create Artifacts
|
||||
run: |
|
||||
rm -rf release-out/
|
||||
mkdir release-out/
|
||||
cd Schemas
|
||||
for d in * ; do
|
||||
echo "Zipping $d"
|
||||
zip -rq9 ../release-out/$d.zip $d
|
||||
done
|
||||
|
||||
- name: Create Release
|
||||
uses: softprops/action-gh-release@v1
|
||||
env:
|
||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||
with:
|
||||
files: release-out/**
|
||||
name: Release for ${{ steps.define-version.outputs.version }}
|
||||
tag_name: ${{ steps.define-version.outputs.version }}
|
||||
|
||||
- uses: dev-drprasad/delete-older-releases@v0.3.2
|
||||
with:
|
||||
keep_latest: 1
|
||||
env:
|
||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
Loading…
Add table
Reference in a new issue