mirror of
https://github.com/alexbelgium/hassio-addons.git
synced 2026-01-16 01:18:19 +01:00
Convert addons to non-legacy (#36)
This commit is contained in:
@@ -4,20 +4,23 @@
|
||||
"main": "src/index.ts",
|
||||
"license": "MIT",
|
||||
"scripts": {
|
||||
"start": "ts-node src/index.ts"
|
||||
"start": "cross-env-shell ts-node src/index.ts"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@types/cross-spawn": "^6.0.1",
|
||||
"@types/fs-extra-promise": "^1.0.8",
|
||||
"@types/node": "^12.0.4",
|
||||
"@types/request-promise": "^4.1.44",
|
||||
"@types/semver": "^6.0.0",
|
||||
"@types/yargs": "^13.0.0",
|
||||
"cross-env": "^7.0.0",
|
||||
"ts-node": "^8.2.0",
|
||||
"typescript": "^3.5.1"
|
||||
},
|
||||
"dependencies": {
|
||||
"@types/chalk": "^2.2.0",
|
||||
"chalk": "^2.4.2",
|
||||
"cross-spawn": "^7.0.1",
|
||||
"fs-extra-promise": "^1.0.1",
|
||||
"request": "^2.88.0",
|
||||
"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 { 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
|
||||
.option("patch", {
|
||||
alias: "p",
|
||||
default: false
|
||||
.command(["update", "$0"], "performs addon updates", (args) =>
|
||||
{
|
||||
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;
|
||||
|
||||
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:
|
||||
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@*":
|
||||
version "2.2.1"
|
||||
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"
|
||||
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:
|
||||
version "6.0.5"
|
||||
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"
|
||||
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:
|
||||
version "1.14.1"
|
||||
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"
|
||||
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:
|
||||
version "2.1.0"
|
||||
resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-2.1.0.tgz#6309f4e0e5fa913ec1c69307ae364b4b377c9e7b"
|
||||
@@ -602,10 +626,20 @@ shebang-command@^1.2.0:
|
||||
dependencies:
|
||||
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:
|
||||
version "1.0.0"
|
||||
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:
|
||||
version "3.0.2"
|
||||
resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.2.tgz#b5fdc08f1287ea1178628e415e25132b73646c6d"
|
||||
@@ -729,6 +763,12 @@ which@^1.2.9:
|
||||
dependencies:
|
||||
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:
|
||||
version "5.1.0"
|
||||
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
|
||||
|
||||
- emby to 4.3.1.0 (linuxserver/emby:4.3.1.0-ls26)
|
||||
@@ -2,11 +2,31 @@ ARG BUILD_FROM
|
||||
# hadolint ignore=DL3006
|
||||
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 \
|
||||
&& sed -i "s|/config|/emby|g" /etc/cont-init.d/30-config
|
||||
|
||||
RUN cat /etc/services.d/emby/run
|
||||
|
||||
# copy local files
|
||||
COPY root/ /
|
||||
|
||||
|
||||
@@ -1,13 +1,13 @@
|
||||
{
|
||||
"build_from_template": {
|
||||
"image": "linuxserver/emby",
|
||||
"version": "4.3.1.0-ls26"
|
||||
"version": "4.3.1.0-ls31"
|
||||
},
|
||||
"build_from": {
|
||||
"armhf": "linuxserver/emby:arm32v7-4.3.1.0-ls26",
|
||||
"aarch64": "linuxserver/emby:arm64v8-4.3.1.0-ls26",
|
||||
"amd64": "linuxserver/emby:amd64-4.3.1.0-ls26"
|
||||
"armhf": "linuxserver/emby:arm32v7-4.3.1.0-ls31",
|
||||
"aarch64": "linuxserver/emby:arm64v8-4.3.1.0-ls31",
|
||||
"amd64": "linuxserver/emby:amd64-4.3.1.0-ls31"
|
||||
},
|
||||
"squash": false,
|
||||
"args": {}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
{
|
||||
"name": "emby",
|
||||
"version": "0.1.0",
|
||||
"version": "0.2.0",
|
||||
"slug": "emby",
|
||||
"legacy": true,
|
||||
"legacy": false,
|
||||
"maintenance": {
|
||||
"github_release": "https://github.com/linuxserver/docker-emby",
|
||||
"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
|
||||
|
||||
- Update hydra2 to 2.13.14 (linuxserver/hydra2:v2.13.14-ls59)
|
||||
|
||||
@@ -2,6 +2,20 @@ ARG BUILD_FROM
|
||||
# hadolint ignore=DL3006
|
||||
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
|
||||
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
|
||||
|
||||
# copy local files
|
||||
COPY root/ /
|
||||
@@ -1,8 +1,8 @@
|
||||
{
|
||||
"name": "hydra2",
|
||||
"version": "0.11.1",
|
||||
"version": "0.12.0",
|
||||
"slug": "hydra2",
|
||||
"legacy": true,
|
||||
"legacy": false,
|
||||
"maintenance": {
|
||||
"github_release": "https://github.com/linuxserver/docker-hydra2",
|
||||
"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
|
||||
|
||||
- Update jackett to 0.13.127 (linuxserver/jackett:v0.13.127-ls54)
|
||||
|
||||
@@ -2,6 +2,17 @@ ARG BUILD_FROM
|
||||
# hadolint ignore=DL3006
|
||||
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
|
||||
RUN sed -i "s|/config|/config/jackett|g" /etc/cont-init.d/30-config
|
||||
|
||||
|
||||
@@ -1,12 +1,12 @@
|
||||
{
|
||||
"build_from_template": {
|
||||
"image": "linuxserver/jackett",
|
||||
"version": "v0.13.127-ls54"
|
||||
"version": "v0.13.144-ls55"
|
||||
},
|
||||
"build_from": {
|
||||
"armhf": "linuxserver/jackett:arm32v7-v0.13.127-ls54",
|
||||
"aarch64": "linuxserver/jackett:arm64v8-v0.13.127-ls54",
|
||||
"amd64": "linuxserver/jackett:amd64-v0.13.127-ls54"
|
||||
"armhf": "linuxserver/jackett:arm32v7-v0.13.144-ls55",
|
||||
"aarch64": "linuxserver/jackett:arm64v8-v0.13.144-ls55",
|
||||
"amd64": "linuxserver/jackett:amd64-v0.13.144-ls55"
|
||||
},
|
||||
"squash": false,
|
||||
"args": {}
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
{
|
||||
"name": "jackett",
|
||||
"version": "0.3.1",
|
||||
"version": "0.4.0",
|
||||
"slug": "jackett",
|
||||
"legacy": true,
|
||||
"legacy": false,
|
||||
"maintenance": {
|
||||
"github_release": "https://github.com/linuxserver/docker-jackett",
|
||||
"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)
|
||||
|
||||
|
||||
@@ -2,6 +2,28 @@ ARG BUILD_FROM
|
||||
# hadolint ignore=DL3006
|
||||
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 \
|
||||
&& 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 \
|
||||
|
||||
@@ -1,13 +1,13 @@
|
||||
{
|
||||
"build_from_template": {
|
||||
"image": "linuxserver/jellyfin",
|
||||
"version": "v10.4.3-ls29"
|
||||
"version": "v10.4.3-ls36"
|
||||
},
|
||||
"build_from": {
|
||||
"armhf": "linuxserver/jellyfin:arm32v7-v10.4.3-ls29",
|
||||
"aarch64": "linuxserver/jellyfin:arm64v8-v10.4.3-ls29",
|
||||
"amd64": "linuxserver/jellyfin:amd64-v10.4.3-ls29"
|
||||
"armhf": "linuxserver/jellyfin:arm32v7-v10.4.3-ls36",
|
||||
"aarch64": "linuxserver/jellyfin:arm64v8-v10.4.3-ls36",
|
||||
"amd64": "linuxserver/jellyfin:amd64-v10.4.3-ls36"
|
||||
},
|
||||
"squash": false,
|
||||
"args": {}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
{
|
||||
"name": "jellyfin",
|
||||
"version": "0.2.0",
|
||||
"version": "0.3.0",
|
||||
"slug": "jellyfin",
|
||||
"legacy": true,
|
||||
"legacy": false,
|
||||
"maintenance": {
|
||||
"github_release": "https://github.com/linuxserver/docker-jellyfin",
|
||||
"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
|
||||
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
|
||||
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 \
|
||||
|
||||
@@ -1,12 +1,12 @@
|
||||
{
|
||||
"build_from_template": {
|
||||
"image": "linuxserver/nzbget",
|
||||
"version": "v21.0-ls16"
|
||||
"version": "v21.0-ls41"
|
||||
},
|
||||
"build_from": {
|
||||
"armhf": "linuxserver/nzbget:arm32v7-v21.0-ls16",
|
||||
"aarch64": "linuxserver/nzbget:arm64v8-v21.0-ls16",
|
||||
"amd64": "linuxserver/nzbget:amd64-v21.0-ls16"
|
||||
"armhf": "linuxserver/nzbget:arm32v7-v21.0-ls41",
|
||||
"aarch64": "linuxserver/nzbget:arm64v8-v21.0-ls41",
|
||||
"amd64": "linuxserver/nzbget:amd64-v21.0-ls41"
|
||||
},
|
||||
"squash": false,
|
||||
"args": {}
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
{
|
||||
"name": "nzbget",
|
||||
"version": "0.1.2",
|
||||
"version": "0.2.0",
|
||||
"slug": "nzbget",
|
||||
"legacy": true,
|
||||
"legacy": false,
|
||||
"maintenance": {
|
||||
"github_release": "https://github.com/linuxserver/docker-nzbget",
|
||||
"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)
|
||||
|
||||
|
||||
@@ -2,6 +2,17 @@ ARG BUILD_FROM
|
||||
# hadolint ignore=DL3006
|
||||
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
|
||||
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
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
{
|
||||
"name": "radarr",
|
||||
"version": "0.4.1",
|
||||
"version": "0.5.0",
|
||||
"slug": "radarr",
|
||||
"legacy": true,
|
||||
"legacy": false,
|
||||
"maintenance": {
|
||||
"github_release": "https://github.com/linuxserver/docker-radarr",
|
||||
"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
|
||||
|
||||
- set snapshot_exclude for logs and MediaCover
|
||||
|
||||
@@ -2,6 +2,17 @@ ARG BUILD_FROM
|
||||
# hadolint ignore=DL3006
|
||||
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
|
||||
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
|
||||
|
||||
@@ -1,13 +1,13 @@
|
||||
{
|
||||
"build_from_template": {
|
||||
"image": "linuxserver/sonarr",
|
||||
"version": "2.0.0.5338-ls31"
|
||||
"version": "2.0.0.5338-ls50"
|
||||
},
|
||||
"build_from": {
|
||||
"armhf": "linuxserver/sonarr:arm32v7-2.0.0.5338-ls31",
|
||||
"aarch64": "linuxserver/sonarr:arm64v8-2.0.0.5338-ls31",
|
||||
"amd64": "linuxserver/sonarr:amd64-2.0.0.5338-ls31"
|
||||
"armhf": "linuxserver/sonarr:arm32v7-2.0.0.5338-ls50",
|
||||
"aarch64": "linuxserver/sonarr:arm64v8-2.0.0.5338-ls50",
|
||||
"amd64": "linuxserver/sonarr:amd64-2.0.0.5338-ls50"
|
||||
},
|
||||
"squash": false,
|
||||
"args": {}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
{
|
||||
"name": "sonarr",
|
||||
"version": "0.2.2",
|
||||
"version": "0.3.0",
|
||||
"slug": "sonarr",
|
||||
"legacy": true,
|
||||
"legacy": false,
|
||||
"maintenance": {
|
||||
"github_release": "https://github.com/linuxserver/docker-sonarr",
|
||||
"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
|
||||
|
||||
- transmission-magnet-redirect 0.1.2 (petersendev/transmission-magnet-redirect:0.1.2)
|
||||
@@ -1,3 +1,41 @@
|
||||
ARG BUILD_FROM
|
||||
# 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",
|
||||
"version": "0.1.2",
|
||||
"version": "0.2.0",
|
||||
"slug": "transmission-magnet-redirect",
|
||||
"legacy": true,
|
||||
"legacy": false,
|
||||
"maintenance": {
|
||||
"github_release": "https://github.com/petersendev/docker-transmission-magnet-redirect",
|
||||
"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
|
||||
|
||||
- Added transmission environment variables to options validation
|
||||
|
||||
@@ -2,6 +2,17 @@ ARG BUILD_FROM
|
||||
# hadolint ignore=DL3006
|
||||
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 \
|
||||
&& sed -i "s|/config|/config-internal|g" /etc/openvpn/adjustConfigs.sh \
|
||||
&& sed -i "s|/config|/config-internal|g" /etc/openvpn/updateConfigs.sh \
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
{
|
||||
"name": "transmission-openvpn",
|
||||
"version": "0.2.2",
|
||||
"version": "0.3.0",
|
||||
"slug": "transmission-openvpn",
|
||||
"legacy": true,
|
||||
"legacy": false,
|
||||
"maintenance": {
|
||||
"github_release": "https://github.com/haugene/docker-transmission-openvpn",
|
||||
"version_regex": "(\\d+\\.\\d+)",
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
#!/bin/bash
|
||||
#!/usr/bin/bashio
|
||||
|
||||
if [ ! -d /config/transmission-openvpn ]; then
|
||||
echo "Creating /config/transmission-openvpn"
|
||||
@@ -11,4 +11,8 @@ if [ -d /config/transmission-openvpn/openvpn ]; then
|
||||
cp -R /config/transmission-openvpn/openvpn/* /etc/openvpn/
|
||||
fi
|
||||
|
||||
for k in $(bashio::jq "${__BASHIO_ADDON_CONFIG}" 'keys | .[]'); do
|
||||
export $k=$(bashio::config $k)
|
||||
done
|
||||
|
||||
/etc/openvpn/start.sh
|
||||
|
||||
@@ -1,3 +1,7 @@
|
||||
## 0.4.0
|
||||
|
||||
- not a legacy addon anymore
|
||||
|
||||
## 0.3.0
|
||||
|
||||
- Update znc to 1.7.5 (linuxserver/znc:znc-1.7.5-ls23)
|
||||
|
||||
@@ -2,6 +2,22 @@ ARG BUILD_FROM
|
||||
# hadolint ignore=DL3006
|
||||
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
|
||||
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 \
|
||||
|
||||
@@ -1,12 +1,12 @@
|
||||
{
|
||||
"build_from_template": {
|
||||
"image": "linuxserver/znc",
|
||||
"version": "znc-1.7.5-ls23"
|
||||
"version": "znc-1.7.5-ls28"
|
||||
},
|
||||
"build_from": {
|
||||
"armhf": "linuxserver/znc:arm32v7-znc-1.7.5-ls23",
|
||||
"aarch64": "linuxserver/znc:arm64v8-znc-1.7.5-ls23",
|
||||
"amd64": "linuxserver/znc:amd64-znc-1.7.5-ls23"
|
||||
"armhf": "linuxserver/znc:arm32v7-znc-1.7.5-ls28",
|
||||
"aarch64": "linuxserver/znc:arm64v8-znc-1.7.5-ls28",
|
||||
"amd64": "linuxserver/znc:amd64-znc-1.7.5-ls28"
|
||||
},
|
||||
"squash": false,
|
||||
"args": {}
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
{
|
||||
"name": "znc",
|
||||
"version": "0.3.0",
|
||||
"version": "0.4.0",
|
||||
"slug": "znc",
|
||||
"legacy": true,
|
||||
"legacy": false,
|
||||
"maintenance": {
|
||||
"github_release": "https://github.com/linuxserver/docker-znc",
|
||||
"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