Version 3
Support for multiple libraries synchronization (#44, #43, #41) Support for Docker Secrets (#25) Support for Seafile client's version through Docker tags (#9) Mock Seafile server for testings (#6) Revised project layout and workflow (#38, #39) Working Docker Hub description publishing (#10)
This commit is contained in:
@@ -0,0 +1,34 @@
|
||||
#!/bin/bash
|
||||
|
||||
# Docker Seafile client, help you mount a Seafile library as a volume.
|
||||
# Copyright (C) 2019-2020, flow.gunso@gmail.com
|
||||
#
|
||||
# This program is free software: you can redistribute it and/or modify
|
||||
# it under the terms of the GNU General Public License as published by
|
||||
# the Free Software Foundation, either version 3 of the License, or
|
||||
# (at your option) any later version.
|
||||
#
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU General Public License
|
||||
# along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||
|
||||
# Prepare the build arguments
|
||||
build_args=(CREATED=$(date -u +"%Y-%m-%dT%H:%M:%SZ"))
|
||||
[[ "$CI_COMMIT_SHA" ]] && build_args+=(REVISION=$CI_COMMIT_SHA)
|
||||
[[ "$CI_COMMIT_TAG" ]] && build_args+=(VERSION=$CI_COMMIT_TAG)
|
||||
[[ "$TARGET" ]] && build_args+=(TARGET=$TARGET)
|
||||
|
||||
# Build the build argumets string.
|
||||
build_arguments=""
|
||||
for build_arg in "${build_args[@]}"; do
|
||||
build_arguments+="--build-arg $build_arg "
|
||||
done
|
||||
|
||||
docker build \
|
||||
$build_arguments \
|
||||
--tag seafile-client:$TARGET \
|
||||
seafile-client/
|
||||
Executable
+54
@@ -0,0 +1,54 @@
|
||||
# !/usr/bin/env python
|
||||
|
||||
from pathlib import Path
|
||||
import argparse
|
||||
|
||||
from jinja2 import Environment, FileSystemLoader
|
||||
|
||||
|
||||
REPOSITORY_PATH = Path(__file__).parent.parent
|
||||
|
||||
# Argument parsing.
|
||||
parser = argparse.ArgumentParser(prog="Seafile Docker client documentation renderer")
|
||||
parser.add_argument("template", type=str)
|
||||
args = parser.parse_args()
|
||||
|
||||
# Setup Jinja2 templater
|
||||
documentations_path = REPOSITORY_PATH.joinpath("documentations")
|
||||
loader = FileSystemLoader(documentations_path)
|
||||
environment = Environment(loader=loader)
|
||||
template = environment.get_template(args.template)
|
||||
|
||||
|
||||
buffer=[]
|
||||
for path in Path("versions").iterdir():
|
||||
with open(path, "rt") as fo:
|
||||
buffer.append(fo.read().strip())
|
||||
buffer.sort(reverse=True)
|
||||
|
||||
# Prepare the render context.
|
||||
latest = True
|
||||
versions = []
|
||||
for line in buffer:
|
||||
version = line.strip()
|
||||
parts = version.split(".")
|
||||
increments = []
|
||||
blocks = []
|
||||
for part in parts:
|
||||
increments.append(part)
|
||||
section = ".".join(increments)
|
||||
blocks.append(f"`{section}`")
|
||||
if latest:
|
||||
blocks.append("`latest`")
|
||||
latest = False
|
||||
versions.append(blocks)
|
||||
|
||||
# Render
|
||||
content = template.render(versions=versions)
|
||||
#content = template.render() # When version/ is unavailable.
|
||||
filename = Path(args.template).with_suffix("")
|
||||
document = documentations_path.joinpath(filename)
|
||||
|
||||
# Write to file
|
||||
with open(document, mode="w") as fo:
|
||||
fo.write(content)
|
||||
@@ -0,0 +1,19 @@
|
||||
# Get a token from hub.docker.com with the owner credentials.
|
||||
token=$(curl -s \
|
||||
-X POST \
|
||||
-H "Content-Type: application/json" \
|
||||
-d '{"username": "'"$DOCKER_HUB_OWNER_USERNAME"'", "password": "'"$DOCKER_HUB_OWNER_TOKEN"'"}' \
|
||||
https://hub.docker.com/v2/users/login/ | jq -r .token)
|
||||
|
||||
# Generate a JSON with the README.md as the full_description.
|
||||
json=$(jq -n \
|
||||
--arg readme "$(<documentations/docker.md)" \
|
||||
'{"full_description": $readme,"description":"Synchronize a Seafile library. Support password protected librairies and 2FA authentication."}')
|
||||
|
||||
# Update the Docker Hub repository's full_description.
|
||||
curl -siL \
|
||||
-X PATCH \
|
||||
-d "$json" \
|
||||
-H "Content-Type: application/json" \
|
||||
-H "Authorization: JWT $token" \
|
||||
"https://hub.docker.com/v2/repositories/$DOCKER_HUB_IMAGE/"
|
||||
@@ -0,0 +1,56 @@
|
||||
# !/bin/bash
|
||||
|
||||
# Docker Seafile client, help you mount a Seafile library as a volume.
|
||||
# Copyright (C) 2019-2020, flow.gunso@gmail.com
|
||||
#
|
||||
# This program is free software: you can redistribute it and/or modify
|
||||
# it under the terms of the GNU General Public License as published by
|
||||
# the Free Software Foundation, either version 3 of the License, or
|
||||
# (at your option) any later version.
|
||||
#
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU General Public License
|
||||
# along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||
|
||||
|
||||
set -ex
|
||||
|
||||
raise() {
|
||||
echo $1
|
||||
exit 1
|
||||
}
|
||||
|
||||
# Validate the required parameters.
|
||||
# [[ -z "$DOCKER_HUB_BOT_USERNAME" ]] && raise "Missing DOCKER_HUB_BOT_USERNAME envvar."
|
||||
# [[ -z "$DOCKER_HUB_BOT_TOKEN" ]] && raise "Missing DOCKER_HUB_BOT_TOKEN envvar."
|
||||
# [[ -z "$DOCKER_HUB_OWNER_USERNAME" ]] && raise "Missing DOCKER_HUB_OWNER_USERNAME envvar."
|
||||
# [[ -z "$DOCKER_HUB_OWNER_TOKEN" ]] && raise "Missing DOCKER_HUB_OWNER_TOKEN envvar."
|
||||
# [[ -z "$DOCKER_HUB_IMAGE" ]] && raise "Missing DOCKER_HUB_IMAGE envvar"
|
||||
|
||||
# Grab version with the container
|
||||
version="$(docker run --rm seafile-client:$TARGET cat -s /SEAFILE_VERSION)"
|
||||
version="$(echo ${version%-*})"
|
||||
|
||||
# Output the version to an artifact for documentation rendering.
|
||||
mkdir -p versions/
|
||||
echo $version >> "versions/$TARGET"
|
||||
|
||||
# Generate version tags.
|
||||
tags=()
|
||||
#[[ "$TARGET" =~ "unstable" ]] && tags+=("latest")
|
||||
for version_component in $(echo $version | tr '.' '\n'); do
|
||||
tag+="$version_component"
|
||||
tags+=("$tag")
|
||||
tag+="."
|
||||
done
|
||||
|
||||
# Tag then push to the Docker Hub registry.
|
||||
echo $DOCKER_HUB_BOT_TOKEN | docker login --password-stdin --username $DOCKER_HUB_BOT_USERNAME
|
||||
for tag in "${tags[@]}"; do
|
||||
docker tag seafile-client:$TARGET $DOCKER_HUB_IMAGE:$tag
|
||||
docker push $DOCKER_HUB_IMAGE:$tag
|
||||
done
|
||||
Reference in New Issue
Block a user