[7e04ef]: / codesys-ide / scripts / build-test.py  Maximize  Restore  History

Download this file

90 lines (73 with data), 2.8 kB

 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
import sys, os
import helper

# disable prompts, as those are enabled in UI mode by default
system.prompt_handling = PromptHandling.None

# compile category GUID
CompileCategory = Guid("{97F48D64-A2A3-4856-B640-75C046E37EA9}")


def createtest(filename):
    destination = filename + ".app"
    devId = None
    devices = device_repository.get_all_devices("CODESYS Control for Linux SL")
    for device in devices:
        devId = device.device_id
    proj = projects.primary

    # check if this is a unit test project
    prg_runtest = proj.find('PRG_RUNTEST')
    if len(prg_runtest) == 0:
        proj.close()
        print("warning: no POU PRG_RUNTEST found. Will not create a test application.")
        return None

    # delete existing testdev device
    existing = proj.find('testdev')
    if len(existing) > 0:
        existing[0].remove()
 
    # add device
    proj.add('testdev', devId)
    apps = proj.find('Application', True)
    if len(apps) > 0:
        app = apps[0]
        tc = app.create_task_configuration()

    # add task to call PRG_RUNTEST
    task = tc.create_task('Task')
    task.pous.add('PRG_RUNTEST')

    helper.install_missing_libraries(proj, librarymanager)
    #    proj.save()
    print("create bootapp '%s'" % destination)
    try:
        proj.active_application.create_boot_application(os.path.basename(destination))
    except:
        print("Error: Creation of bootapplication failed")
        # Get message objects which contain all the data
        severities = {
            Severity.FatalError : "Fatal error", Severity.Error : "Error",
            Severity.Warning : "Warning", Severity.Information : "Information",
            Severity.Text : "Text"
        }
        msgs = system.get_message_objects(CompileCategory, Severity.FatalError|Severity.Error)
        xError = False
        for msg in msgs:
            sev = severities[msg.severity]
            if msg.severity == Severity.FatalError:
                xError = True
            print("%s %s%s: %s" % (sev, msg.prefix, msg.number, msg.text))
        if not xError:
            return None
    proj.close()
    return destination


class SearchBuildDo(helper.SearchBuild):
    # Test rules for:
    # - *.library
    def doit(self, filename):
        artifacts = list()
        helper.install_requirements(filename, librarymanager)

        if filename.endswith(".library"):
            print("\n\n*** Create test application for: %s" % filename)
            proj = projects.open(filename)
            artifact = createtest(filename)
            if artifact != None:
                artifacts.append(artifact)

        return artifacts

scriptpath = os.path.abspath(os.path.dirname(sys.argv[0]))

sb = SearchBuildDo()
sb.search(".library", ".")
sb.save(".", ".drone-artifacts")