about summary refs log tree commit diff
path: root/.github/workflows/test-chart.yml
blob: 4d7a278877e29d5d9e1b2ffe2e299711c273745b (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
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
# This is a GitHub workflow defining a set of jobs with a set of steps.
# ref: https://docs.github.com/en/actions/using-workflows/workflow-syntax-for-github-actions
#
name: Test chart

on:
  pull_request:
    paths:
      - 'chart/**'
      - '!**.md'
      - '.github/workflows/test-chart.yml'
  push:
    paths:
      - 'chart/**'
      - '!**.md'
      - '.github/workflows/test-chart.yml'
    branches-ignore:
      - 'dependabot/**'
  workflow_dispatch:

permissions:
  contents: read

defaults:
  run:
    working-directory: chart

jobs:
  lint-templates:
    runs-on: ubuntu-22.04

    steps:
      - uses: actions/checkout@v3
      - uses: actions/setup-python@v4
        with:
          python-version: '3.x'

      - name: Install dependencies (yamllint)
        run: pip install yamllint

      - run: helm dependency update

      - name: helm lint
        run: |
          helm lint . \
              --values dev-values.yaml

      - name: helm template
        run: |
          helm template . \
              --values dev-values.yaml \
              --output-dir rendered-templates

      - name: yamllint (only on templates we manage)
        run: |
          rm -rf rendered-templates/mastodon/charts

          yamllint rendered-templates \
            --config-data "{rules: {indentation: {spaces: 2}, line-length: disable}}"

  # This job helps us validate that rendered templates are valid k8s resources
  # against a k8s api-server, via "helm template --validate", but also that a
  # basic configuration can be used to successfully startup mastodon.
  #
  test-install:
    runs-on: ubuntu-22.04
    timeout-minutes: 15

    strategy:
      fail-fast: false
      matrix:
        include:
          # k3s-channel reference: https://update.k3s.io/v1-release/channels
          - k3s-channel: latest
          - k3s-channel: stable

          # This represents the oldest configuration we test against.
          #
          # The k8s version chosen is based on the oldest still supported k8s
          # version among two managed k8s services, GKE, EKS.
          # - GKE: https://endoflife.date/google-kubernetes-engine
          # - EKS: https://endoflife.date/amazon-eks
          #
          # The helm client's version can influence what helper functions is
          # available for use in the templates, currently we need v3.6.0 or
          # higher.
          #
          - k3s-channel: v1.21
            helm-version: v3.6.0

    steps:
      - uses: actions/checkout@v3

      # This action starts a k8s cluster with NetworkPolicy enforcement and
      # installs both kubectl and helm.
      #
      # ref: https://github.com/jupyterhub/action-k3s-helm#readme
      #
      - uses: jupyterhub/action-k3s-helm@v3
        with:
          k3s-channel: ${{ matrix.k3s-channel }}
          helm-version: ${{ matrix.helm-version }}
          metrics-enabled: false
          traefik-enabled: false
          docker-enabled: false

      - run: helm dependency update

      # Validate rendered helm templates against the k8s api-server
      - name: helm template --validate
        run: |
          helm template --validate mastodon . \
              --values dev-values.yaml

      - name: helm install
        run: |
          helm install mastodon . \
              --values dev-values.yaml \
              --timeout 10m

      # This actions provides a report about the state of the k8s cluster,
      # providing logs etc on anything that has failed and workloads marked as
      # important.
      #
      # ref: https://github.com/jupyterhub/action-k8s-namespace-report#readme
      #
      - name: Kubernetes namespace report
        uses: jupyterhub/action-k8s-namespace-report@v1
        if: always()
        with:
          important-workloads: >-
            deploy/mastodon-sidekiq
            deploy/mastodon-streaming
            deploy/mastodon-web
            job/mastodon-assets-precompile
            job/mastodon-chewy-upgrade
            job/mastodon-create-admin
            job/mastodon-db-migrate