local node_runtime(version, arch) = {
  arch: arch,
  containers: [
    {
      image: 'node:' + version,
    },
  ],
};

local task_build(version, arch) = {
  name: 'build - node ' + version + ' ' + arch,
  runtime: node_runtime(version, arch),
  environment: {},
  steps: [
    { type: 'clone' },
    { type: 'restore_cache', keys: ['cache-node' + version + '-sum-{{ md5sum "package.json" }}', 'cache-node' + version + '-date-'], dest_dir: './node_modules' },
    { type: 'run', command: 'npm install' },
    { type: 'run', command: 'npm run build' },
    { type: 'save_cache', key: 'cache-node' + version + '-sum-{{ md5sum "package.json" }}', contents: [{ source_dir: './node_modules' }] },
    { type: 'save_cache', key: 'cache-node' + version + '-date-{{ year }}-{{ month }}-{{ day }}', contents: [{ source_dir: './node_modules' }] },
  ],
};

{
  runs: [
    {
      name: 'agola web build/test',
      tasks: std.flattenArrays([
        [
          task_build(version, arch),
        ]
        for version in ['11', '12']
        for arch in ['amd64']
      ]) + [
        {
          name: 'checkout code and save to workspace',
          runtime: {
            arch: 'amd64',
            containers: [
              {
                image: 'alpine/git',
              },
            ],
          },
          steps: [
            { type: 'clone' },
            { type: 'save_to_workspace', contents: [{ source_dir: '.', dest_dir: '.', paths: ['**'] }] },
          ],
          depends: [],
        },
        {
          name: 'test build docker image',
          runtime: {
            arch: 'amd64',
            containers: [
              {
                image: 'gcr.io/kaniko-project/executor:debug',
              },
            ],
          },
          shell: '/busybox/sh',
          working_dir: '/workspace',
          steps: [
            { type: 'restore_workspace', dest_dir: '.' },
            { type: 'run', command: '/kaniko/executor --no-push' },
          ],
          depends: ['checkout code and save to workspace'],
        },
        {
          name: 'build and push docker image',
          runtime: {
            arch: 'amd64',
            containers: [
              {
                image: 'gcr.io/kaniko-project/executor:debug',
              },
            ],
          },
          environment: {
            DOCKERAUTH: { from_variable: 'harbor-auth' },
            DOCKERURL: { from_variable: 'harbor-url' },
          },
          shell: '/busybox/sh',
          working_dir: '/workspace',
          steps: [
            { type: 'restore_workspace', dest_dir: '.' },
            {
              type: 'run',
              name: 'generate docker auth',
              command: |||
                cat << EOF > /kaniko/.docker/config.json
                {
                  "auths": {
                    "$DOCKERURL": { "auth" : "$DOCKERAUTH" }
                  }
                }
                EOF
              |||,
            },
            { type: 'run', command: '/kaniko/executor --destination harbor.tuxpa.in/tux/agola-web:$AGOLA_GIT_TAG' },
          ],
          depends: ['checkout code and save to workspace'],
          when: {
            tag: '#v.*#',
          },
        },
      ],
    },
  ],
}