forked from browningluke/terraform-provider-opnsense
-
Notifications
You must be signed in to change notification settings - Fork 0
142 lines (135 loc) · 4.67 KB
/
terraform-test.yml
File metadata and controls
142 lines (135 loc) · 4.67 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
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
141
142
name: Run terraform tests
on:
push:
branches:
- main
paths-ignore:
- 'docs/**'
- 'examples/**'
- 'scripts/**'
- 'templates/**'
- 'README.md'
- '.github/**'
pull_request:
branches:
- main
paths-ignore:
- 'docs/**'
- 'examples/**'
- 'scripts/**'
- 'templates/**'
- 'README.md'
- '.github/**'
permissions:
contents: read
env:
OPNSENSE_VERSION: "25.7"
OPNSENSE_URL: "https://files.bsd.ac/opnsense-qemu/opnsense-25.7.qcow2"
OPNSENSE_SHA1: edba9015951e68438fb6b0c0e1de21383bfaa399
OPNSENSE_SSH_PORT: 8022
OPNSENSE_WEB_PORT: 8443
TERRAFORM_PLUGIN_URI: "registry.terraform.io/browningluke/opnsense"
jobs:
build:
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
- name: Set up Go
uses: actions/setup-go@44694675825211faa026b3c33043df3e48a5fa00 # v6.0.0
with:
go-version-file: go.mod
- name: Build provider
run: |
go build -o terraform-provider-opnsense
- name: Upload artifact
uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2
with:
name: terraform-provider-opnsense
path: terraform-provider-opnsense
opnsense-image:
runs-on: ubuntu-latest
steps:
- name: Create opnsense image directory
run: |
mkdir -p opnsense-images
- name: Download OPNsense image
run: |
curl -L "$OPNSENSE_URL" -o opnsense-images/opnsense.qcow2
- name: Verify OPNsense image
run: |
echo "$OPNSENSE_SHA1 opnsense-images/opnsense.qcow2" | sha1sum -c -
- name: Upload artifact
uses: actions/upload-artifact@v4
with:
name: opnsense-image
path: opnsense-images
test:
runs-on: ubuntu-latest
needs:
- build
- opnsense-image
steps:
- name: Checkout code
uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
- name: Install terraform
uses: hashicorp/setup-terraform@b9cd54a3c349d3f38e8881555d616ced269862dd # v3.1.2
- name: Download OPNsense image
uses: actions/download-artifact@634f93cb2916e3fdff6788551b99b062d0335ce0 # v5.0.0
with:
name: opnsense-image
- name: Move OPNsense image
run: |
mkdir -p opnsense-images
mv opnsense.qcow2 opnsense-images/
- name: Verify OPNsense image
run: |
echo "$OPNSENSE_SHA1 opnsense-images/opnsense.qcow2" | sha1sum -c -
- name: Disable triggers
run: |
mkdir -p /etc/dpkg/dpkg.cfg.d
sudo tee /etc/dpkg/dpkg.cfg.d/01_nodoc > /dev/null << 'EOF'
path-exclude /usr/share/doc/*
path-exclude /usr/share/man/*
path-exclude /usr/share/info/*
EOF
- name: Install qemu
run: |
sudo apt-get update
sudo apt-get install -y qemu-system-x86
- name: Start opnsense VM
id: start-vm
run: |
qemu-system-x86_64 -m 6144 -smp 2 -hda opnsense-images/opnsense.qcow2 \
-netdev user,id=user.0,hostfwd=tcp::${{ env.OPNSENSE_SSH_PORT }}-:22,hostfwd=tcp::${{ env.OPNSENSE_WEB_PORT }}-:443 \
-device virtio-net,netdev=user.0 \
-chardev socket,path=/tmp/qemu-isa-serial.sock,server=on,wait=off,id=qga0 \
-device isa-serial,chardev=qga0 \
-device virtio-serial \
-chardev socket,path=/tmp/qemu-virtconsole.sock,server=on,wait=off,id=qvt0 \
-device virtconsole,chardev=qvt0 \
-chardev socket,path=/tmp/qemu-virtserialport.sock,server=on,wait=off,id=qvsp0 \
-device virtserialport,chardev=qvsp0,name=org.qemu.guest_agent.0 \
-nographic &
QEMU_PID="$!"
echo "qemu-pid=${QEMU_PID}" >> "$GITHUB_OUTPUT"
sleep 180 # Wait for the VM to boot
[ -d "/proc/${QEMU_PID}" ] || (echo "QEMU process not found" && exit 1)
- name: Create API key
id: apikey
run: |
python3 scripts/create-apikey.py 2> "$GITHUB_OUTPUT"
- name: Setup env vars for tests
run: |
{
echo "OPNSENSE_API_KEY=${{ steps.apikey.outputs.key }}";
echo "OPNSENSE_API_SECRET=${{ steps.apikey.outputs.secret }}";
echo "OPNSENSE_URI=https://localhost:${{ env.OPNSENSE_WEB_PORT }}";
echo "OPNSENSE_ALLOW_INSECURE=true";
} >> "$GITHUB_ENV"
- name: Run terraform tests
run: |
env TF_ACC=1 go test -v -p 1 ./...
- name: Stop opnsense VM
run: |
kill -9 ${{ steps.start-vm.outputs.qemu-pid }}