mirror of
https://github.com/alexbelgium/hassio-addons.git
synced 2026-05-31 04:44:05 +02:00
Convert addons to non-legacy (#36)
This commit is contained in:
@@ -4,20 +4,23 @@
|
|||||||
"main": "src/index.ts",
|
"main": "src/index.ts",
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"start": "ts-node src/index.ts"
|
"start": "cross-env-shell ts-node src/index.ts"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
|
"@types/cross-spawn": "^6.0.1",
|
||||||
"@types/fs-extra-promise": "^1.0.8",
|
"@types/fs-extra-promise": "^1.0.8",
|
||||||
"@types/node": "^12.0.4",
|
"@types/node": "^12.0.4",
|
||||||
"@types/request-promise": "^4.1.44",
|
"@types/request-promise": "^4.1.44",
|
||||||
"@types/semver": "^6.0.0",
|
"@types/semver": "^6.0.0",
|
||||||
"@types/yargs": "^13.0.0",
|
"@types/yargs": "^13.0.0",
|
||||||
|
"cross-env": "^7.0.0",
|
||||||
"ts-node": "^8.2.0",
|
"ts-node": "^8.2.0",
|
||||||
"typescript": "^3.5.1"
|
"typescript": "^3.5.1"
|
||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@types/chalk": "^2.2.0",
|
"@types/chalk": "^2.2.0",
|
||||||
"chalk": "^2.4.2",
|
"chalk": "^2.4.2",
|
||||||
|
"cross-spawn": "^7.0.1",
|
||||||
"fs-extra-promise": "^1.0.1",
|
"fs-extra-promise": "^1.0.1",
|
||||||
"request": "^2.88.0",
|
"request": "^2.88.0",
|
||||||
"request-promise": "^4.2.4",
|
"request-promise": "^4.2.4",
|
||||||
|
|||||||
47
.maintenance/src/commands/build.ts
Normal file
47
.maintenance/src/commands/build.ts
Normal file
@@ -0,0 +1,47 @@
|
|||||||
|
import * as path from "path";
|
||||||
|
import * as spawn from "cross-spawn";
|
||||||
|
import { Manager } from "../manager";
|
||||||
|
|
||||||
|
export async function build(manager: Manager, opts: any)
|
||||||
|
{
|
||||||
|
const addon = opts.addon;
|
||||||
|
const config = await manager.getAddonConfig(addon);
|
||||||
|
|
||||||
|
if (!opts.arch)
|
||||||
|
{
|
||||||
|
opts.arch = config.arch.map(x => `--${x}`);
|
||||||
|
}
|
||||||
|
else if(!Array.isArray(opts.arch))
|
||||||
|
{
|
||||||
|
opts.arch = [opts.arch];
|
||||||
|
}
|
||||||
|
|
||||||
|
let args = [
|
||||||
|
"run",
|
||||||
|
"--rm",
|
||||||
|
"--privileged",
|
||||||
|
"-v",
|
||||||
|
"//var/run/docker.sock:/var/run/docker.sock:rw",
|
||||||
|
"-v",
|
||||||
|
`${path.resolve(manager.rootDir)}:/data:ro`,
|
||||||
|
"--name",
|
||||||
|
"ha-builder",
|
||||||
|
"homeassistant/amd64-builder:latest",
|
||||||
|
"--addon",
|
||||||
|
...opts.arch,
|
||||||
|
"--test",
|
||||||
|
"-t",
|
||||||
|
`/data/${addon}`
|
||||||
|
];
|
||||||
|
|
||||||
|
if (!opts.nocheck)
|
||||||
|
{
|
||||||
|
args = args.concat([
|
||||||
|
"--docker-hub",
|
||||||
|
"petersendev",
|
||||||
|
"--docker-hub-check"
|
||||||
|
]);
|
||||||
|
}
|
||||||
|
|
||||||
|
const result = spawn.sync("docker", args, { stdio: 'inherit' });
|
||||||
|
}
|
||||||
89
.maintenance/src/commands/run.ts
Normal file
89
.maintenance/src/commands/run.ts
Normal file
@@ -0,0 +1,89 @@
|
|||||||
|
import * as fs from "fs-extra-promise";
|
||||||
|
import * as path from "path";
|
||||||
|
import { Manager } from "../manager";
|
||||||
|
import { build } from "./build";
|
||||||
|
import * as spawn from "cross-spawn";
|
||||||
|
import { ChildProcess } from "child_process";
|
||||||
|
|
||||||
|
export async function run(manager: Manager, opts: any)
|
||||||
|
{
|
||||||
|
const addon = opts.addon;
|
||||||
|
|
||||||
|
const addonPath = manager.getAddonPath(addon);
|
||||||
|
const addonTmpPath = manager.getAddonTmpPath(addon);
|
||||||
|
|
||||||
|
if (!await fs.existsAsync(addonPath))
|
||||||
|
{
|
||||||
|
console.error(`addon ${addon} not found`);
|
||||||
|
process.exit(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
const config = await manager.getAddonConfig(addon);
|
||||||
|
|
||||||
|
const shareTmpPath = path.join(addonTmpPath, "share");
|
||||||
|
const configTmpPath = path.join(addonTmpPath, "config");
|
||||||
|
const dataTmpPath = path.join(addonTmpPath, "data");
|
||||||
|
const optionsFilePath = path.join(dataTmpPath, "options.json");
|
||||||
|
|
||||||
|
if (opts.clean)
|
||||||
|
{
|
||||||
|
await fs.removeAsync(addonTmpPath);
|
||||||
|
}
|
||||||
|
|
||||||
|
await fs.ensureDirAsync(shareTmpPath);
|
||||||
|
await fs.ensureDirAsync(configTmpPath);
|
||||||
|
await fs.ensureDirAsync(dataTmpPath);
|
||||||
|
|
||||||
|
if (!await fs.existsAsync(optionsFilePath))
|
||||||
|
{
|
||||||
|
await fs.writeJSONAsync(optionsFilePath, config.options);
|
||||||
|
}
|
||||||
|
|
||||||
|
const ports = [];
|
||||||
|
for (let p in config.ports)
|
||||||
|
{
|
||||||
|
ports.push(config.ports[p]);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!opts.nobuild)
|
||||||
|
{
|
||||||
|
console.log("building image(s)");
|
||||||
|
await build(manager, { addon, nocheck: true, arch: "--amd64" });
|
||||||
|
}
|
||||||
|
|
||||||
|
let args =
|
||||||
|
[
|
||||||
|
"run",
|
||||||
|
"--rm",
|
||||||
|
"-v",
|
||||||
|
`${path.resolve(shareTmpPath)}:/share`,
|
||||||
|
"-v",
|
||||||
|
`${path.resolve(configTmpPath)}:/config`,
|
||||||
|
"-v",
|
||||||
|
`${path.resolve(dataTmpPath)}:/data`,
|
||||||
|
...[].concat(...ports.map(x => ["-p", `${x}:${x}`])),
|
||||||
|
"--name",
|
||||||
|
addon,
|
||||||
|
`petersendev/hassio-${addon}-amd64:latest`
|
||||||
|
];
|
||||||
|
|
||||||
|
let child: ChildProcess;
|
||||||
|
|
||||||
|
function exit(signal: string)
|
||||||
|
{
|
||||||
|
if (child)
|
||||||
|
{
|
||||||
|
console.log(`killing process (${signal})`);
|
||||||
|
child.kill(signal);
|
||||||
|
}
|
||||||
|
|
||||||
|
console.log("stopping container for reuse");
|
||||||
|
spawn.sync("docker", ["stop", addon], { stdio: 'inherit' });
|
||||||
|
console.log("exiting");
|
||||||
|
process.exit(0);
|
||||||
|
}
|
||||||
|
|
||||||
|
process.on('SIGINT', exit);
|
||||||
|
|
||||||
|
child = spawn("docker", args, { stdio: 'inherit' });
|
||||||
|
}
|
||||||
155
.maintenance/src/commands/update.ts
Normal file
155
.maintenance/src/commands/update.ts
Normal file
@@ -0,0 +1,155 @@
|
|||||||
|
import * as fs from "fs-extra-promise";
|
||||||
|
import * as path from "path";
|
||||||
|
import * as request from "request-promise";
|
||||||
|
import chalk from "chalk";
|
||||||
|
import * as semver from "semver";
|
||||||
|
import { Manager } from "../manager";
|
||||||
|
|
||||||
|
export async function update(manager: Manager, opts: { patch: boolean })
|
||||||
|
{
|
||||||
|
let first = true;
|
||||||
|
let updated = false;
|
||||||
|
for (const addon of await manager.getAddonDirs())
|
||||||
|
{
|
||||||
|
if (!first)
|
||||||
|
{
|
||||||
|
console.log(chalk.gray("============================================================="));
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
first = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
const configPath = manager.getConfigPath(addon);
|
||||||
|
const buildJsonPath = manager.getBuildJsonPath(addon);
|
||||||
|
|
||||||
|
const config = await fs.readJSONAsync(configPath);
|
||||||
|
let version = semver.valid(config.version);
|
||||||
|
if (!version)
|
||||||
|
{
|
||||||
|
console.log(chalk.redBright(`version format for addon ${chalk.blue(addon)} not supported: ${config.version}`));
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
console.log(`loaded ${chalk.blue(addon)} ${chalk.cyanBright(version)}`);
|
||||||
|
|
||||||
|
if (!config.maintenance || !config.maintenance.github_release)
|
||||||
|
{
|
||||||
|
console.log(chalk.yellow("no valid maintenance section found, skipping"));
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
const versionRegex = config.maintenance.version_regex ? new RegExp(config.maintenance.version_regex) : null;
|
||||||
|
const releaseRegex = config.maintenance.release_regex ? new RegExp(config.maintenance.release_regex) : null;
|
||||||
|
|
||||||
|
const addonPath = manager.getAddonPath(addon);
|
||||||
|
const dockerFilePath = path.join(addonPath, "Dockerfile");
|
||||||
|
|
||||||
|
let image: string;
|
||||||
|
let tag: string;
|
||||||
|
let dockerFile: string;
|
||||||
|
|
||||||
|
const build_json = (await fs.existsAsync(buildJsonPath)) ? await fs.readJSONAsync(buildJsonPath) : null;
|
||||||
|
|
||||||
|
if (!build_json)
|
||||||
|
{
|
||||||
|
dockerFile = (await fs.readFileAsync(dockerFilePath)).toString();
|
||||||
|
const dockerBaseImageLine = dockerFile.split("\n")[0];
|
||||||
|
const parts = dockerBaseImageLine.split(":");
|
||||||
|
image = parts[0].replace("FROM ", "");
|
||||||
|
tag = parts[1];
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
image = build_json.build_from_template.image;
|
||||||
|
tag = build_json.build_from_template.version;
|
||||||
|
}
|
||||||
|
|
||||||
|
const releaseInfo = await request({
|
||||||
|
uri: `${config.maintenance.github_release}/releases/latest`,
|
||||||
|
json: true
|
||||||
|
});
|
||||||
|
|
||||||
|
let coloredTag = tag;
|
||||||
|
let appVersion = "";
|
||||||
|
if (versionRegex)
|
||||||
|
{
|
||||||
|
const r = versionRegex.exec(tag);
|
||||||
|
if (r && r.length > 1)
|
||||||
|
{
|
||||||
|
appVersion = r[1];
|
||||||
|
coloredTag = tag.replace(appVersion, chalk.yellowBright(appVersion));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (releaseRegex)
|
||||||
|
{
|
||||||
|
const r = releaseRegex.exec(releaseInfo.tag_name);
|
||||||
|
if (r && r.length > 1)
|
||||||
|
{
|
||||||
|
releaseInfo.tag_name = r[1];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (tag == releaseInfo.tag_name)
|
||||||
|
{
|
||||||
|
//TODO: different output for build.json usage
|
||||||
|
console.log(chalk.greenBright(`base image ${image}:${chalk.magenta(coloredTag)} is up-to-date`))
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
let newAppVersion = "";
|
||||||
|
let newColoredTag = releaseInfo.tag_name;
|
||||||
|
if (versionRegex)
|
||||||
|
{
|
||||||
|
const nr = versionRegex.exec(releaseInfo.tag_name);
|
||||||
|
if (nr && nr.length > 1)
|
||||||
|
{
|
||||||
|
newAppVersion = nr[1];
|
||||||
|
newColoredTag = newColoredTag.replace(newAppVersion, chalk.yellowBright(newAppVersion));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
let minorUpgrade = appVersion && newAppVersion && appVersion != newAppVersion;
|
||||||
|
|
||||||
|
if (!opts.patch && !minorUpgrade)
|
||||||
|
{
|
||||||
|
console.log(chalk.gray(`ignoring patch for ${image}:${chalk.magenta(coloredTag)} to ${image}:${chalk.magenta(newColoredTag)}`))
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if (!build_json)
|
||||||
|
{
|
||||||
|
console.log(chalk.yellowBright(`updating base image from ${image}:${chalk.magenta(coloredTag)} to ${image}:${chalk.magenta(newColoredTag)}`));
|
||||||
|
await fs.writeFileAsync(dockerFilePath, dockerFile.replace(`${image}:${tag}`, `${image}:${releaseInfo.tag_name}`));
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
console.log(chalk.yellowBright(`updating base images in build.json from ${image}:{arch}-${chalk.magenta(coloredTag)} to ${image}:{arch}-${chalk.magenta(newColoredTag)}`));
|
||||||
|
build_json.build_from_template.version = releaseInfo.tag_name;
|
||||||
|
for (let arch in build_json.build_from)
|
||||||
|
{
|
||||||
|
build_json.build_from[arch] = build_json.build_from[arch].replace(tag, releaseInfo.tag_name);
|
||||||
|
}
|
||||||
|
await fs.writeJSONAsync(buildJsonPath, build_json, { spaces: 4 });
|
||||||
|
}
|
||||||
|
|
||||||
|
const newVersion = semver.inc(version, minorUpgrade ? "minor" : "patch");
|
||||||
|
console.log(chalk.yellow(`bumping version from ${chalk.cyanBright(version)} to ${chalk.cyanBright(newVersion)}`));
|
||||||
|
config.version = newVersion;
|
||||||
|
await fs.writeJSONAsync(configPath, config);
|
||||||
|
|
||||||
|
// await manager.appendChangelog(addon, `## ${newVersion}\n\n - ${minorUpgrade ?
|
||||||
|
// `Update ${config.name} to ${newAppVersion} (${image}:${releaseInfo.tag_name})` :
|
||||||
|
// `Update base image to ${image}:${releaseInfo.tag_name}`}`);
|
||||||
|
|
||||||
|
await manager.appendChangelog(addon, newVersion, minorUpgrade ?
|
||||||
|
`Update ${config.name} to ${newAppVersion} (${image}:${releaseInfo.tag_name})` :
|
||||||
|
`Update base image to ${image}:${releaseInfo.tag_name}`);
|
||||||
|
|
||||||
|
|
||||||
|
updated = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
@@ -1,183 +1,39 @@
|
|||||||
import * as fs from "fs-extra-promise";
|
|
||||||
import * as path from "path";
|
|
||||||
import * as request from "request-promise";
|
|
||||||
import chalk from "chalk";
|
|
||||||
import * as semver from "semver";
|
|
||||||
import * as yargs from "yargs";
|
import * as yargs from "yargs";
|
||||||
|
import { Manager } from "./manager";
|
||||||
|
import { update } from "./commands/update";
|
||||||
|
import { run } from "./commands/run";
|
||||||
|
import { build } from "./commands/build";
|
||||||
|
|
||||||
|
const manager = new Manager();
|
||||||
|
|
||||||
const argv = yargs
|
const argv = yargs
|
||||||
.option("patch", {
|
.command(["update", "$0"], "performs addon updates", (args) =>
|
||||||
alias: "p",
|
{
|
||||||
default: false
|
return args
|
||||||
|
.option("patch", {
|
||||||
|
alias: "p",
|
||||||
|
default: false,
|
||||||
|
boolean: true
|
||||||
|
});
|
||||||
|
}, (opts) =>
|
||||||
|
{
|
||||||
|
update(manager, opts);
|
||||||
})
|
})
|
||||||
|
.command("run <addon>", "runs an addon", (argv) =>
|
||||||
|
argv
|
||||||
|
.option("clean", { alias: "c", default: false, boolean: true })
|
||||||
|
.option("nobuild", { alias: "n", default: false, boolean: true }),
|
||||||
|
(opts) =>
|
||||||
|
{
|
||||||
|
run(manager, opts);
|
||||||
|
})
|
||||||
|
.command("build <addon>", "builds an addon", (argv) =>
|
||||||
|
argv
|
||||||
|
.option("nocheck", { alias: "n", default: false, boolean: true }),
|
||||||
|
(opts) =>
|
||||||
|
{
|
||||||
|
build(manager, opts);
|
||||||
|
})
|
||||||
.argv;
|
.argv;
|
||||||
|
|
||||||
async function run(opts: { patch: boolean })
|
|
||||||
{
|
|
||||||
const root = "..";
|
|
||||||
|
|
||||||
let dirs = await fs.readdirAsync(root);
|
|
||||||
dirs = dirs.filter((source) => !source.startsWith(".") && (fs.lstatSync(path.join(root, source))).isDirectory());
|
|
||||||
|
|
||||||
let first = true;
|
|
||||||
let updated = false;
|
|
||||||
for (const addon of dirs)
|
|
||||||
{
|
|
||||||
if (addon === "tmp")
|
|
||||||
{
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!first)
|
|
||||||
{
|
|
||||||
console.log(chalk.gray("============================================================="));
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
first = false;
|
|
||||||
}
|
|
||||||
|
|
||||||
const configPath = path.join(root, addon, "config.json");
|
|
||||||
const buildJsonPath = path.join(root, addon, "build.json");
|
|
||||||
const config = await fs.readJSONAsync(configPath);
|
|
||||||
let version = semver.valid(config.version);
|
|
||||||
if (!version)
|
|
||||||
{
|
|
||||||
console.log(chalk.redBright(`version format for addon ${chalk.blue(addon)} not supported: ${config.version}`));
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
console.log(`loaded ${chalk.blue(addon)} ${chalk.cyanBright(version)}`);
|
|
||||||
|
|
||||||
if (!config.maintenance || !config.maintenance.github_release)
|
|
||||||
{
|
|
||||||
console.log(chalk.yellow("no valid maintenance section found, skipping"));
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
const versionRegex = config.maintenance.version_regex ? new RegExp(config.maintenance.version_regex) : null;
|
|
||||||
const releaseRegex = config.maintenance.release_regex ? new RegExp(config.maintenance.release_regex) : null;
|
|
||||||
|
|
||||||
const addonPath = path.join(root, addon);
|
|
||||||
const changelogPath = path.join(addonPath, "CHANGELOG.md");
|
|
||||||
const dockerFilePath = path.join(addonPath, "Dockerfile");
|
|
||||||
|
|
||||||
let image: string;
|
|
||||||
let tag: string;
|
|
||||||
let dockerFile: string;
|
|
||||||
|
|
||||||
const build_json = (await fs.existsAsync(buildJsonPath)) ? await fs.readJSONAsync(buildJsonPath) : null;
|
|
||||||
|
|
||||||
if (!build_json)
|
|
||||||
{
|
|
||||||
dockerFile = (await fs.readFileAsync(dockerFilePath)).toString();
|
|
||||||
const dockerBaseImageLine = dockerFile.split("\n")[0];
|
|
||||||
const parts = dockerBaseImageLine.split(":");
|
|
||||||
image = parts[0].replace("FROM ", "");
|
|
||||||
tag = parts[1];
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
image = build_json.build_from_template.image;
|
|
||||||
tag = build_json.build_from_template.version;
|
|
||||||
}
|
|
||||||
|
|
||||||
const releaseInfo = await request({
|
|
||||||
uri: `${config.maintenance.github_release}/releases/latest`,
|
|
||||||
json: true
|
|
||||||
});
|
|
||||||
|
|
||||||
let coloredTag = tag;
|
|
||||||
let appVersion = "";
|
|
||||||
if (versionRegex)
|
|
||||||
{
|
|
||||||
const r = versionRegex.exec(tag);
|
|
||||||
if (r && r.length > 1)
|
|
||||||
{
|
|
||||||
appVersion = r[1];
|
|
||||||
coloredTag = tag.replace(appVersion, chalk.yellowBright(appVersion));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (releaseRegex)
|
|
||||||
{
|
|
||||||
const r = releaseRegex.exec(releaseInfo.tag_name);
|
|
||||||
if (r && r.length > 1)
|
|
||||||
{
|
|
||||||
releaseInfo.tag_name = r[1];
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (tag == releaseInfo.tag_name)
|
|
||||||
{
|
|
||||||
//TODO: different output for build.json usage
|
|
||||||
console.log(chalk.greenBright(`base image ${image}:${chalk.magenta(coloredTag)} is up-to-date`))
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
let newAppVersion = "";
|
|
||||||
let newColoredTag = releaseInfo.tag_name;
|
|
||||||
if (versionRegex)
|
|
||||||
{
|
|
||||||
const nr = versionRegex.exec(releaseInfo.tag_name);
|
|
||||||
if (nr && nr.length > 1)
|
|
||||||
{
|
|
||||||
newAppVersion = nr[1];
|
|
||||||
newColoredTag = newColoredTag.replace(newAppVersion, chalk.yellowBright(newAppVersion));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
let minorUpgrade = appVersion && newAppVersion && appVersion != newAppVersion;
|
|
||||||
|
|
||||||
if (!opts.patch && !minorUpgrade)
|
|
||||||
{
|
|
||||||
console.log(chalk.gray(`ignoring patch for ${image}:${chalk.magenta(coloredTag)} to ${image}:${chalk.magenta(newColoredTag)}`))
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
if (!build_json)
|
|
||||||
{
|
|
||||||
console.log(chalk.yellowBright(`updating base image from ${image}:${chalk.magenta(coloredTag)} to ${image}:${chalk.magenta(newColoredTag)}`));
|
|
||||||
await fs.writeFileAsync(dockerFilePath, dockerFile.replace(`${image}:${tag}`, `${image}:${releaseInfo.tag_name}`));
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
console.log(chalk.yellowBright(`updating base images in build.json from ${image}:{arch}-${chalk.magenta(coloredTag)} to ${image}:{arch}-${chalk.magenta(newColoredTag)}`));
|
|
||||||
build_json.build_from_template.version = releaseInfo.tag_name;
|
|
||||||
for (let arch in build_json.build_from)
|
|
||||||
{
|
|
||||||
build_json.build_from[arch] = build_json.build_from[arch].replace(tag, releaseInfo.tag_name);
|
|
||||||
}
|
|
||||||
await fs.writeJSONAsync(buildJsonPath, build_json, { spaces: 4 });
|
|
||||||
}
|
|
||||||
|
|
||||||
const newVersion = semver.inc(version, minorUpgrade ? "minor" : "patch");
|
|
||||||
console.log(chalk.yellow(`bumping version from ${chalk.cyanBright(version)} to ${chalk.cyanBright(newVersion)}`));
|
|
||||||
config.version = newVersion;
|
|
||||||
await fs.writeJSONAsync(configPath, config);
|
|
||||||
|
|
||||||
let oldChangelog = "";
|
|
||||||
if (await fs.existsAsync(changelogPath))
|
|
||||||
{
|
|
||||||
oldChangelog = (await fs.readFileAsync(changelogPath)).toString();
|
|
||||||
}
|
|
||||||
|
|
||||||
let changelog = `## ${newVersion}\n\n - ${minorUpgrade ?
|
|
||||||
`Update ${config.name} to ${newAppVersion} (${image}:${releaseInfo.tag_name})` :
|
|
||||||
`Update base image to ${image}:${releaseInfo.tag_name}`}`;
|
|
||||||
|
|
||||||
if (oldChangelog)
|
|
||||||
{
|
|
||||||
changelog += `\n\n${oldChangelog}`;
|
|
||||||
}
|
|
||||||
|
|
||||||
await fs.writeFileAsync(changelogPath, changelog);
|
|
||||||
|
|
||||||
updated = true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
run(argv);
|
|
||||||
75
.maintenance/src/manager.ts
Normal file
75
.maintenance/src/manager.ts
Normal file
@@ -0,0 +1,75 @@
|
|||||||
|
import * as fs from "fs-extra-promise";
|
||||||
|
import * as path from "path";
|
||||||
|
|
||||||
|
export class Manager
|
||||||
|
{
|
||||||
|
public rootDir = "..";
|
||||||
|
public tmpDir = "tmp";
|
||||||
|
|
||||||
|
async getAddonDirs()
|
||||||
|
{
|
||||||
|
let dirs = await fs.readdirAsync(this.rootDir);
|
||||||
|
|
||||||
|
return dirs.filter((source) => !source.startsWith(".") && source != this.tmpDir && (fs.lstatSync(path.join(this.rootDir, source))).isDirectory());
|
||||||
|
}
|
||||||
|
|
||||||
|
getAddonPath(addon: string)
|
||||||
|
{
|
||||||
|
return path.join(this.rootDir, addon);
|
||||||
|
}
|
||||||
|
|
||||||
|
async getAddonConfig(addon:string)
|
||||||
|
{
|
||||||
|
return await fs.readJSONAsync(this.getConfigPath(addon));
|
||||||
|
}
|
||||||
|
|
||||||
|
getAddonTmpPath(addon: string)
|
||||||
|
{
|
||||||
|
return path.join(this.rootDir, this.tmpDir, addon);
|
||||||
|
}
|
||||||
|
|
||||||
|
getConfigPath(addon: string)
|
||||||
|
{
|
||||||
|
return path.join(this.getAddonPath(addon), "config.json");
|
||||||
|
}
|
||||||
|
|
||||||
|
getBuildJsonPath(addon: string)
|
||||||
|
{
|
||||||
|
return path.join(this.getAddonPath(addon), "build.json");
|
||||||
|
}
|
||||||
|
|
||||||
|
getChangelogPath(addon: string)
|
||||||
|
{
|
||||||
|
return path.join(this.getAddonPath(addon), "CHANGELOG.md");
|
||||||
|
}
|
||||||
|
|
||||||
|
async appendChangelog(addon: string, version: string, content: string | string[])
|
||||||
|
{
|
||||||
|
if (!Array.isArray(content))
|
||||||
|
{
|
||||||
|
content = [content];
|
||||||
|
}
|
||||||
|
|
||||||
|
const changelogPath = this.getChangelogPath(addon);
|
||||||
|
|
||||||
|
let oldChangelog = "";
|
||||||
|
|
||||||
|
if (await fs.existsAsync(changelogPath))
|
||||||
|
{
|
||||||
|
oldChangelog = (await fs.readFileAsync(changelogPath)).toString();
|
||||||
|
}
|
||||||
|
|
||||||
|
let changelog = `## ${version}\n\n`;
|
||||||
|
content.forEach(line =>
|
||||||
|
{
|
||||||
|
changelog += ` - ${line}\n`;
|
||||||
|
});
|
||||||
|
|
||||||
|
if (oldChangelog)
|
||||||
|
{
|
||||||
|
changelog += `\n${oldChangelog}`;
|
||||||
|
}
|
||||||
|
|
||||||
|
await fs.writeFileAsync(changelogPath, changelog);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -16,6 +16,12 @@
|
|||||||
dependencies:
|
dependencies:
|
||||||
chalk "*"
|
chalk "*"
|
||||||
|
|
||||||
|
"@types/cross-spawn@^6.0.1":
|
||||||
|
version "6.0.1"
|
||||||
|
resolved "https://registry.yarnpkg.com/@types/cross-spawn/-/cross-spawn-6.0.1.tgz#60fa0c87046347c17d9735e5289e72b804ca9b63"
|
||||||
|
dependencies:
|
||||||
|
"@types/node" "*"
|
||||||
|
|
||||||
"@types/form-data@*":
|
"@types/form-data@*":
|
||||||
version "2.2.1"
|
version "2.2.1"
|
||||||
resolved "https://registry.yarnpkg.com/@types/form-data/-/form-data-2.2.1.tgz#ee2b3b8eaa11c0938289953606b745b738c54b1e"
|
resolved "https://registry.yarnpkg.com/@types/form-data/-/form-data-2.2.1.tgz#ee2b3b8eaa11c0938289953606b745b738c54b1e"
|
||||||
@@ -177,6 +183,12 @@ core-util-is@1.0.2:
|
|||||||
version "1.0.2"
|
version "1.0.2"
|
||||||
resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7"
|
resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7"
|
||||||
|
|
||||||
|
cross-env@^7.0.0:
|
||||||
|
version "7.0.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/cross-env/-/cross-env-7.0.0.tgz#5a3b2ddce51ec713ea58f2fb79ce22e65b4f5479"
|
||||||
|
dependencies:
|
||||||
|
cross-spawn "^7.0.1"
|
||||||
|
|
||||||
cross-spawn@^6.0.0:
|
cross-spawn@^6.0.0:
|
||||||
version "6.0.5"
|
version "6.0.5"
|
||||||
resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-6.0.5.tgz#4a5ec7c64dfae22c3a14124dbacdee846d80cbc4"
|
resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-6.0.5.tgz#4a5ec7c64dfae22c3a14124dbacdee846d80cbc4"
|
||||||
@@ -187,6 +199,14 @@ cross-spawn@^6.0.0:
|
|||||||
shebang-command "^1.2.0"
|
shebang-command "^1.2.0"
|
||||||
which "^1.2.9"
|
which "^1.2.9"
|
||||||
|
|
||||||
|
cross-spawn@^7.0.1:
|
||||||
|
version "7.0.1"
|
||||||
|
resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.1.tgz#0ab56286e0f7c24e153d04cc2aa027e43a9a5d14"
|
||||||
|
dependencies:
|
||||||
|
path-key "^3.1.0"
|
||||||
|
shebang-command "^2.0.0"
|
||||||
|
which "^2.0.1"
|
||||||
|
|
||||||
dashdash@^1.12.0:
|
dashdash@^1.12.0:
|
||||||
version "1.14.1"
|
version "1.14.1"
|
||||||
resolved "https://registry.yarnpkg.com/dashdash/-/dashdash-1.14.1.tgz#853cfa0f7cbe2fed5de20326b8dd581035f6e2f0"
|
resolved "https://registry.yarnpkg.com/dashdash/-/dashdash-1.14.1.tgz#853cfa0f7cbe2fed5de20326b8dd581035f6e2f0"
|
||||||
@@ -501,6 +521,10 @@ path-key@^2.0.0, path-key@^2.0.1:
|
|||||||
version "2.0.1"
|
version "2.0.1"
|
||||||
resolved "https://registry.yarnpkg.com/path-key/-/path-key-2.0.1.tgz#411cadb574c5a140d3a4b1910d40d80cc9f40b40"
|
resolved "https://registry.yarnpkg.com/path-key/-/path-key-2.0.1.tgz#411cadb574c5a140d3a4b1910d40d80cc9f40b40"
|
||||||
|
|
||||||
|
path-key@^3.1.0:
|
||||||
|
version "3.1.1"
|
||||||
|
resolved "https://registry.yarnpkg.com/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375"
|
||||||
|
|
||||||
performance-now@^2.1.0:
|
performance-now@^2.1.0:
|
||||||
version "2.1.0"
|
version "2.1.0"
|
||||||
resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-2.1.0.tgz#6309f4e0e5fa913ec1c69307ae364b4b377c9e7b"
|
resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-2.1.0.tgz#6309f4e0e5fa913ec1c69307ae364b4b377c9e7b"
|
||||||
@@ -602,10 +626,20 @@ shebang-command@^1.2.0:
|
|||||||
dependencies:
|
dependencies:
|
||||||
shebang-regex "^1.0.0"
|
shebang-regex "^1.0.0"
|
||||||
|
|
||||||
|
shebang-command@^2.0.0:
|
||||||
|
version "2.0.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-2.0.0.tgz#ccd0af4f8835fbdc265b82461aaf0c36663f34ea"
|
||||||
|
dependencies:
|
||||||
|
shebang-regex "^3.0.0"
|
||||||
|
|
||||||
shebang-regex@^1.0.0:
|
shebang-regex@^1.0.0:
|
||||||
version "1.0.0"
|
version "1.0.0"
|
||||||
resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-1.0.0.tgz#da42f49740c0b42db2ca9728571cb190c98efea3"
|
resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-1.0.0.tgz#da42f49740c0b42db2ca9728571cb190c98efea3"
|
||||||
|
|
||||||
|
shebang-regex@^3.0.0:
|
||||||
|
version "3.0.0"
|
||||||
|
resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172"
|
||||||
|
|
||||||
signal-exit@^3.0.0:
|
signal-exit@^3.0.0:
|
||||||
version "3.0.2"
|
version "3.0.2"
|
||||||
resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.2.tgz#b5fdc08f1287ea1178628e415e25132b73646c6d"
|
resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.2.tgz#b5fdc08f1287ea1178628e415e25132b73646c6d"
|
||||||
@@ -729,6 +763,12 @@ which@^1.2.9:
|
|||||||
dependencies:
|
dependencies:
|
||||||
isexe "^2.0.0"
|
isexe "^2.0.0"
|
||||||
|
|
||||||
|
which@^2.0.1:
|
||||||
|
version "2.0.2"
|
||||||
|
resolved "https://registry.yarnpkg.com/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1"
|
||||||
|
dependencies:
|
||||||
|
isexe "^2.0.0"
|
||||||
|
|
||||||
wrap-ansi@^5.1.0:
|
wrap-ansi@^5.1.0:
|
||||||
version "5.1.0"
|
version "5.1.0"
|
||||||
resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-5.1.0.tgz#1fd1f67235d5b6d0fee781056001bfb694c03b09"
|
resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-5.1.0.tgz#1fd1f67235d5b6d0fee781056001bfb694c03b09"
|
||||||
|
|||||||
@@ -1,3 +1,8 @@
|
|||||||
|
## 0.2.0
|
||||||
|
|
||||||
|
- not a legacy addon anymore
|
||||||
|
- Update base image to linuxserver/emby:4.3.1.0-ls31
|
||||||
|
|
||||||
## 0.1.0
|
## 0.1.0
|
||||||
|
|
||||||
- emby to 4.3.1.0 (linuxserver/emby:4.3.1.0-ls26)
|
- emby to 4.3.1.0 (linuxserver/emby:4.3.1.0-ls26)
|
||||||
@@ -2,11 +2,31 @@ ARG BUILD_FROM
|
|||||||
# hadolint ignore=DL3006
|
# hadolint ignore=DL3006
|
||||||
FROM $BUILD_FROM
|
FROM $BUILD_FROM
|
||||||
|
|
||||||
|
# Set shell
|
||||||
|
SHELL ["/bin/bash", "-o", "pipefail", "-c"]
|
||||||
|
|
||||||
|
RUN apt-get update \
|
||||||
|
\
|
||||||
|
&& apt-get install -y --no-install-recommends \
|
||||||
|
jq=1.5+dfsg-2 \
|
||||||
|
\
|
||||||
|
&& curl -J -L -o /tmp/bashio.tar.gz \
|
||||||
|
"https://github.com/hassio-addons/bashio/archive/v0.7.1.tar.gz" \
|
||||||
|
&& mkdir /tmp/bashio \
|
||||||
|
&& tar zxvf \
|
||||||
|
/tmp/bashio.tar.gz \
|
||||||
|
--strip 1 -C /tmp/bashio \
|
||||||
|
\
|
||||||
|
&& mv /tmp/bashio/lib /usr/lib/bashio \
|
||||||
|
&& ln -s /usr/lib/bashio/bashio /usr/bin/bashio \
|
||||||
|
&& rm -fr \
|
||||||
|
/tmp/* \
|
||||||
|
/var/{cache,log}/* \
|
||||||
|
/var/lib/apt/lists/*
|
||||||
|
|
||||||
RUN sed -i "s|/config|/emby|g" /etc/services.d/emby/run \
|
RUN sed -i "s|/config|/emby|g" /etc/services.d/emby/run \
|
||||||
&& sed -i "s|/config|/emby|g" /etc/cont-init.d/30-config
|
&& sed -i "s|/config|/emby|g" /etc/cont-init.d/30-config
|
||||||
|
|
||||||
RUN cat /etc/services.d/emby/run
|
|
||||||
|
|
||||||
# copy local files
|
# copy local files
|
||||||
COPY root/ /
|
COPY root/ /
|
||||||
|
|
||||||
|
|||||||
@@ -1,12 +1,12 @@
|
|||||||
{
|
{
|
||||||
"build_from_template": {
|
"build_from_template": {
|
||||||
"image": "linuxserver/emby",
|
"image": "linuxserver/emby",
|
||||||
"version": "4.3.1.0-ls26"
|
"version": "4.3.1.0-ls31"
|
||||||
},
|
},
|
||||||
"build_from": {
|
"build_from": {
|
||||||
"armhf": "linuxserver/emby:arm32v7-4.3.1.0-ls26",
|
"armhf": "linuxserver/emby:arm32v7-4.3.1.0-ls31",
|
||||||
"aarch64": "linuxserver/emby:arm64v8-4.3.1.0-ls26",
|
"aarch64": "linuxserver/emby:arm64v8-4.3.1.0-ls31",
|
||||||
"amd64": "linuxserver/emby:amd64-4.3.1.0-ls26"
|
"amd64": "linuxserver/emby:amd64-4.3.1.0-ls31"
|
||||||
},
|
},
|
||||||
"squash": false,
|
"squash": false,
|
||||||
"args": {}
|
"args": {}
|
||||||
|
|||||||
@@ -1,8 +1,8 @@
|
|||||||
{
|
{
|
||||||
"name": "emby",
|
"name": "emby",
|
||||||
"version": "0.1.0",
|
"version": "0.2.0",
|
||||||
"slug": "emby",
|
"slug": "emby",
|
||||||
"legacy": true,
|
"legacy": false,
|
||||||
"maintenance": {
|
"maintenance": {
|
||||||
"github_release": "https://github.com/linuxserver/docker-emby",
|
"github_release": "https://github.com/linuxserver/docker-emby",
|
||||||
"version_regex": "(\\d+\\.\\d+\\.\\d+.\\d+)-(ls\\d+)"
|
"version_regex": "(\\d+\\.\\d+\\.\\d+.\\d+)-(ls\\d+)"
|
||||||
|
|||||||
5
emby/root/etc/cont-init.d/00-ha-env
Normal file
5
emby/root/etc/cont-init.d/00-ha-env
Normal file
@@ -0,0 +1,5 @@
|
|||||||
|
#!/usr/bin/with-contenv bashio
|
||||||
|
|
||||||
|
for k in $(bashio::jq "${__BASHIO_ADDON_CONFIG}" 'keys | .[]'); do
|
||||||
|
printf "$(bashio::config $k)" > /var/run/s6/container_environment/$k
|
||||||
|
done
|
||||||
@@ -1,3 +1,7 @@
|
|||||||
|
## 0.12.0
|
||||||
|
|
||||||
|
- not a legacy addon anymore
|
||||||
|
|
||||||
## 0.11.0
|
## 0.11.0
|
||||||
|
|
||||||
- Update hydra2 to 2.13.14 (linuxserver/hydra2:v2.13.14-ls59)
|
- Update hydra2 to 2.13.14 (linuxserver/hydra2:v2.13.14-ls59)
|
||||||
|
|||||||
@@ -2,6 +2,20 @@ ARG BUILD_FROM
|
|||||||
# hadolint ignore=DL3006
|
# hadolint ignore=DL3006
|
||||||
FROM $BUILD_FROM
|
FROM $BUILD_FROM
|
||||||
|
|
||||||
|
RUN curl -J -L -o /tmp/bashio.tar.gz \
|
||||||
|
"https://github.com/hassio-addons/bashio/archive/v0.7.1.tar.gz" \
|
||||||
|
&& mkdir /tmp/bashio \
|
||||||
|
&& tar zxvf \
|
||||||
|
/tmp/bashio.tar.gz \
|
||||||
|
--strip 1 -C /tmp/bashio \
|
||||||
|
\
|
||||||
|
&& mv /tmp/bashio/lib /usr/lib/bashio \
|
||||||
|
&& ln -s /usr/lib/bashio/bashio /usr/bin/bashio \
|
||||||
|
&& rm -fr /tmp/*
|
||||||
|
|
||||||
# use /data instead of /config for hass.io environment
|
# use /data instead of /config for hass.io environment
|
||||||
RUN sed -i "s|/config|/config/hydra2|g" /etc/services.d/nzbhydra2/run \
|
RUN sed -i "s|/config|/config/hydra2|g" /etc/services.d/nzbhydra2/run \
|
||||||
&& sed -i "s|/config|/config/hydra2|g" /etc/cont-init.d/30-config
|
&& sed -i "s|/config|/config/hydra2|g" /etc/cont-init.d/30-config
|
||||||
|
|
||||||
|
# copy local files
|
||||||
|
COPY root/ /
|
||||||
@@ -1,8 +1,8 @@
|
|||||||
{
|
{
|
||||||
"name": "hydra2",
|
"name": "hydra2",
|
||||||
"version": "0.11.1",
|
"version": "0.12.0",
|
||||||
"slug": "hydra2",
|
"slug": "hydra2",
|
||||||
"legacy": true,
|
"legacy": false,
|
||||||
"maintenance": {
|
"maintenance": {
|
||||||
"github_release": "https://github.com/linuxserver/docker-hydra2",
|
"github_release": "https://github.com/linuxserver/docker-hydra2",
|
||||||
"version_regex": "v(\\d+\\.\\d+\\.\\d+)-(ls\\d+)"
|
"version_regex": "v(\\d+\\.\\d+\\.\\d+)-(ls\\d+)"
|
||||||
|
|||||||
5
hydra2/root/etc/cont-init.d/00-ha-env
Normal file
5
hydra2/root/etc/cont-init.d/00-ha-env
Normal file
@@ -0,0 +1,5 @@
|
|||||||
|
#!/usr/bin/with-contenv bashio
|
||||||
|
|
||||||
|
for k in $(bashio::jq "${__BASHIO_ADDON_CONFIG}" 'keys | .[]'); do
|
||||||
|
printf "$(bashio::config $k)" > /var/run/s6/container_environment/$k
|
||||||
|
done
|
||||||
@@ -1,3 +1,8 @@
|
|||||||
|
## 0.4.0
|
||||||
|
|
||||||
|
- not a legacy addon anymore
|
||||||
|
- Update jackett to 0.13.144 (linuxserver/jackett:v0.13.144-ls55)
|
||||||
|
|
||||||
## 0.3.0
|
## 0.3.0
|
||||||
|
|
||||||
- Update jackett to 0.13.127 (linuxserver/jackett:v0.13.127-ls54)
|
- Update jackett to 0.13.127 (linuxserver/jackett:v0.13.127-ls54)
|
||||||
|
|||||||
@@ -2,6 +2,17 @@ ARG BUILD_FROM
|
|||||||
# hadolint ignore=DL3006
|
# hadolint ignore=DL3006
|
||||||
FROM $BUILD_FROM
|
FROM $BUILD_FROM
|
||||||
|
|
||||||
|
RUN curl -J -L -o /tmp/bashio.tar.gz \
|
||||||
|
"https://github.com/hassio-addons/bashio/archive/v0.7.1.tar.gz" \
|
||||||
|
&& mkdir /tmp/bashio \
|
||||||
|
&& tar zxvf \
|
||||||
|
/tmp/bashio.tar.gz \
|
||||||
|
--strip 1 -C /tmp/bashio \
|
||||||
|
\
|
||||||
|
&& mv /tmp/bashio/lib /usr/lib/bashio \
|
||||||
|
&& ln -s /usr/lib/bashio/bashio /usr/bin/bashio \
|
||||||
|
&& rm -fr /tmp/*
|
||||||
|
|
||||||
# use /data instead of /config for hass.io environment
|
# use /data instead of /config for hass.io environment
|
||||||
RUN sed -i "s|/config|/config/jackett|g" /etc/cont-init.d/30-config
|
RUN sed -i "s|/config|/config/jackett|g" /etc/cont-init.d/30-config
|
||||||
|
|
||||||
|
|||||||
@@ -1,12 +1,12 @@
|
|||||||
{
|
{
|
||||||
"build_from_template": {
|
"build_from_template": {
|
||||||
"image": "linuxserver/jackett",
|
"image": "linuxserver/jackett",
|
||||||
"version": "v0.13.127-ls54"
|
"version": "v0.13.144-ls55"
|
||||||
},
|
},
|
||||||
"build_from": {
|
"build_from": {
|
||||||
"armhf": "linuxserver/jackett:arm32v7-v0.13.127-ls54",
|
"armhf": "linuxserver/jackett:arm32v7-v0.13.144-ls55",
|
||||||
"aarch64": "linuxserver/jackett:arm64v8-v0.13.127-ls54",
|
"aarch64": "linuxserver/jackett:arm64v8-v0.13.144-ls55",
|
||||||
"amd64": "linuxserver/jackett:amd64-v0.13.127-ls54"
|
"amd64": "linuxserver/jackett:amd64-v0.13.144-ls55"
|
||||||
},
|
},
|
||||||
"squash": false,
|
"squash": false,
|
||||||
"args": {}
|
"args": {}
|
||||||
|
|||||||
@@ -1,8 +1,8 @@
|
|||||||
{
|
{
|
||||||
"name": "jackett",
|
"name": "jackett",
|
||||||
"version": "0.3.1",
|
"version": "0.4.0",
|
||||||
"slug": "jackett",
|
"slug": "jackett",
|
||||||
"legacy": true,
|
"legacy": false,
|
||||||
"maintenance": {
|
"maintenance": {
|
||||||
"github_release": "https://github.com/linuxserver/docker-jackett",
|
"github_release": "https://github.com/linuxserver/docker-jackett",
|
||||||
"version_regex": "v(\\d+\\.\\d+\\.\\d+)-(ls\\d+)"
|
"version_regex": "v(\\d+\\.\\d+\\.\\d+)-(ls\\d+)"
|
||||||
|
|||||||
5
jackett/root/etc/cont-init.d/00-ha-env
Normal file
5
jackett/root/etc/cont-init.d/00-ha-env
Normal file
@@ -0,0 +1,5 @@
|
|||||||
|
#!/usr/bin/with-contenv bashio
|
||||||
|
|
||||||
|
for k in $(bashio::jq "${__BASHIO_ADDON_CONFIG}" 'keys | .[]'); do
|
||||||
|
printf "$(bashio::config $k)" > /var/run/s6/container_environment/$k
|
||||||
|
done
|
||||||
@@ -1,4 +1,9 @@
|
|||||||
## 0.2.0
|
## 0.3.0
|
||||||
|
|
||||||
|
- not a legacy addon anymore
|
||||||
|
- Update base image to linuxserver/jellyfin:v10.4.3-ls36
|
||||||
|
|
||||||
|
## 0.2.0
|
||||||
|
|
||||||
- Update jellyfin to 10.4.3 (linuxserver/jellyfin:v10.4.3-ls29)
|
- Update jellyfin to 10.4.3 (linuxserver/jellyfin:v10.4.3-ls29)
|
||||||
|
|
||||||
|
|||||||
@@ -2,6 +2,28 @@ ARG BUILD_FROM
|
|||||||
# hadolint ignore=DL3006
|
# hadolint ignore=DL3006
|
||||||
FROM $BUILD_FROM
|
FROM $BUILD_FROM
|
||||||
|
|
||||||
|
# Set shell
|
||||||
|
SHELL ["/bin/bash", "-o", "pipefail", "-c"]
|
||||||
|
|
||||||
|
RUN apt-get update \
|
||||||
|
\
|
||||||
|
&& apt-get install -y --no-install-recommends \
|
||||||
|
jq=1.5+dfsg-2 \
|
||||||
|
\
|
||||||
|
&& curl -J -L -o /tmp/bashio.tar.gz \
|
||||||
|
"https://github.com/hassio-addons/bashio/archive/v0.7.1.tar.gz" \
|
||||||
|
&& mkdir /tmp/bashio \
|
||||||
|
&& tar zxvf \
|
||||||
|
/tmp/bashio.tar.gz \
|
||||||
|
--strip 1 -C /tmp/bashio \
|
||||||
|
\
|
||||||
|
&& mv /tmp/bashio/lib /usr/lib/bashio \
|
||||||
|
&& ln -s /usr/lib/bashio/bashio /usr/bin/bashio \
|
||||||
|
&& rm -fr \
|
||||||
|
/tmp/* \
|
||||||
|
/var/{cache,log}/* \
|
||||||
|
/var/lib/apt/lists/*
|
||||||
|
|
||||||
RUN sed -i "s|/config/data|/share/jellyfin/data|g" /etc/services.d/jellyfin/run \
|
RUN sed -i "s|/config/data|/share/jellyfin/data|g" /etc/services.d/jellyfin/run \
|
||||||
&& sed -i "s|/config/log|/share/jellyfin/log|g" /etc/services.d/jellyfin/run \
|
&& sed -i "s|/config/log|/share/jellyfin/log|g" /etc/services.d/jellyfin/run \
|
||||||
&& sed -i "s|/config/cache|/share/jellyfin/cache|g" /etc/services.d/jellyfin/run \
|
&& sed -i "s|/config/cache|/share/jellyfin/cache|g" /etc/services.d/jellyfin/run \
|
||||||
|
|||||||
@@ -1,12 +1,12 @@
|
|||||||
{
|
{
|
||||||
"build_from_template": {
|
"build_from_template": {
|
||||||
"image": "linuxserver/jellyfin",
|
"image": "linuxserver/jellyfin",
|
||||||
"version": "v10.4.3-ls29"
|
"version": "v10.4.3-ls36"
|
||||||
},
|
},
|
||||||
"build_from": {
|
"build_from": {
|
||||||
"armhf": "linuxserver/jellyfin:arm32v7-v10.4.3-ls29",
|
"armhf": "linuxserver/jellyfin:arm32v7-v10.4.3-ls36",
|
||||||
"aarch64": "linuxserver/jellyfin:arm64v8-v10.4.3-ls29",
|
"aarch64": "linuxserver/jellyfin:arm64v8-v10.4.3-ls36",
|
||||||
"amd64": "linuxserver/jellyfin:amd64-v10.4.3-ls29"
|
"amd64": "linuxserver/jellyfin:amd64-v10.4.3-ls36"
|
||||||
},
|
},
|
||||||
"squash": false,
|
"squash": false,
|
||||||
"args": {}
|
"args": {}
|
||||||
|
|||||||
@@ -1,8 +1,8 @@
|
|||||||
{
|
{
|
||||||
"name": "jellyfin",
|
"name": "jellyfin",
|
||||||
"version": "0.2.0",
|
"version": "0.3.0",
|
||||||
"slug": "jellyfin",
|
"slug": "jellyfin",
|
||||||
"legacy": true,
|
"legacy": false,
|
||||||
"maintenance": {
|
"maintenance": {
|
||||||
"github_release": "https://github.com/linuxserver/docker-jellyfin",
|
"github_release": "https://github.com/linuxserver/docker-jellyfin",
|
||||||
"version_regex": "v(\\d+\\.\\d+\\.\\d+)-(ls\\d+)"
|
"version_regex": "v(\\d+\\.\\d+\\.\\d+)-(ls\\d+)"
|
||||||
|
|||||||
5
jellyfin/root/etc/cont-init.d/00-ha-env
Normal file
5
jellyfin/root/etc/cont-init.d/00-ha-env
Normal file
@@ -0,0 +1,5 @@
|
|||||||
|
#!/usr/bin/with-contenv bashio
|
||||||
|
|
||||||
|
for k in $(bashio::jq "${__BASHIO_ADDON_CONFIG}" 'keys | .[]'); do
|
||||||
|
printf "$(bashio::config $k)" > /var/run/s6/container_environment/$k
|
||||||
|
done
|
||||||
3
nzbget/CHANGELOG.md
Normal file
3
nzbget/CHANGELOG.md
Normal file
@@ -0,0 +1,3 @@
|
|||||||
|
## 0.2.0
|
||||||
|
|
||||||
|
- not a legacy addon anymore
|
||||||
@@ -2,6 +2,21 @@ ARG BUILD_FROM
|
|||||||
# hadolint ignore=DL3006
|
# hadolint ignore=DL3006
|
||||||
FROM $BUILD_FROM
|
FROM $BUILD_FROM
|
||||||
|
|
||||||
|
RUN apk add --no-cache \
|
||||||
|
jq=1.6-r0 \
|
||||||
|
&& curl -J -L -o /tmp/bashio.tar.gz \
|
||||||
|
"https://github.com/hassio-addons/bashio/archive/v0.8.0.tar.gz" \
|
||||||
|
&& mkdir /tmp/bashio \
|
||||||
|
&& tar zxvf \
|
||||||
|
/tmp/bashio.tar.gz \
|
||||||
|
--strip 1 -C /tmp/bashio \
|
||||||
|
\
|
||||||
|
&& mv /tmp/bashio/lib /usr/lib/bashio \
|
||||||
|
&& ln -s /usr/lib/bashio/bashio /usr/bin/bashio \
|
||||||
|
\
|
||||||
|
&& rm -f -r \
|
||||||
|
/tmp/*
|
||||||
|
|
||||||
# use /data instead of /config for hass.io environment
|
# use /data instead of /config for hass.io environment
|
||||||
RUN sed -i "s|/config|/config/nzbget|g" /etc/services.d/nzbget/run \
|
RUN sed -i "s|/config|/config/nzbget|g" /etc/services.d/nzbget/run \
|
||||||
&& sed -i "s|/config|/config/nzbget|g" /etc/cont-init.d/30-config \
|
&& sed -i "s|/config|/config/nzbget|g" /etc/cont-init.d/30-config \
|
||||||
|
|||||||
@@ -1,12 +1,12 @@
|
|||||||
{
|
{
|
||||||
"build_from_template": {
|
"build_from_template": {
|
||||||
"image": "linuxserver/nzbget",
|
"image": "linuxserver/nzbget",
|
||||||
"version": "v21.0-ls16"
|
"version": "v21.0-ls41"
|
||||||
},
|
},
|
||||||
"build_from": {
|
"build_from": {
|
||||||
"armhf": "linuxserver/nzbget:arm32v7-v21.0-ls16",
|
"armhf": "linuxserver/nzbget:arm32v7-v21.0-ls41",
|
||||||
"aarch64": "linuxserver/nzbget:arm64v8-v21.0-ls16",
|
"aarch64": "linuxserver/nzbget:arm64v8-v21.0-ls41",
|
||||||
"amd64": "linuxserver/nzbget:amd64-v21.0-ls16"
|
"amd64": "linuxserver/nzbget:amd64-v21.0-ls41"
|
||||||
},
|
},
|
||||||
"squash": false,
|
"squash": false,
|
||||||
"args": {}
|
"args": {}
|
||||||
|
|||||||
@@ -1,8 +1,8 @@
|
|||||||
{
|
{
|
||||||
"name": "nzbget",
|
"name": "nzbget",
|
||||||
"version": "0.1.2",
|
"version": "0.2.0",
|
||||||
"slug": "nzbget",
|
"slug": "nzbget",
|
||||||
"legacy": true,
|
"legacy": false,
|
||||||
"maintenance": {
|
"maintenance": {
|
||||||
"github_release": "https://github.com/linuxserver/docker-nzbget",
|
"github_release": "https://github.com/linuxserver/docker-nzbget",
|
||||||
"version_regex": "v(\\d+\\.\\d+\\.?\\d*)-(ls\\d+)"
|
"version_regex": "v(\\d+\\.\\d+\\.?\\d*)-(ls\\d+)"
|
||||||
|
|||||||
5
nzbget/root/etc/cont-init.d/00-ha-env
Normal file
5
nzbget/root/etc/cont-init.d/00-ha-env
Normal file
@@ -0,0 +1,5 @@
|
|||||||
|
#!/usr/bin/with-contenv bashio
|
||||||
|
|
||||||
|
for k in $(bashio::jq "${__BASHIO_ADDON_CONFIG}" 'keys | .[]'); do
|
||||||
|
printf "$(bashio::config $k)" > /var/run/s6/container_environment/$k
|
||||||
|
done
|
||||||
@@ -1,4 +1,8 @@
|
|||||||
## 0.4.0
|
## 0.5.0
|
||||||
|
|
||||||
|
- not a legacy addon anymore
|
||||||
|
|
||||||
|
## 0.4.0
|
||||||
|
|
||||||
- Update radarr to 0.2.0.1480 (linuxserver/radarr:v0.2.0.1480-ls51)
|
- Update radarr to 0.2.0.1480 (linuxserver/radarr:v0.2.0.1480-ls51)
|
||||||
|
|
||||||
|
|||||||
@@ -2,6 +2,17 @@ ARG BUILD_FROM
|
|||||||
# hadolint ignore=DL3006
|
# hadolint ignore=DL3006
|
||||||
FROM $BUILD_FROM
|
FROM $BUILD_FROM
|
||||||
|
|
||||||
|
RUN curl -J -L -o /tmp/bashio.tar.gz \
|
||||||
|
"https://github.com/hassio-addons/bashio/archive/v0.7.1.tar.gz" \
|
||||||
|
&& mkdir /tmp/bashio \
|
||||||
|
&& tar zxvf \
|
||||||
|
/tmp/bashio.tar.gz \
|
||||||
|
--strip 1 -C /tmp/bashio \
|
||||||
|
\
|
||||||
|
&& mv /tmp/bashio/lib /usr/lib/bashio \
|
||||||
|
&& ln -s /usr/lib/bashio/bashio /usr/bin/bashio \
|
||||||
|
&& rm -fr /tmp/*
|
||||||
|
|
||||||
# use /data instead of /config for hass.io environment
|
# use /data instead of /config for hass.io environment
|
||||||
RUN sed -i "s|/config|/config/radarr|g" /etc/services.d/radarr/run \
|
RUN sed -i "s|/config|/config/radarr|g" /etc/services.d/radarr/run \
|
||||||
&& sed -i "s|/config|/config/radarr|g" /etc/cont-init.d/30-config
|
&& sed -i "s|/config|/config/radarr|g" /etc/cont-init.d/30-config
|
||||||
|
|||||||
@@ -1,8 +1,8 @@
|
|||||||
{
|
{
|
||||||
"name": "radarr",
|
"name": "radarr",
|
||||||
"version": "0.4.1",
|
"version": "0.5.0",
|
||||||
"slug": "radarr",
|
"slug": "radarr",
|
||||||
"legacy": true,
|
"legacy": false,
|
||||||
"maintenance": {
|
"maintenance": {
|
||||||
"github_release": "https://github.com/linuxserver/docker-radarr",
|
"github_release": "https://github.com/linuxserver/docker-radarr",
|
||||||
"version_regex": "v(\\d+\\.\\d+\\.\\d+\\.\\d+)-(ls\\d+)"
|
"version_regex": "v(\\d+\\.\\d+\\.\\d+\\.\\d+)-(ls\\d+)"
|
||||||
|
|||||||
5
radarr/root/etc/cont-init.d/00-ha-env
Normal file
5
radarr/root/etc/cont-init.d/00-ha-env
Normal file
@@ -0,0 +1,5 @@
|
|||||||
|
#!/usr/bin/with-contenv bashio
|
||||||
|
|
||||||
|
for k in $(bashio::jq "${__BASHIO_ADDON_CONFIG}" 'keys | .[]'); do
|
||||||
|
printf "$(bashio::config $k)" > /var/run/s6/container_environment/$k
|
||||||
|
done
|
||||||
@@ -1,3 +1,8 @@
|
|||||||
|
## 0.3.0
|
||||||
|
|
||||||
|
- not a legacy addon anymore
|
||||||
|
- Update base image to linuxserver/sonarr:2.0.0.5338-ls50
|
||||||
|
|
||||||
## 0.2.2
|
## 0.2.2
|
||||||
|
|
||||||
- set snapshot_exclude for logs and MediaCover
|
- set snapshot_exclude for logs and MediaCover
|
||||||
|
|||||||
@@ -2,6 +2,17 @@ ARG BUILD_FROM
|
|||||||
# hadolint ignore=DL3006
|
# hadolint ignore=DL3006
|
||||||
FROM $BUILD_FROM
|
FROM $BUILD_FROM
|
||||||
|
|
||||||
|
RUN curl -J -L -o /tmp/bashio.tar.gz \
|
||||||
|
"https://github.com/hassio-addons/bashio/archive/v0.7.1.tar.gz" \
|
||||||
|
&& mkdir /tmp/bashio \
|
||||||
|
&& tar zxvf \
|
||||||
|
/tmp/bashio.tar.gz \
|
||||||
|
--strip 1 -C /tmp/bashio \
|
||||||
|
\
|
||||||
|
&& mv /tmp/bashio/lib /usr/lib/bashio \
|
||||||
|
&& ln -s /usr/lib/bashio/bashio /usr/bin/bashio \
|
||||||
|
&& rm -fr /tmp/*
|
||||||
|
|
||||||
# use /data instead of /config for hass.io environment
|
# use /data instead of /config for hass.io environment
|
||||||
RUN sed -i "s|/config|/config/sonarr|g" /etc/services.d/sonarr/run \
|
RUN sed -i "s|/config|/config/sonarr|g" /etc/services.d/sonarr/run \
|
||||||
&& sed -i "s|/config|/config/sonarr|g" /etc/cont-init.d/30-config
|
&& sed -i "s|/config|/config/sonarr|g" /etc/cont-init.d/30-config
|
||||||
|
|||||||
@@ -1,12 +1,12 @@
|
|||||||
{
|
{
|
||||||
"build_from_template": {
|
"build_from_template": {
|
||||||
"image": "linuxserver/sonarr",
|
"image": "linuxserver/sonarr",
|
||||||
"version": "2.0.0.5338-ls31"
|
"version": "2.0.0.5338-ls50"
|
||||||
},
|
},
|
||||||
"build_from": {
|
"build_from": {
|
||||||
"armhf": "linuxserver/sonarr:arm32v7-2.0.0.5338-ls31",
|
"armhf": "linuxserver/sonarr:arm32v7-2.0.0.5338-ls50",
|
||||||
"aarch64": "linuxserver/sonarr:arm64v8-2.0.0.5338-ls31",
|
"aarch64": "linuxserver/sonarr:arm64v8-2.0.0.5338-ls50",
|
||||||
"amd64": "linuxserver/sonarr:amd64-2.0.0.5338-ls31"
|
"amd64": "linuxserver/sonarr:amd64-2.0.0.5338-ls50"
|
||||||
},
|
},
|
||||||
"squash": false,
|
"squash": false,
|
||||||
"args": {}
|
"args": {}
|
||||||
|
|||||||
@@ -1,8 +1,8 @@
|
|||||||
{
|
{
|
||||||
"name": "sonarr",
|
"name": "sonarr",
|
||||||
"version": "0.2.2",
|
"version": "0.3.0",
|
||||||
"slug": "sonarr",
|
"slug": "sonarr",
|
||||||
"legacy": true,
|
"legacy": false,
|
||||||
"maintenance": {
|
"maintenance": {
|
||||||
"github_release": "https://github.com/linuxserver/docker-sonarr",
|
"github_release": "https://github.com/linuxserver/docker-sonarr",
|
||||||
"version_regex": "(\\d+\\.\\d+\\.\\d+\\.\\d+)-(ls\\d+)"
|
"version_regex": "(\\d+\\.\\d+\\.\\d+\\.\\d+)-(ls\\d+)"
|
||||||
|
|||||||
5
sonarr/root/etc/cont-init.d/00-ha-env
Normal file
5
sonarr/root/etc/cont-init.d/00-ha-env
Normal file
@@ -0,0 +1,5 @@
|
|||||||
|
#!/usr/bin/with-contenv bashio
|
||||||
|
|
||||||
|
for k in $(bashio::jq "${__BASHIO_ADDON_CONFIG}" 'keys | .[]'); do
|
||||||
|
printf "$(bashio::config $k)" > /var/run/s6/container_environment/$k
|
||||||
|
done
|
||||||
@@ -1,3 +1,7 @@
|
|||||||
|
## 0.2.0
|
||||||
|
|
||||||
|
- not a legacy addon anymore
|
||||||
|
|
||||||
## 0.1.2
|
## 0.1.2
|
||||||
|
|
||||||
- transmission-magnet-redirect 0.1.2 (petersendev/transmission-magnet-redirect:0.1.2)
|
- transmission-magnet-redirect 0.1.2 (petersendev/transmission-magnet-redirect:0.1.2)
|
||||||
@@ -1,3 +1,41 @@
|
|||||||
ARG BUILD_FROM
|
ARG BUILD_FROM
|
||||||
# hadolint ignore=DL3006
|
# hadolint ignore=DL3006
|
||||||
FROM $BUILD_FROM
|
FROM $BUILD_FROM
|
||||||
|
|
||||||
|
# Set shell
|
||||||
|
SHELL ["/bin/bash", "-o", "pipefail", "-c"]
|
||||||
|
|
||||||
|
ARG BUILD_ARCH=amd64
|
||||||
|
RUN apt-get update \
|
||||||
|
\
|
||||||
|
&& apt-get install -y --no-install-recommends \
|
||||||
|
jq=1.5+dfsg-2+b1 \
|
||||||
|
\
|
||||||
|
&& S6_ARCH="${BUILD_ARCH}" \
|
||||||
|
&& if [ "${BUILD_ARCH}" = "i386" ]; then S6_ARCH="x86"; fi \
|
||||||
|
&& if [ "${BUILD_ARCH}" = "armv7" ]; then S6_ARCH="arm"; fi \
|
||||||
|
\
|
||||||
|
&& curl -L -s "https://github.com/just-containers/s6-overlay/releases/download/v1.22.1.0/s6-overlay-${S6_ARCH}.tar.gz" \
|
||||||
|
| tar zxvf - -C / \
|
||||||
|
\
|
||||||
|
&& mkdir -p /etc/fix-attrs.d \
|
||||||
|
&& mkdir -p /etc/services.d \
|
||||||
|
\
|
||||||
|
&& curl -J -L -o /tmp/bashio.tar.gz \
|
||||||
|
"https://github.com/hassio-addons/bashio/archive/v0.7.1.tar.gz" \
|
||||||
|
&& mkdir /tmp/bashio \
|
||||||
|
&& tar zxvf \
|
||||||
|
/tmp/bashio.tar.gz \
|
||||||
|
--strip 1 -C /tmp/bashio \
|
||||||
|
\
|
||||||
|
&& mv /tmp/bashio/lib /usr/lib/bashio \
|
||||||
|
&& ln -s /usr/lib/bashio/bashio /usr/bin/bashio \
|
||||||
|
&& rm -fr \
|
||||||
|
/tmp/* \
|
||||||
|
/var/{cache,log}/* \
|
||||||
|
/var/lib/apt/lists/*
|
||||||
|
|
||||||
|
# copy local files
|
||||||
|
COPY root/ /
|
||||||
|
|
||||||
|
ENTRYPOINT [ "/init" ]
|
||||||
@@ -1,8 +1,8 @@
|
|||||||
{
|
{
|
||||||
"name": "transmission-magnet-redirect",
|
"name": "transmission-magnet-redirect",
|
||||||
"version": "0.1.2",
|
"version": "0.2.0",
|
||||||
"slug": "transmission-magnet-redirect",
|
"slug": "transmission-magnet-redirect",
|
||||||
"legacy": true,
|
"legacy": false,
|
||||||
"maintenance": {
|
"maintenance": {
|
||||||
"github_release": "https://github.com/petersendev/docker-transmission-magnet-redirect",
|
"github_release": "https://github.com/petersendev/docker-transmission-magnet-redirect",
|
||||||
"version_regex": "(\\d+\\.\\d\\.\\d)"
|
"version_regex": "(\\d+\\.\\d\\.\\d)"
|
||||||
|
|||||||
@@ -0,0 +1,5 @@
|
|||||||
|
#!/usr/bin/with-contenv bashio
|
||||||
|
|
||||||
|
for k in $(bashio::jq "${__BASHIO_ADDON_CONFIG}" 'keys | .[]'); do
|
||||||
|
printf "$(bashio::config $k)" > /var/run/s6/container_environment/$k
|
||||||
|
done
|
||||||
@@ -0,0 +1,6 @@
|
|||||||
|
#!/usr/bin/execlineb -S0
|
||||||
|
|
||||||
|
if -n { s6-test $# -ne 0 }
|
||||||
|
if -n { s6-test ${1} -eq 256 }
|
||||||
|
|
||||||
|
s6-svscanctl -t /var/run/s6/services
|
||||||
@@ -0,0 +1,6 @@
|
|||||||
|
#!/usr/bin/with-contenv bashio
|
||||||
|
|
||||||
|
bashio::log.info 'Starting transmission-magnet-redirect...'
|
||||||
|
|
||||||
|
cd /app
|
||||||
|
exec dotnet TransmissionMagnetRedirect.dll
|
||||||
@@ -1,3 +1,7 @@
|
|||||||
|
## 0.3.0
|
||||||
|
|
||||||
|
- not a legacy addon anymore
|
||||||
|
|
||||||
## 0.2.2
|
## 0.2.2
|
||||||
|
|
||||||
- Added transmission environment variables to options validation
|
- Added transmission environment variables to options validation
|
||||||
|
|||||||
@@ -2,6 +2,17 @@ ARG BUILD_FROM
|
|||||||
# hadolint ignore=DL3006
|
# hadolint ignore=DL3006
|
||||||
FROM $BUILD_FROM
|
FROM $BUILD_FROM
|
||||||
|
|
||||||
|
RUN curl -J -L -o /tmp/bashio.tar.gz \
|
||||||
|
"https://github.com/hassio-addons/bashio/archive/v0.7.1.tar.gz" \
|
||||||
|
&& mkdir /tmp/bashio \
|
||||||
|
&& tar zxvf \
|
||||||
|
/tmp/bashio.tar.gz \
|
||||||
|
--strip 1 -C /tmp/bashio \
|
||||||
|
\
|
||||||
|
&& mv /tmp/bashio/lib /usr/lib/bashio \
|
||||||
|
&& ln -s /usr/lib/bashio/bashio /usr/bin/bashio \
|
||||||
|
&& rm -fr /tmp/*
|
||||||
|
|
||||||
RUN usermod -d /config-internal abc \
|
RUN usermod -d /config-internal abc \
|
||||||
&& sed -i "s|/config|/config-internal|g" /etc/openvpn/adjustConfigs.sh \
|
&& sed -i "s|/config|/config-internal|g" /etc/openvpn/adjustConfigs.sh \
|
||||||
&& sed -i "s|/config|/config-internal|g" /etc/openvpn/updateConfigs.sh \
|
&& sed -i "s|/config|/config-internal|g" /etc/openvpn/updateConfigs.sh \
|
||||||
|
|||||||
@@ -1,8 +1,8 @@
|
|||||||
{
|
{
|
||||||
"name": "transmission-openvpn",
|
"name": "transmission-openvpn",
|
||||||
"version": "0.2.2",
|
"version": "0.3.0",
|
||||||
"slug": "transmission-openvpn",
|
"slug": "transmission-openvpn",
|
||||||
"legacy": true,
|
"legacy": false,
|
||||||
"maintenance": {
|
"maintenance": {
|
||||||
"github_release": "https://github.com/haugene/docker-transmission-openvpn",
|
"github_release": "https://github.com/haugene/docker-transmission-openvpn",
|
||||||
"version_regex": "(\\d+\\.\\d+)",
|
"version_regex": "(\\d+\\.\\d+)",
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
#!/bin/bash
|
#!/usr/bin/bashio
|
||||||
|
|
||||||
if [ ! -d /config/transmission-openvpn ]; then
|
if [ ! -d /config/transmission-openvpn ]; then
|
||||||
echo "Creating /config/transmission-openvpn"
|
echo "Creating /config/transmission-openvpn"
|
||||||
@@ -11,4 +11,8 @@ if [ -d /config/transmission-openvpn/openvpn ]; then
|
|||||||
cp -R /config/transmission-openvpn/openvpn/* /etc/openvpn/
|
cp -R /config/transmission-openvpn/openvpn/* /etc/openvpn/
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
for k in $(bashio::jq "${__BASHIO_ADDON_CONFIG}" 'keys | .[]'); do
|
||||||
|
export $k=$(bashio::config $k)
|
||||||
|
done
|
||||||
|
|
||||||
/etc/openvpn/start.sh
|
/etc/openvpn/start.sh
|
||||||
|
|||||||
@@ -1,3 +1,7 @@
|
|||||||
|
## 0.4.0
|
||||||
|
|
||||||
|
- not a legacy addon anymore
|
||||||
|
|
||||||
## 0.3.0
|
## 0.3.0
|
||||||
|
|
||||||
- Update znc to 1.7.5 (linuxserver/znc:znc-1.7.5-ls23)
|
- Update znc to 1.7.5 (linuxserver/znc:znc-1.7.5-ls23)
|
||||||
|
|||||||
@@ -2,6 +2,22 @@ ARG BUILD_FROM
|
|||||||
# hadolint ignore=DL3006
|
# hadolint ignore=DL3006
|
||||||
FROM $BUILD_FROM
|
FROM $BUILD_FROM
|
||||||
|
|
||||||
|
RUN apk add --no-cache \
|
||||||
|
curl=7.67.0-r0 \
|
||||||
|
jq=1.6-r0 \
|
||||||
|
&& curl -J -L -o /tmp/bashio.tar.gz \
|
||||||
|
"https://github.com/hassio-addons/bashio/archive/v0.8.0.tar.gz" \
|
||||||
|
&& mkdir /tmp/bashio \
|
||||||
|
&& tar zxvf \
|
||||||
|
/tmp/bashio.tar.gz \
|
||||||
|
--strip 1 -C /tmp/bashio \
|
||||||
|
\
|
||||||
|
&& mv /tmp/bashio/lib /usr/lib/bashio \
|
||||||
|
&& ln -s /usr/lib/bashio/bashio /usr/bin/bashio \
|
||||||
|
\
|
||||||
|
&& rm -f -r \
|
||||||
|
/tmp/*
|
||||||
|
|
||||||
# use /data instead of /config for hass.io environment
|
# use /data instead of /config for hass.io environment
|
||||||
RUN sed -i "s|/config|/config/znc|g" /etc/services.d/znc/run \
|
RUN sed -i "s|/config|/config/znc|g" /etc/services.d/znc/run \
|
||||||
&& sed -i "s|/config|/config/znc|g" /etc/cont-init.d/20-config \
|
&& sed -i "s|/config|/config/znc|g" /etc/cont-init.d/20-config \
|
||||||
|
|||||||
@@ -1,12 +1,12 @@
|
|||||||
{
|
{
|
||||||
"build_from_template": {
|
"build_from_template": {
|
||||||
"image": "linuxserver/znc",
|
"image": "linuxserver/znc",
|
||||||
"version": "znc-1.7.5-ls23"
|
"version": "znc-1.7.5-ls28"
|
||||||
},
|
},
|
||||||
"build_from": {
|
"build_from": {
|
||||||
"armhf": "linuxserver/znc:arm32v7-znc-1.7.5-ls23",
|
"armhf": "linuxserver/znc:arm32v7-znc-1.7.5-ls28",
|
||||||
"aarch64": "linuxserver/znc:arm64v8-znc-1.7.5-ls23",
|
"aarch64": "linuxserver/znc:arm64v8-znc-1.7.5-ls28",
|
||||||
"amd64": "linuxserver/znc:amd64-znc-1.7.5-ls23"
|
"amd64": "linuxserver/znc:amd64-znc-1.7.5-ls28"
|
||||||
},
|
},
|
||||||
"squash": false,
|
"squash": false,
|
||||||
"args": {}
|
"args": {}
|
||||||
|
|||||||
@@ -1,8 +1,8 @@
|
|||||||
{
|
{
|
||||||
"name": "znc",
|
"name": "znc",
|
||||||
"version": "0.3.0",
|
"version": "0.4.0",
|
||||||
"slug": "znc",
|
"slug": "znc",
|
||||||
"legacy": true,
|
"legacy": false,
|
||||||
"maintenance": {
|
"maintenance": {
|
||||||
"github_release": "https://github.com/linuxserver/docker-znc",
|
"github_release": "https://github.com/linuxserver/docker-znc",
|
||||||
"version_regex": "(\\d+\\.\\d+\\.\\d+-?\\w*)-(ls\\d+)"
|
"version_regex": "(\\d+\\.\\d+\\.\\d+-?\\w*)-(ls\\d+)"
|
||||||
|
|||||||
5
znc/root/etc/cont-init.d/00-ha-env
Normal file
5
znc/root/etc/cont-init.d/00-ha-env
Normal file
@@ -0,0 +1,5 @@
|
|||||||
|
#!/usr/bin/with-contenv bashio
|
||||||
|
|
||||||
|
for k in $(bashio::jq "${__BASHIO_ADDON_CONFIG}" 'keys | .[]'); do
|
||||||
|
printf "$(bashio::config $k)" > /var/run/s6/container_environment/$k
|
||||||
|
done
|
||||||
Reference in New Issue
Block a user