summaryrefslogtreecommitdiff
path: root/scripts/assert-content.sh
blob: a55e9b00fbf67e494946198158f05e50cd0ef81e (plain) (blame)
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
#!/usr/bin/env bash
set -Eeuo pipefail

JSON="${1:-}"
[[ -z "${JSON}" ]] && {
  echo 'Missing input JSON file.'
  exit 2
}

contains-element() {
  local e match="$1"
  shift
  for e; do [[ "$e" == "$match" ]] && return 0; done
  return 1
}

fail-attr() {
  ATTRIBUTE="${1}"
  URL="${2}"
  red "Undefined '${ATTRIBUTE}' for ${URL}." >&2
  exit 1
}

LANGS=(en pt)
assert-frontmatter() {
  F="${1}"
  LANG="$(echo "$F" | base64 --decode | jq -r .lang)"
  REF="$(echo "$F"  | base64 --decode | jq -r .ref)"
  URL="$(echo "$F"  | base64 --decode | jq -r .url)"
  [[ -z "${LANG}" ]] && fail-attr 'lang' "${URL}"
  [[ -z "${REF}" ]]  && fail-attr 'ref'  "${URL}"
  set +e
  contains-element "${LANG}" "${LANGS[@]}"
  [[ $? != 0 ]] && {
    red "Invalid lang '${LANG}' in ${URL}." >&2
    exit 1
  }
  set -e
  :
}

echo Linting posts... >&2
for post in $(jq -r '.posts[] | @base64' "${JSON}"); do
  assert-frontmatter "${post}"
done

echo Linting pages... >&2
IGNORED_PAGES=(/site.json /sitemap.xml)
for page in $(jq -r '.pages[] | @base64' "${JSON}"); do
  URL="$(echo "$page"  | base64 --decode | jq -r .url)"
  set +e
  contains-element "${URL}" "${IGNORED_PAGES[@]}"
  if [[ $? != 0 ]]; then
    set -e
    assert-frontmatter "${page}"
  fi
  set -e
done

echo Asserting unique refs... >&2
KNOWN_IDS=()
for page in $(jq -r '.pages[] | @base64' "${JSON}"); do
  URL="$(echo "$page"  | base64 --decode | jq -r .url)"
  set +e
  contains-element "${URL}" "${IGNORED_PAGES[@]}"
  if [[ $? != 0 ]]; then
    set -e
    LANG="$(echo "$page" | base64 --decode | jq -r .lang)"
    REF="$(echo "$page"  | base64 --decode | jq -r .ref)"
    ID="${LANG}:${REF}"

    set +e
    contains-element "${ID}" "${KNOWN_IDS[@]}"
    [[ $? == 0 ]] && {
      red "Duplicated lang:ref match: '${ID}'." >&2
      exit 1
    }
    set -e

    KNOWN_IDS+=("${ID}") # printf '%s\n' "${KNOWN_IDS[@]}"
  fi
  set -e
done

echo Done. >&2