Casfy You can start with drunkard walk. It's a trivial brute force algorithm but it gets you surprisingly decent results. It is your lucky day because I have an implementation that even draws a preview:

extends Node2D
var room_count = 30
var rooms
var doors
func _ready():
generate(room_count)
func add_room(position):
if rooms.has(position):
return 0
rooms.push_back(position)
return 1
func add_door(from, to):
for d in doors:
if (d[0]==from and d[1]==to) or (d[0]==to and d[1]==from):
return
doors.push_back([from, to])
func generate(count):
rooms = [Vector2i(10, 10)]
doors = []
var from = rooms[-1]
while count > 0:
var dir = [Vector2i(-1,0), Vector2i(1,0), Vector2i(0,-1), Vector2i(0,1)].pick_random()
var to = from + dir
count -= add_room(to)
add_door(from, to)
from = to
queue_redraw()
func _draw():
var pad = Vector2i(4, 4)
var size = Vector2i(48, 32)
for r in rooms:
draw_rect(Rect2(r*size + pad, size - pad*2 ), Color.GRAY)
for d in doors:
draw_line(d[0]*size + size/2, d[1]*size + size/2, Color.GRAY, 6)