https://github.com/codebruinc/ics-validator-action
GitHub Action to validate ICS/iCalendar files for format compliance and common issues
https://github.com/codebruinc/ics-validator-action
Last synced: 5 days ago
JSON representation
GitHub Action to validate ICS/iCalendar files for format compliance and common issues
- Host: GitHub
- URL: https://github.com/codebruinc/ics-validator-action
- Owner: codebruinc
- License: mit
- Created: 2025-09-08T14:51:51.000Z (10 months ago)
- Default Branch: main
- Last Pushed: 2025-09-08T14:52:42.000Z (10 months ago)
- Last Synced: 2025-09-08T16:42:42.934Z (10 months ago)
- Language: JavaScript
- Size: 515 KB
- Stars: 0
- Watchers: 0
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# ICS Calendar Validator Action
[](https://github.com/marketplace/actions/ics-calendar-validator)
[](https://opensource.org/licenses/MIT)
A GitHub Action that validates ICS/iCalendar files for format compliance and common issues. Perfect for CI/CD pipelines that work with calendar data.
## Features
- ✅ Validates ICS file structure and format
- ✅ Checks for required calendar properties (VERSION, PRODID)
- ✅ Validates event properties (UID, DTSTAMP, DTSTART)
- ✅ Detects common issues (missing properties, invalid dates, duplicate UIDs)
- ✅ Supports glob patterns for validating multiple files
- ✅ Detailed error and warning reporting
- ✅ Configurable failure conditions
## Usage
### Basic Usage
```yaml
name: Validate Calendar Files
on: [push, pull_request]
jobs:
validate:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Validate ICS files
uses: codebruinc/ics-validator-action@v1
with:
files: '**/*.ics'
```
### Advanced Usage
```yaml
name: Calendar Validation
on:
pull_request:
paths:
- '**.ics'
- 'calendars/**'
jobs:
validate-calendars:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Validate calendar files
uses: codebruinc/ics-validator-action@v1
with:
files: 'calendars/**/*.ics'
fail-on-error: true
fail-on-warning: false
- name: Upload validation report
if: always()
uses: actions/upload-artifact@v3
with:
name: validation-report
path: validation-report.json
```
### Validate Specific Directory
```yaml
- name: Validate event calendars
uses: codebruinc/ics-validator-action@v1
with:
files: 'events/*.ics'
fail-on-error: true
```
### Multiple Pattern Validation
```yaml
- name: Validate all calendar files
uses: codebruinc/ics-validator-action@v1
with:
files: |
events/*.ics
schedules/*.ics
exports/*.ical
```
## Inputs
| Input | Description | Required | Default |
|-------|-------------|----------|---------|
| `files` | Path to ICS files to validate (supports glob patterns) | No | `**/*.ics` |
| `fail-on-error` | Fail the action if validation errors are found | No | `true` |
| `fail-on-warning` | Fail the action if validation warnings are found | No | `false` |
## Outputs
| Output | Description |
|--------|-------------|
| `errors` | Number of validation errors found |
| `warnings` | Number of validation warnings found |
| `report` | Detailed validation report in JSON format |
### Using Outputs
```yaml
- name: Validate calendars
id: validate
uses: codebruinc/ics-validator-action@v1
with:
files: '**/*.ics'
- name: Check results
run: |
echo "Errors: ${{ steps.validate.outputs.errors }}"
echo "Warnings: ${{ steps.validate.outputs.warnings }}"
- name: Comment on PR
if: github.event_name == 'pull_request' && steps.validate.outputs.errors > 0
uses: actions/github-script@v6
with:
script: |
github.rest.issues.createComment({
issue_number: context.issue.number,
owner: context.repo.owner,
repo: context.repo.repo,
body: '❌ Calendar validation failed with ${{ steps.validate.outputs.errors }} errors'
})
```
## Validation Rules
### Required Properties
- `BEGIN:VCALENDAR` and `END:VCALENDAR` declarations
- `VERSION` property (should be 2.0)
- `UID` for each event
- `DTSTAMP` for each event
- `DTSTART` for each event
### Recommended Properties
- `PRODID` for calendar identification
- `SUMMARY` for event titles
- Either `DTEND` or `DURATION` for event timing
### Common Issues Detected
- Missing required properties
- Invalid date formats
- End date before start date
- Duplicate UIDs
- Both DTEND and DURATION specified
- Missing timezone definitions
## Example Workflow
Here's a complete example workflow that validates calendar files on every push:
```yaml
name: CI
on:
push:
branches: [ main ]
pull_request:
branches: [ main ]
jobs:
validate-ics:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Validate ICS files
id: ics-validator
uses: codebruinc/ics-validator-action@v1
with:
files: '**/*.ics'
fail-on-error: true
fail-on-warning: false
- name: Display validation results
if: always()
run: |
echo "### ICS Validation Results" >> $GITHUB_STEP_SUMMARY
echo "- **Files validated**: $(find . -name "*.ics" | wc -l)" >> $GITHUB_STEP_SUMMARY
echo "- **Errors**: ${{ steps.ics-validator.outputs.errors }}" >> $GITHUB_STEP_SUMMARY
echo "- **Warnings**: ${{ steps.ics-validator.outputs.warnings }}" >> $GITHUB_STEP_SUMMARY
```
## Integration with CalendarMap
This action works great with [CalendarMap](https://calendarmap.app) for validating ICS files generated from CSV data:
```yaml
- name: Convert CSV to ICS
run: |
# Use CalendarMap CLI or API to convert CSV to ICS
npx @calendarmap/cli convert events.csv -o calendar.ics
- name: Validate generated ICS
uses: codebruinc/ics-validator-action@v1
with:
files: 'calendar.ics'
```
## Development
To contribute to this action:
1. Fork the repository
2. Create a feature branch
3. Make your changes
4. Run tests: `npm test`
5. Build the action: `npm run build`
6. Commit changes (including `dist/` folder)
7. Create a pull request
## License
MIT License - see [LICENSE](LICENSE) file for details.
## Support
- 🐛 [Report issues](https://github.com/codebruinc/ics-validator-action/issues)
- 💡 [Request features](https://github.com/codebruinc/ics-validator-action/issues/new)
- 📚 [View documentation](https://github.com/codebruinc/ics-validator-action#readme)
## Credits
Created by [CalendarMap](https://calendarmap.app) - The easy way to convert CSV to calendar format.
---
**Note**: This action uses [ical.js](https://github.com/mozilla-comm/ical.js) for parsing and validating ICS files.