summaryrefslogtreecommitdiff
path: root/2024/OCaml/Taskfile.yml
blob: 067ecec572ba77bdd8e748487e6f2a93ffa62508 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
# https://taskfile.dev

version: '3'

vars:
  PROJECT_NAME: AoC_2024
  YEAR: 2024
  ASSET_DIR: input
  SRC_DIR: lib
  SRC_TEMPLATE: part.ml
  TEST_DIR: test
  TEST_TEMPLATE: test.ml

dotenv: ['.env']

tasks:
  default:
    desc: "Prints this message"
    cmds:
      - cmd: task --list-all

  day:setup:
    desc: "Creates the files needed to solve a day of Advent of Code"
    requires:
      vars:
        - DAY
    vars:
      FORMATTED_DAY: "{{if (lt (atoi .DAY) 10)}}0{{.DAY}}{{else}}{{.DAY}}{{end}}"
    cmds:
      - cmd: mkdir --parents {{ .SRC_DIR }}/day_{{ .FORMATTED_DAY }}
      - cmd: cp templates/{{.SRC_TEMPLATE}} {{.SRC_DIR}}/day_{{.FORMATTED_DAY}}/part_01.ml
      - cmd: mkdir --parents {{ .TEST_DIR }}
      - cmd: cp templates/{{.TEST_TEMPLATE}} {{.TEST_DIR}}/day_{{.FORMATTED_DAY}}_part_01.ml
      - task: fetch-input
      - task: build
    silent: true

  fetch-input:
    desc: "Fetches your input from adventofcode.com for the specified day"
    internal: true
    requires:
      vars:
        - DAY
    vars:
      URI: https://adventofcode.com/{{ .YEAR }}/day/{{.DAY}}/input
      FORMATTED_DAY: "{{if (lt (atoi .DAY) 10)}}0{{.DAY}}{{else}}{{.DAY}}{{end}}"
    cmds:
      - cmd: curl --cookie 'session={{.SESSION}}' {{.URI}} > {{.ASSET_DIR}}/day_{{.FORMATTED_DAY}}.txt
    silent: true

  build:doc:
    desc: "Builds documentation using ocamldoc"
    preconditions:
      - which ocamldoc
    cmds:
      - cmd: ocamldoc -html -d docs bin/main.ml
    silent: true

  build:
    desc: "Builds the project"
    preconditions:
      - which dune
    cmds:
      - cmd: dune build

  test:
    desc: "Runs the tests in the 'tests' directory"
    ignore_error: true
    env:
      OUNIT_CI: true
    preconditions:
      - which dune
    deps:
      - task: build
    cmds:
      - cmd: dune test {{.CLI_ARGS}}

  test:watch:
    desc: "Continuously runs the tests in the 'tests' directory"
    ignore_error: true
    sources:
      - "lib/**/*.ml"
      - "test/**/*.ml"
    env:
      OUNIT_CI: true
    preconditions:
      - which dune
    deps:
      - task: build
    cmds:
      - cmd: dune test --watch {{.CLI_ARGS}}

  run:
    desc: "Runs the project"
    preconditions:
      - which dune
    deps:
      - task: build
    cmds:
      - cmd: dune exec {{.PROJECT_NAME}}