# https://docs.github.com/en/actions/creating-actions/metadata-syntax-for-github-actions
name: 'List Bake targets'
description: 'Generate a list of Bake targets to help distributing builds in your workflow'

inputs:
  workdir:
    description: Working directory
    default: '.'
    required: false
  files:
    description: Comma separated list of Bake files
    required: false
  target:
    description: Bake target
    required: false

outputs:
  targets:
    description: List of targets
    value: ${{ steps.generate.outputs.targets }}

runs:
  using: composite
  steps:
    -
      name: Generate
      id: generate
      uses: actions/github-script@v7
      env:
        INPUT_WORKDIR: ${{ inputs.workdir }}
        INPUT_FILES: ${{ inputs.files }}
        INPUT_TARGET: ${{ inputs.target }}
      with:
        script: |
          core.warning(`docker/bake-action/subaction/list-targets is deprecated and will be removed in a future release. Please use docker/bake-action/subaction/matrix instead.`);

          function getInputList(name) {
            return core.getInput(name) ? core.getInput(name).split(/[\r?\n,]+/).filter(x => x !== '') : [];
          }

          const workdir = core.getInput('workdir');
          const files = getInputList('files');
          const target = core.getInput('target');

          let def = {};
          await core.group(`Validating definition`, async () => {
            let args = ['buildx', 'bake'];
            for (const file of files) {
              args.push('--file', file);
            }
            if (target) {
              args.push(target);
            }
            args.push('--print');

            const res = await exec.getExecOutput('docker', args, {
              ignoreReturnCode: true,
              silent: true,
              cwd: workdir
            });
            if (res.stderr.length > 0 && res.exitCode != 0) {
              throw new Error(res.stderr);
            }
            def = JSON.parse(res.stdout.trim());
            core.info(JSON.stringify(def, null, 2));
          });

          await core.group(`Set output`, async () => {
            const targets = Object.keys(def.target);
            core.info(`targets: ${JSON.stringify(targets)}`);
            core.setOutput('targets', JSON.stringify(targets));
          });
