-
Notifications
You must be signed in to change notification settings - Fork 3
/
action.yml
140 lines (138 loc) · 6.79 KB
/
action.yml
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
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
name: 'Run tests in Renode'
description: 'This action runs selected robot test suites in Renode and generates artifacts'
author: 'Antmicro'
branding:
color: 'blue'
icon: 'play-circle'
inputs:
renode-revision:
description: 'Renode git revision (can be a branch name, tag, commit sha, etc)'
required: true
default: 'master'
renode-repository:
description: 'Renode git repository'
required: true
default: 'https://github.com/renode/renode'
tests-to-run:
description: 'Robot framework test paths'
required: false
renode-arguments:
description: 'Additional arguments passed to renode-test'
required: false
default: ''
artifacts-path:
description: 'Path where renode-test artifacts should be stored'
required: false
default: '.'
gather-execution-metrics:
description: 'Gather execution metrics for executed binaries'
required: false
default: 'no'
runs:
using: "composite"
steps:
- id: get-renode-rev
run: |
git clone "${{ inputs.renode-repository }}" renode
git -C renode checkout "${{ inputs.renode-revision }}" --
rev="$(git -C renode rev-parse @)"
# Increment to force cache invalidation.
action_hash_key=0
echo "renode-rev=$rev" >> "$GITHUB_OUTPUT"
echo "action-hash-key=$action_hash_key" >> "$GITHUB_OUTPUT"
mv renode "renode-$rev-cloned"
shell: bash
working-directory: ${{ runner.temp }}
# Avoid the download/build steps if Renode is already installed. We can't just put all of the build steps
# into a nested composite action as it wouldn't be available when using this action from another repository.
# See https://github.com/orgs/community/discussions/66094
if: ${{ env.RENODE_ROOT == '' }}
- uses: actions/cache/restore@v4
id: restore-cache
with:
path: ${{ runner.temp }}/renode-${{ steps.get-renode-rev.outputs.renode-rev }}
key: renode-${{ runner.os }}-${{ runner.arch }}-${{ steps.get-renode-rev.outputs.renode-rev }}-${{ steps.get-renode-rev.outputs.action-hash-key }}
if: ${{ env.RENODE_ROOT == '' }}
# Remove the just-cloned source if a cached build was found
- run: |
rm -rf renode-${{ steps.get-renode-rev.outputs.renode-rev }}-cloned
shell: bash
working-directory: ${{ runner.temp }}
if: ${{ env.RENODE_ROOT == '' && steps.restore-cache.outputs.cache-hit == 'true' }}
- run: |
mv renode-${{ steps.get-renode-rev.outputs.renode-rev }}-cloned renode-${{ steps.get-renode-rev.outputs.renode-rev }}
cd renode-${{ steps.get-renode-rev.outputs.renode-rev }}
echo Building "${{ inputs.renode-repository }}" at "${{ inputs.renode-revision }} (${{ steps.get-renode-rev.outputs.renode-rev }})"
git submodule update --init --recursive --depth=1
shell: bash
working-directory: ${{ runner.temp }}
if: ${{ env.RENODE_ROOT == '' && steps.restore-cache.outputs.cache-hit != 'true' }}
- name: Install dependencies (Linux)
run: |
sudo apt-get -qqy update
sudo apt-get -y install --no-install-recommends mono-complete policykit-1 libgtk2.0-dev uml-utilities gtk-sharp2
shell: bash
if: ${{ env.RENODE_ROOT == '' && runner.os == 'Linux' }}
- name: Build Renode (Mono)
run: |
./build.sh
# delete some unneeded dirs to slim down the cache entry
find . -name .git -exec rm -rf '{}' '+'
find lib src '(' -name bin -or -name obj ')' -exec rm -rf '{}' '+'
shell: bash
working-directory: ${{ runner.temp }}/renode-${{ steps.get-renode-rev.outputs.renode-rev }}
if: ${{ env.RENODE_ROOT == '' && runner.os != 'Windows' && steps.restore-cache.outputs.cache-hit != 'true' }}
# For Windows, build and extract a package to generate the wrapper batch scripts
- name: Build Renode (.NET Framework)
run: |
cd renode-${{ steps.get-renode-rev.outputs.renode-rev }}
curl https://repo.msys2.org/msys/x86_64/zip-3.0-3-x86_64.pkg.tar.xz | tar xOJ usr/bin/zip.exe > zip.exe
msbuild="$(vswhere -latest -requires Microsoft.Component.MSBuild -find 'MSBuild\**\Bin\MSBuild.exe' | tr '\\' '/')"
export PATH="$PATH:$(cygpath "$(dirname "$msbuild")"):$PWD"
export MSYS=winsymlinks:nativestrict
./build.sh -p
mv output/packages/*.zip ../renode.zip
cd ..
rm -rf renode-*
unzip renode.zip
rm renode.zip
mv renode* renode-${{ steps.get-renode-rev.outputs.renode-rev }}
# Create a bash wrapper script so that renode-test can be run from both bash and cmd
cat $GITHUB_ACTION_PATH/src/renode_test_override.sh > renode-${{ steps.get-renode-rev.outputs.renode-rev }}/bin/renode-test
shell: bash
working-directory: ${{ runner.temp }}
if: ${{ env.RENODE_ROOT == '' && runner.os == 'Windows' && steps.restore-cache.outputs.cache-hit != 'true' }}
- uses: actions/cache/save@v4
with:
path: ${{ runner.temp }}/renode-${{ steps.get-renode-rev.outputs.renode-rev }}
key: renode-${{ runner.os }}-${{ runner.arch }}-${{ steps.get-renode-rev.outputs.renode-rev }}-${{ steps.get-renode-rev.outputs.action-hash-key }}
if: ${{ env.RENODE_ROOT == '' && steps.restore-cache.outputs.cache-hit != 'true' }}
- name: Install Robot framework dependencies
run: python3 -m pip install -r tests/requirements.txt
shell: bash
working-directory: ${{ runner.temp }}/renode-${{ steps.get-renode-rev.outputs.renode-rev }}
if: ${{ env.RENODE_ROOT == '' }}
- name: Install Robot framework dependencies under py on Windows
run: py -3 -m pip install -r tests/requirements.txt
shell: bash
working-directory: ${{ runner.temp }}/renode-${{ steps.get-renode-rev.outputs.renode-rev }}
if: ${{ env.RENODE_ROOT == '' && runner.os == 'Windows' }}
- name: Setup environment (Linux/macOS)
run: |
echo "${{ runner.temp }}/renode-${{ steps.get-renode-rev.outputs.renode-rev }}" >> "$GITHUB_PATH"
echo "RENODE_ROOT=${{ runner.temp }}/renode-${{ steps.get-renode-rev.outputs.renode-rev }}" >> "$GITHUB_ENV"
shell: bash
if: ${{ env.RENODE_ROOT == '' && runner.os != 'Windows' }}
- name: Setup environment (Windows)
run: |
echo "${{ runner.temp }}/renode-${{ steps.get-renode-rev.outputs.renode-rev }}/bin" >> "$GITHUB_PATH"
echo "RENODE_ROOT=${{ runner.temp }}/renode-${{ steps.get-renode-rev.outputs.renode-rev }}" >> "$GITHUB_ENV"
shell: bash
if: ${{ env.RENODE_ROOT == '' && runner.os == 'Windows' }}
- run: $GITHUB_ACTION_PATH/src/run_renode_test.sh
shell: bash
env:
TESTS_TO_RUN: ${{ inputs.tests-to-run }}
RENODE_ARGUMENTS: ${{ inputs.renode-arguments }}
ARTIFACTS_PATH: ${{ inputs.artifacts-path }}
EXECUTION_METRICS: ${{ inputs.gather-execution-metrics }}