Skip to content

Commit 776ecbc

Browse files
committed
update Ubuntu and NodeJS bases
Update the Ubuntu Base to 24.04 Noble Numbat Update the NodeJS Base to 22.x Update interaction with rdiff-backup increment list changes since 2.2.10a Update Dockerfile - required for versions >= 1.20.5 (#544) - Required for 1.20.5 Server does not start without it. https://www.minecraft.net/en-us/article/minecraft-java-edition-1-20-5 The game now requires Java 21 Add dockerignore (#540) Co-authored-by: ACertainCoder <[email protected]> "LOG_OFF" can now be translated (#524) * Set "Hide password" as default Changed "Hide password" to "Show password". * Fix Error: Checkbox was enabled on reload Found an error where the checkbox was enabled by default on reload without cache but the password was hidden. Only disabling and enabling the checkbox displayed the password. * "LOG OFF" can now be translated update npm dependencies remove nodejs 18 support (EOL 2025-05-27) tmp: update ci branch use updated action version check runner uid/gid fix gid for new runner image make rdiff-backup increment list consistent Revert "tmp: update ci branch" This reverts commit 30898fe.
1 parent f492bb7 commit 776ecbc

File tree

8 files changed

+3779
-2702
lines changed

8 files changed

+3779
-2702
lines changed

.dockerignore

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
# Logs
2+
logs
3+
*.log
4+
5+
# Runtime data
6+
pids
7+
*.pid
8+
*.seed
9+
10+
# Directory for instrumented libs generated by jscoverage/JSCover
11+
lib-cov
12+
13+
# Coverage directory used by tools like istanbul
14+
coverage
15+
16+
# Grunt intermediate storage (http://gruntjs.com/creating-plugins#storing-task-files)
17+
.grunt
18+
19+
# node-waf configuration
20+
.lock-wscript
21+
22+
# Compiled binary addons (http://nodejs.org/api/addons.html)
23+
build/Release
24+
25+
# Dependency directory
26+
# https://docs.npmjs.com/misc/faq#should-i-check-my-node-modules-folder-into-git
27+
node_modules

.github/workflows/node.js.yml

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -16,13 +16,13 @@ jobs:
1616

1717
strategy:
1818
matrix:
19-
node-version: [12.x, 14.x, 16.x]
19+
node-version: [20.x, 22.x]
2020
# See supported Node.js release schedule at https://nodejs.org/en/about/releases/
2121

2222
steps:
23-
- uses: actions/checkout@v2
23+
- uses: actions/checkout@v4
2424
- name: Use Node.js ${{ matrix.node-version }}
25-
uses: actions/setup-node@v2
25+
uses: actions/setup-node@v4
2626
with:
2727
node-version: ${{ matrix.node-version }}
2828
cache: 'npm'

Dockerfile

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
FROM ubuntu:focal
1+
FROM ubuntu:noble
22
LABEL MAINTAINER='William Dizon <[email protected]>'
33

44
#update and accept all prompts
@@ -12,13 +12,13 @@ RUN apt-get update && apt-get install -y \
1212
curl \
1313
rlwrap \
1414
unzip \
15-
openjdk-17-jre-headless \
15+
openjdk-21-jre-headless \
1616
openjdk-8-jre-headless \
1717
ca-certificates-java \
1818
&& rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/*
1919

2020
#install node from nodesource following instructions: https://github.com/nodesource/distributions#debinstall
21-
RUN curl -fsSL https://deb.nodesource.com/setup_14.x | bash - \
21+
RUN curl -fsSL https://deb.nodesource.com/setup_22.x | bash - \
2222
&& apt-get install -y nodejs \
2323
&& rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/*
2424

Dockerfile.dev

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
FROM ubuntu:focal as build
1+
FROM ubuntu:noble as build
22
LABEL MAINTAINER='William Dizon <[email protected]>'
33

44
#set build directory
@@ -9,7 +9,7 @@ ARG DEBIAN_FRONTEND=noninteractive
99
RUN apt-get update && apt-get install -y \
1010
curl \
1111
build-essential \
12-
&& curl -fsSL https://deb.nodesource.com/setup_14.x | bash - \
12+
&& curl -fsSL https://deb.nodesource.com/setup_22.x | bash - \
1313
&& apt-get install -y nodejs
1414

1515
# copy package.json and npm install
@@ -21,7 +21,7 @@ RUN npm install
2121
COPY . /build
2222

2323
#final image
24-
FROM ubuntu:focal
24+
FROM ubuntu:noble
2525

2626
WORKDIR /usr/games/minecraft
2727

@@ -34,10 +34,11 @@ RUN apt-get update && apt-get install -y \
3434
git \
3535
curl \
3636
rlwrap \
37+
openjdk-21-jre-headless \
3738
openjdk-17-jre-headless \
3839
openjdk-8-jre-headless \
3940
ca-certificates-java \
40-
&& curl -fsSL https://deb.nodesource.com/setup_14.x | bash - \
41+
&& curl -fsSL https://deb.nodesource.com/setup_22.x | bash - \
4142
&& apt-get install -y nodejs \
4243
&& apt-get autoremove -y \
4344
&& apt-get clean \

html/index.html

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -102,7 +102,7 @@
102102
<a ng-click="host_command('refresh_server_list')" class="text pointer"><span class="icon icone-globe"></span> {{ 'REFRESH_SERVER_LIST' | translate }}</a><br>
103103
<a ng-click="host_command('refresh_profile_list', {redownload: true})" class="text pointer"><span class="icon icone-globe"></span> {{ 'REFRESH_PROFILE_LIST' | translate }}</a><br>
104104
<a ng-click="modals.open_locales()" class="text pointer"><span class="icon icone-globe"></span> {{ 'CHANGE_LOCALE' | translate }}</a><br>
105-
<a href="/logout" class="text"><span class="icon icone-off"></span> {{ 'LOGOFF' | translate }}</a>
105+
<a href="/logout" class="text"><span class="icon icone-off"></span> {{ 'LOG_OFF' | translate }}</a>
106106
</footer>
107107
</div>
108108
<!--/ END Dropdown Menu -->

mineos.js

Lines changed: 39 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -429,7 +429,7 @@ mineos.mc = function(server_name, base_dir) {
429429
unzipper.on('error', function (err) {
430430
cb(err);
431431
});
432-
432+
433433
unzipper.on('extract', function (log) {
434434
move_to_parent_dir(self.env.cwd, cb);
435435
});
@@ -506,7 +506,7 @@ mineos.mc = function(server_name, base_dir) {
506506
'xmx': function (cb) {
507507
self.sc(function (err, dict) {
508508
var value = parseInt((dict.java || {}).java_xmx) || 0;
509-
509+
510510
cb((value >= 0 ? null : 'XMX heapsize must be positive integer >= 0'), value);
511511
});
512512
},
@@ -550,7 +550,7 @@ mineos.mc = function(server_name, base_dir) {
550550
args.push('-Xmx{0}M'.format(results.xmx));
551551
if (results.xms > 0)
552552
args.push('-Xms{0}M'.format(results.xms));
553-
553+
554554
if (results.java_tweaks) {
555555
var splits = results.java_tweaks.split(/ /);
556556
for (var i in splits)
@@ -704,7 +704,7 @@ mineos.mc = function(server_name, base_dir) {
704704
self.copy_profile = function(callback) {
705705
function rsync_profile(source, dest, username, groupname, callback_er) {
706706
var rsync = require('rsync');
707-
707+
708708
var obj = rsync.build({
709709
source: source,
710710
destination: dest,
@@ -757,7 +757,7 @@ mineos.mc = function(server_name, base_dir) {
757757
shell:'ssh',
758758
output: [function(output) {
759759
stdout.push(output);
760-
},
760+
},
761761
function(output) {
762762
stderr.push(output);
763763
}]
@@ -781,7 +781,7 @@ mineos.mc = function(server_name, base_dir) {
781781
continue; //known pattern on freebsd: 'sent 79 bytes received 19 bytes 196.00 bytes/sec'
782782
all_files = all_files.concat(incr_file_list[i].toString().split('\n'))
783783
}
784-
784+
785785
cb(null, all_files.filter(function(n){ return n.length }));
786786
}
787787
], callback)
@@ -846,23 +846,23 @@ mineos.mc = function(server_name, base_dir) {
846846
async.apply(self.stuff, 'stop'),
847847
function(cb) {
848848
async.whilst(
849-
function() {
849+
function() {
850850
if (iterations > MAX_ITERATIONS_TO_QUIT)
851851
return false;
852852
else
853-
return (self.server_name in mineos.server_pids_up())
853+
return (self.server_name in mineos.server_pids_up())
854854
},
855-
function(cc) {
855+
function(cc) {
856856
iterations += 1;
857-
setTimeout(cc, test_interval_ms)
857+
setTimeout(cc, test_interval_ms)
858858
},
859859
function(ignored_err) {
860860
if (self.server_name in mineos.server_pids_up())
861861
cb(true); //error, stop did not succeed
862862
else
863863
cb(null); //no error, stop succeeded as expected
864864
}
865-
);
865+
);
866866
}
867867
], callback);
868868
}
@@ -897,7 +897,7 @@ mineos.mc = function(server_name, base_dir) {
897897
iterations += 1;
898898
setTimeout(cb, test_interval_ms);
899899
},
900-
function() {
900+
function() {
901901
if (iterations > MAX_ITERATIONS_TO_QUIT)
902902
return false;
903903
else
@@ -909,7 +909,7 @@ mineos.mc = function(server_name, base_dir) {
909909
else
910910
callback(null); //no error, stop succeeded: true
911911
}
912-
)
912+
)
913913
}
914914
}
915915

@@ -928,7 +928,7 @@ mineos.mc = function(server_name, base_dir) {
928928
})
929929
},
930930
function(cb) {
931-
cb(null, child_process.spawn(binary,
931+
cb(null, child_process.spawn(binary,
932932
['-S', 'mc-{0}'.format(self.server_name),
933933
'-p', '0', '-X', 'eval', 'stuff "{0}\012"'.format(msg)],
934934
params));
@@ -952,7 +952,7 @@ mineos.mc = function(server_name, base_dir) {
952952
})
953953
},
954954
function(cb) {
955-
cb(null, child_process.spawn(binary,
955+
cb(null, child_process.spawn(binary,
956956
['-S', 'mc-{0}'.format(self.server_name),
957957
'-p', '0', '-X', 'eval', 'stuff "save-all\012"'],
958958
params));
@@ -968,7 +968,7 @@ mineos.mc = function(server_name, base_dir) {
968968
var TIMEOUT_LENGTH = 10000;
969969
var tail = require('tail').Tail;
970970

971-
try {
971+
try {
972972
var new_tail = new tail(path.join(self.env.cwd, 'logs/latest.log'));
973973
} catch (e) {
974974
callback(true);
@@ -1099,7 +1099,7 @@ mineos.mc = function(server_name, base_dir) {
10991099
callback(code);
11001100
})
11011101
}
1102-
1102+
11031103
self.list_increments = function(callback) {
11041104
var binary = which.sync('rdiff-backup');
11051105
var args = ['--list-increments', self.env.bwd];
@@ -1155,7 +1155,10 @@ mineos.mc = function(server_name, base_dir) {
11551155

11561156
rdiff.stdout.on('data', function(data) {
11571157
var buffer = Buffer.from(data, 'ascii');
1158-
var lines = buffer.toString('ascii').split('\n');
1158+
1159+
// Since rdiff-backup v2.1.1a0 increments are listed in ascending order instead of descending
1160+
// https://github.com/rdiff-backup/rdiff-backup/blob/v2.1.1a0/CHANGELOG.adoc#11-changes
1161+
var lines = buffer.toString('ascii').split('\n').reverse();
11591162
var incrs = 0;
11601163

11611164
for (var i=0; i < lines.length; i++) {
@@ -1212,11 +1215,11 @@ mineos.mc = function(server_name, base_dir) {
12121215
});
12131216

12141217
callback(err || inner_err, all_info);
1215-
});
1218+
});
12161219
} else {
12171220
callback(err, all_info);
12181221
}
1219-
})
1222+
})
12201223
}
12211224

12221225
self.prune = function(step, callback) {
@@ -1294,12 +1297,12 @@ mineos.mc = function(server_name, base_dir) {
12941297
callback(err, stat_info['gid']);
12951298
})
12961299
break;
1297-
case 'exists':
1300+
case 'exists':
12981301
fs.stat(self.env.sp, function(err, stat_info) {
12991302
callback(null, !!stat_info);
13001303
});
13011304
break;
1302-
case '!exists':
1305+
case '!exists':
13031306
fs.stat(self.env.sp, function(err, stat_info) {
13041307
callback(null, !stat_info);
13051308
});
@@ -1496,14 +1499,14 @@ mineos.mc = function(server_name, base_dir) {
14961499
async.waterfall([
14971500
async.apply(fs.readdir, self.env.cwd),
14981501
function(sf, cb) {
1499-
server_files.push.apply(server_files, sf.filter(function(file) {
1500-
return file.substr(-4).toLowerCase() == '.jar';
1502+
server_files.push.apply(server_files, sf.filter(function(file) {
1503+
return file.substr(-4).toLowerCase() == '.jar';
15011504
}))
1502-
server_files.push.apply(server_files, sf.filter(function(file) {
1503-
return file.substr(-5).toLowerCase() == '.phar';
1505+
server_files.push.apply(server_files, sf.filter(function(file) {
1506+
return file.substr(-5).toLowerCase() == '.phar';
15041507
}))
1505-
server_files.push.apply(server_files, sf.filter(function(file) {
1506-
return file == 'Cuberite';
1508+
server_files.push.apply(server_files, sf.filter(function(file) {
1509+
return file == 'Cuberite';
15071510
}))
15081511
cb();
15091512
},
@@ -1521,10 +1524,10 @@ mineos.mc = function(server_name, base_dir) {
15211524
if (err) {
15221525
cb();
15231526
} else {
1524-
server_files.push.apply(server_files, files.filter(function(file) {
1527+
server_files.push.apply(server_files, files.filter(function(file) {
15251528
return ((file.substr(-4).toLowerCase() == '.jar' && server_files.indexOf(file) < 0)
15261529
|| (file.substr(-5).toLowerCase() == '.phar' && server_files.indexOf(file) < 0)
1527-
|| (file == 'Cuberite' && server_files.indexOf(file) < 0));
1530+
|| (file == 'Cuberite' && server_files.indexOf(file) < 0));
15281531
}))
15291532
cb();
15301533
}
@@ -1573,7 +1576,7 @@ mineos.mc = function(server_name, base_dir) {
15731576
self.sc(function(err,dict){
15741577
java.usedJavaVersion(dict,callback);
15751578
})
1576-
1579+
15771580
break;
15781581
default:
15791582
callback(true, undefined);
@@ -1602,7 +1605,7 @@ mineos.mc = function(server_name, base_dir) {
16021605
buffer[i] = buffer[i+1];
16031606
buffer[i+1] = a;
16041607
}
1605-
return buffer;
1608+
return buffer;
16061609
}
16071610

16081611
function splitBuffer(buf, delimiter) {
@@ -1652,7 +1655,7 @@ mineos.mc = function(server_name, base_dir) {
16521655
'\x00\x6f\x00\x73\x00\x74' +
16531656
'\x00\x00\x63\xdd'
16541657
}
1655-
1658+
16561659
socket.setTimeout(2500);
16571660

16581661
socket.on('connect', function() {
@@ -1688,7 +1691,7 @@ mineos.mc = function(server_name, base_dir) {
16881691
players_max: parseInt(buffer_to_ascii(legacy_split[2]))
16891692
});
16901693
}
1691-
}
1694+
}
16921695
});
16931696

16941697
socket.on('error', function(err) {
@@ -1708,7 +1711,7 @@ mineos.mc = function(server_name, base_dir) {
17081711
return;
17091712
}
17101713
send_query_packet(dict['server-port']);
1711-
})
1714+
})
17121715
}
17131716

17141717
self.query = function(callback) {
@@ -1779,7 +1782,7 @@ mineos.mc = function(server_name, base_dir) {
17791782

17801783
self.previous_property = function(restore_as_of, callback) {
17811784
self.previous_version('server.properties', restore_as_of, function(err, file_contents) {
1782-
1785+
17831786
if (err) {
17841787
callback(err, null)
17851788
} else {

0 commit comments

Comments
 (0)