Skip to content
This repository was archived by the owner on Jun 26, 2025. It is now read-only.

Commit 46dbd03

Browse files
committed
use tofu
1 parent c899cf6 commit 46dbd03

File tree

8 files changed

+74
-848
lines changed

8 files changed

+74
-848
lines changed

.github/workflows/deploy.yaml

Lines changed: 10 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,10 @@ name: Deploy to Server
1212
jobs:
1313
deploy:
1414
runs-on: ubuntu-latest
15+
env:
16+
TF_VAR_remote_user: ${{ secrets.SERVER_USER }}
17+
TF_VAR_ssh_url: ${{ secrets.SERVER_USER }}@${{ secrets.SERVER_IP }}
18+
TF_VAR_remote_directory: /opt/progsoc/progcomp2025/competition
1519
steps:
1620
- name: Checkout repository
1721
uses: actions/checkout@v4
@@ -24,26 +28,10 @@ jobs:
2428
oauth-secret: ${{ secrets.TS_OAUTH_SECRET }}
2529
use-cache: 'true'
2630

27-
- name: Set up Python
28-
uses: actions/setup-python@v5
29-
with:
30-
python-version: '3.12'
31-
cache: 'pip'
32-
33-
- name: Install dependencies
34-
run: |
35-
python -m pip install --upgrade pip
36-
pip install -r deploy/requirements.txt
37-
38-
- name: Add Server IP to Ansible hosts
39-
run: |
40-
echo "[progcomp2025]" >> deploy/ansible_hosts
41-
echo "${{ secrets.SERVER_IP }}" >> deploy/ansible_hosts
42-
- name: Run Ansible playbook
31+
- uses: opentofu/setup-opentofu@v1
32+
33+
- name: Apply OpenTofu configuration
4334
run: |
44-
ansible-playbook deploy/ansible-deploy.yaml \
45-
--inventory deploy/ansible_hosts \
46-
--extra-vars "ansible_user=${{ secrets.SERVER_USER }}"
47-
env:
48-
ANSIBLE_HOST_KEY_CHECKING: false
49-
ANSIBLE_CONFIG: deploy/ansible.cfg
35+
cd deploy
36+
tofu init
37+
tofu apply --auto-approve

deploy/.terraform.lock.hcl

Lines changed: 17 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

deploy/ansible-deploy.yaml

Lines changed: 0 additions & 61 deletions
This file was deleted.

deploy/ansible.cfg

Lines changed: 0 additions & 712 deletions
This file was deleted.

deploy/deploy.tf

Lines changed: 40 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,19 @@
1+
variable "remote_user" {
2+
type = string
3+
description = "The remote user to connect to the server."
4+
}
5+
6+
variable "ssh_url" {
7+
type = string
8+
description = "The SSH URL to connect to the remote server."
9+
}
10+
11+
variable "remote_directory" {
12+
type = string
13+
description = "The remote directory where the competition files will be copied."
14+
default = "/opt/progsoc/progcomp2025/competition"
15+
}
16+
117
terraform {
218
required_providers {
319
docker = {
@@ -8,12 +24,12 @@ terraform {
824
}
925

1026
provider "docker" {
11-
host = "ssh://sebas@speed"
27+
host = "ssh://${var.ssh_url}"
1228
ssh_opts = ["-o", "StrictHostKeyChecking=no", "-o", "UserKnownHostsFile=/dev/null"]
1329
}
1430

1531
data "docker_registry_image" "fuzzjudge" {
16-
name = "ghcr.io/progsoc/fuzzjudge:latest"
32+
name = "ghcr.io/progsoc/fuzzjudge:runtimes-latest"
1733
}
1834

1935

@@ -22,52 +38,38 @@ resource "docker_image" "fuzzjudge" {
2238
pull_triggers = [data.docker_registry_image.fuzzjudge.sha256_digest]
2339
}
2440

25-
resource "terraform_data" "remote_docker_build" {
26-
depends_on = [ docker_image.fuzzjudge ]
41+
data "external" "competition_files_hash" {
42+
program = ["bash","${path.module}/hash.sh"]
43+
query = {
44+
# command ignoring all .db and rust target directories
45+
hash = ""
46+
}
47+
}
48+
49+
resource "terraform_data" "copy_competition_files" {
2750
connection {
2851
type = "ssh"
2952
user = "sebas"
3053
host = "speed"
3154
}
3255

3356
provisioner "remote-exec" {
57+
// Make sure the directory exists
3458
inline = [
35-
"mkdir -p /opt/services/progcomp2025",
36-
"chmod 755 /opt/services/progcomp2025",
37-
"chown sebas:sebas /opt/services/progcomp2025"
38-
]
39-
40-
}
41-
42-
provisioner "file" {
43-
source = "../Dockerfile"
44-
destination = "/opt/services/progcomp2025/Dockerfile"
45-
}
46-
47-
provisioner "remote-exec" {
48-
inline = [
49-
"chmod 644 /opt/services/progcomp2025/competition",
50-
"cd /opt/services/progcomp2025",
51-
"docker build -t progcomp2025:latest ."
59+
"mkdir -p ${var.remote_directory}",
60+
"chown -R ${var.remote_user}:${var.remote_user} ${var.remote_directory}",
61+
"find ${var.remote_directory} -type d -exec chmod 755 {} \\;",
62+
"find ${var.remote_directory} -type f -exec chmod 644 {} \\;"
5263
]
5364
}
54-
}
55-
56-
resource "docker_image" "progcomp" {
57-
depends_on = [ terraform_data.remote_docker_build ]
58-
name = "progcomp2025:latest"
59-
}
6065

61-
resource "terraform_data" "copy_competition_files" {
62-
connection {
63-
type = "ssh"
64-
user = "sebas"
65-
host = "speed"
66+
// remote exec rsync
67+
provisioner "local-exec" {
68+
command = "rsync -avz --delete --exclude='*.db' --exclude='target' ../competition/ ${var.ssh_url}:${var.remote_directory}"
6669
}
6770

68-
provisioner "file" {
69-
source = "../competition/"
70-
destination = "/opt/services/progcomp2025/competition"
71+
triggers_replace = {
72+
file_hash = data.external.competition_files_hash.result
7173
}
7274
}
7375

@@ -78,21 +80,20 @@ variable "progcomp_env" {
7880
]
7981
}
8082

81-
8283
resource "docker_container" "progcomp" {
84+
depends_on = [ terraform_data.copy_competition_files ]
8385
name = "progcomp2025"
84-
image = docker_image.progcomp.image_id
86+
image = docker_image.fuzzjudge.image_id
8587
ports {
8688
internal = 1989
8789
external = 2025
8890
}
8991
volumes {
90-
host_path = "/opt/services/progcomp2025/competition"
92+
host_path = var.remote_directory
9193
container_path = "/app/competition"
9294
}
9395

9496
env = var.progcomp_env
9597
restart = "always"
96-
9798
}
9899

deploy/hash.sh

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
#!/bin/bash
2+
3+
# find ../competition -type f ! -name '*.db' ! -path '*/target/*' -exec sha256sum {} + | sha256sum | awk '{print $1}'
4+
5+
jq -n --arg hash "$(find ../competition -type f ! -name '*.db' ! -path '*/target/*' -exec sha256sum {} + | sha256sum | awk '{print $1}')" \
6+
'{hash: $hash}'

deploy/requirements.txt

Lines changed: 0 additions & 10 deletions
This file was deleted.

docker-compose.yaml

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,6 @@
11
services:
22
fuzzjudge:
3-
build:
4-
context: .
5-
pull: true
6-
dockerfile: Dockerfile
3+
image: ghcr.io/progsoc/fuzzjudge:runtimes-latest
74
container_name: fuzzjudge
85
pull_policy: always
96
restart: unless-stopped

0 commit comments

Comments
 (0)