torc 0.21.0

Workflow management system
using Torc
import Torc: APIClient

const TORC_SERVICE_URL = "http://localhost:8529/_db/test-workflows/torc-service"

function create_workflow(api)
    return send_api_command(
        api,
        APIClient.add_workflow,
        APIClient.WorkflowModel(
            user = get_user(),
            name="manual_job_dependencies",
            description="Demo creation of a workflow with job dependencies specified manually.",
        ),
    )
end

function build_workflow(api, workflow)
    small = send_api_command(
        api,
        APIClient.add_resource_requirements,
        workflow._key,
        APIClient.ResourceRequirementsModel(
            name="small",
            num_cpus=1,
            memory="1g",
            runtime="P0DT1H",
        ),
    )
    medium = send_api_command(
        api,
        APIClient.add_resource_requirements,
        workflow._key,
        APIClient.ResourceRequirementsModel(
            name="small", num_cpus=1, memory="1g", runtime="P0DT45M"
        )
    )
    send_api_command(
        api,
        APIClient.add_slurm_scheduler,
        workflow._key,
        APIClient.SlurmSchedulerModel(
            name="short",
            account="my_account",
            nodes=1,
            walltime="04:00:00",
        ),
    )

    blocking_jobs = []
    for i in 1:3
        job = send_api_command(
            api,
            APIClient.add_job,
            workflow._key,
            APIClient.JobModel(
                name="job$(i)",
                command="echo hello",
                resource_requirements=medium._id,
               )
            )
        push!(blocking_jobs, job._id)
    end

    send_api_command(
        api,
        APIClient.add_job,
        workflow._key,
        APIClient.JobModel(
            name="postprocess",
            command="echo hello",
            resource_requirements=small._id,
            depends_on = blocking_jobs,
       ))

    @info "Created workflow $workflow"
    return
end

function main()
    api = make_api(TORC_SERVICE_URL)
    workflow = create_workflow(api)
    try
        build_workflow(api, workflow)
    catch e
        APIClient.remove_workflow(api, workflow._key)
        rethrow()
    end
end

if abspath(PROGRAM_FILE) == @__FILE__
    main()
end