{"id":32480400,"url":"https://github.com/sskorokhodov/calvest","last_synced_at":"2026-07-03T20:31:35.173Z","repository":{"id":278271364,"uuid":"935075384","full_name":"sskorokhodov/calvest","owner":"sskorokhodov","description":"iCalendar to CSV Converter for Harvest","archived":false,"fork":false,"pushed_at":"2025-05-08T07:55:02.000Z","size":33,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-05-08T08:38:46.435Z","etag":null,"topics":["csv","harvest","ical","icalendar","time-tracking"],"latest_commit_sha":null,"homepage":"","language":"Rust","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/sskorokhodov.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2025-02-18T21:33:49.000Z","updated_at":"2025-05-08T07:55:05.000Z","dependencies_parsed_at":"2025-03-08T22:21:20.539Z","dependency_job_id":"1895e3a5-b879-401a-b401-abffa6631215","html_url":"https://github.com/sskorokhodov/calvest","commit_stats":null,"previous_names":["sskorokhodov/calvest"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/sskorokhodov/calvest","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sskorokhodov%2Fcalvest","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sskorokhodov%2Fcalvest/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sskorokhodov%2Fcalvest/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sskorokhodov%2Fcalvest/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/sskorokhodov","download_url":"https://codeload.github.com/sskorokhodov/calvest/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sskorokhodov%2Fcalvest/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":281202128,"owners_count":26460564,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-10-26T02:00:06.575Z","response_time":61,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["csv","harvest","ical","icalendar","time-tracking"],"created_at":"2025-10-27T01:58:33.573Z","updated_at":"2025-10-27T01:58:34.591Z","avatar_url":"https://github.com/sskorokhodov.png","language":"Rust","funding_links":[],"categories":[],"sub_categories":[],"readme":"# calvest - iCalendar to CSV Converter for Harvest\n\n## Overview\n\nThis tool is for those, who uses [Harvest][harvest] but prefers tracking my\ntasks in a calendar app.\n\nThe process of manually transferring tasks from the calendar to Harvest is\ntime-consuming, erorr prone, and tedious. **calvest** is a command-line tool\ndesigned to transform data in iCalendar (`.ics`) format into a structured CSV\nfile that can be imported into Harvest.\n\nAt the moment **calvest** is only tested with the iCal data exported from Google\nCalendar.\n\n## Features\n\n- **iCal Event Parsing**: Calvest reads iCalendar files and extracts event\n  details including start and end times, summaries, and any additional specified\n  properties.\n- **Configurable Task Mapping**: It allows users to define rules for mapping\n  events to specific tasks, projects, and clients based on regular expression\n  patterns found in event summaries.\n- **Default Task Settings**: Users can specify default tasks, projects, and\n  clients ensuring that all events are appropriately categorized when no\n  specific pattern matches are found.\n- **Date Range Filtering**: Provides options to filter events based on custom\n  date ranges or predefined periods like \"last month\" and \"this month.\"\n- **CSV Output**: The tool outputs a CSV file that includes event details\n  alongside user-defined extra properties, ready for direct import into Harvest.\n\n## Installation\n\nEnsure you have **Rust** installed on your machine. If Rust is not installed,\nyou can install it by following the instructions on the [official Rust\nwebsite](https://www.rust-lang.org/tools/install).\n\n1. **Clone the repository and install the binary**\n\n   Clone the repository and install the binary into your Cargo installation root\n   `bin` folder.\n\n   ```bash\n   git clone https://github.com/yourusername/calvest.git\n   cd calvest\n   cargo install --path .\n   ```\n\n   Ensure your [Cargo installation root `bin` folder][cargo-install] is on the\n   `\"${PATH}\"`.\n\n2. **Verify the Installation**\n\n   Confirm that `calvest` is installed correctly by checking its version:\n\n   ```bash\n   calvest --version\n   ```\n\n2. **Optionally, print completions for you shell**\n\n   Print completions for your shell to the corresponding file, e.g.,\n\n   ```bash\n   calvest --print-completions zsh \u003e ~/.oh-my-zsh/cache/completions/_calvest\n   ```\n\n## Example\n\nIt can be convenient to create a Bash/Just script like this ...\n\n```bash\n#!/bin/bash\n\n# calvest.sh\n\ninput='./my_calendar.ics'\n\ndefault_project='Default Project'\ndefault_project_code='P-CODE'\ndefault_task='Default Task'\ndefault_client='Default Client'\nfirst_name='First-name'\nlast_name='Last-name'\n\noutput='./'\"${first_name}\"\"${last_name}\"'_harvest_'\"$( date -I )\"'.csv'\n\ncalvest \\\n  --input=\"${input}\" \\\n  --output=\"${output}\" \\\n  --first-name=\"${first_name}\" \\\n  --last-name=\"${last_name}\" \\\n  --default-task \\\n    \"${default_task}\" \\\n    \"${default_project}\" \\\n    \"${default_project_code}\" \\\n    \"${default_client}\" \\\n  --task 'Daily' 'My Project' 'MYP-CODE' 'My Client' '^My Client *:: *Daily *$' \\\n  --task 'My Task 1' 'My Project 1' 'MYP1-CODE' 'My Client 1' '^My Client 1 :: *' \\\n  ${@}\n```\n\n... and then run it, for example, like this\n\n```bash\ncalvest.sh --timeframe='last-month'\n```\n\nThe console output may look like below\n\n```text\nCollecting events from 2025-01-01 (inclusive) to 2025-02-01 (exclusive) ...\n\nEvents collected. Events total: 95\n```\n\n[harvest]: https://www.getharvest.com/\n[cargo-install]: https://doc.rust-lang.org/cargo/commands/cargo-install.html\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsskorokhodov%2Fcalvest","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fsskorokhodov%2Fcalvest","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsskorokhodov%2Fcalvest/lists"}