export async function main()

in src/main.ts [17:94]


export async function main() {
    let usrAgentRepo = crypto.createHash('sha256').update(`${process.env.GITHUB_REPOSITORY}`).digest('hex');
    let actionName = 'AzureCLIAction';
    let userAgentString = (!!prefix ? `${prefix}+` : '') + `GITHUBACTIONS/${actionName}@v2_${usrAgentRepo}_${process.env.RUNNER_ENVIRONMENT}_${process.env.GITHUB_RUN_ID}`;
    process.env.AZURE_HTTP_USER_AGENT = userAgentString;

    var scriptFileName: string = '';
    const CONTAINER_NAME = `MICROSOFT_AZURE_CLI_${getCurrentTime()}_CONTAINER`;
    try {
        if (process.env.RUNNER_OS != 'Linux') {
            throw new Error('Please use Linux-based OS as a runner.');
        }

        let inlineScript: string = core.getInput('inlineScript', { required: true });
        let azcliversion: string = core.getInput('azcliversion', { required: false }).trim().toLowerCase();

        if (azcliversion == AZ_CLI_VERSION_DEFAULT_VALUE) {
            try {
                const { stdout } = await cpExec('az version');
                azcliversion = JSON.parse(stdout)["azure-cli"]
            } catch (err) {
                console.log('Failed to fetch az cli version from agent. Reverting back to latest.')
                azcliversion = 'latest'
            }
        }

        if (!(await checkIfValidCLIVersion(azcliversion))) {
            core.error('Please enter a valid azure cli version. \nSee available versions: https://github.com/Azure/azure-cli/releases');
            throw new Error('Please enter a valid azure cli version. \nSee available versions: https://github.com/Azure/azure-cli/releases')
        }

        if (!inlineScript.trim()) {
            core.error('Please enter a valid script.');
            throw new Error('Please enter a valid script.')
        }
        inlineScript = ` set -e >&2; echo '${START_SCRIPT_EXECUTION_MARKER}' >&2; ${inlineScript}`;
        scriptFileName = await createScriptFile(inlineScript);

        const hostAzureConfigDir = process.env.AZURE_CONFIG_DIR || path.join(process.env.HOME, '.azure');
        const containerAzureConfigDir = '/root/.azure';
        
        /*
        For the docker run command, we are doing the following
        - Set the working directory for docker continer
        - volume mount the GITHUB_WORKSPACE env variable (path where users checkout code is present) to work directory of container
        - volume mount Azure config directory between host and container,
        - volume mount temp directory between host and container, inline script file is created in temp directory
        */
        let args: string[] = ["run", "--workdir", `${process.env.GITHUB_WORKSPACE}`,
            "-v", `${process.env.GITHUB_WORKSPACE}:${process.env.GITHUB_WORKSPACE}`,
            "-v", `${hostAzureConfigDir}:${containerAzureConfigDir}`,
            "-v", `${TEMP_DIRECTORY}:${TEMP_DIRECTORY}`
        ];
        for (let key in process.env) {
            if (!checkIfEnvironmentVariableIsOmitted(key) && process.env[key]) {
                args.push("-e", `${key}=${process.env[key]}`);
            }
        }
        args.push("--name", CONTAINER_NAME,
            `mcr.microsoft.com/azure-cli:${azcliversion}`,
            "bash", "--noprofile", "--norc", "-e", `${TEMP_DIRECTORY}/${scriptFileName}`);

        console.log(`${START_SCRIPT_EXECUTION_MARKER}${azcliversion}`);
        await executeDockerCommand(args);
        console.log("az script ran successfully.");
    }
    catch (error) {
        core.error(error);
        throw error;
    }
    finally {
        // clean up
        const scriptFilePath: string = path.join(TEMP_DIRECTORY, scriptFileName);
        await deleteFile(scriptFilePath);
        console.log("cleaning up container...");
        await executeDockerCommand(["rm", "--force", CONTAINER_NAME], true);
    }
};