From eab6a0dd2ea127f8f41a3c4ab6edfb7cb8ce2c02 Mon Sep 17 00:00:00 2001 From: yalh76 Date: Thu, 14 Jul 2022 16:50:49 +0200 Subject: [PATCH 01/11] Apply example_ynh --- check_process | 5 +-- doc/.gitkeep | 0 doc/DESCRIPTION.md | 1 + doc/DESCRIPTION_fr.md | 1 + doc/DISCLAIMER.md | 12 +++++++ doc/DISCLAIMER_fr.md | 13 ++++++++ doc/screenshots/.gitkeep | 0 .../ci-cd-test-deploy-illustration_2x.png | Bin 0 -> 107224 bytes manifest.json | 12 +++++-- scripts/backup | 7 ++-- scripts/install | 14 +++----- scripts/remove | 24 ++++++-------- scripts/restore | 30 ++++++++++-------- scripts/upgrade | 20 ++++++++---- 14 files changed, 85 insertions(+), 54 deletions(-) create mode 100644 doc/.gitkeep create mode 100644 doc/DESCRIPTION.md create mode 100644 doc/DESCRIPTION_fr.md create mode 100644 doc/DISCLAIMER.md create mode 100644 doc/DISCLAIMER_fr.md create mode 100644 doc/screenshots/.gitkeep create mode 100644 doc/screenshots/ci-cd-test-deploy-illustration_2x.png diff --git a/check_process b/check_process index 4bcbf8c..03f10cd 100644 --- a/check_process +++ b/check_process @@ -16,5 +16,6 @@ incorrect_path=0 port_already_use=0 change_url=0 -;;; Levels - Level 5=auto +;;; Options +Email= +Notification=none diff --git a/doc/.gitkeep b/doc/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/doc/DESCRIPTION.md b/doc/DESCRIPTION.md new file mode 100644 index 0000000..aa8b092 --- /dev/null +++ b/doc/DESCRIPTION.md @@ -0,0 +1 @@ +GitLab Runner is a continuous integration tool to use with a GitLab instance (YNH or not). diff --git a/doc/DESCRIPTION_fr.md b/doc/DESCRIPTION_fr.md new file mode 100644 index 0000000..3a39f6a --- /dev/null +++ b/doc/DESCRIPTION_fr.md @@ -0,0 +1 @@ +GitLab Runner est un outil d'intégration continue à utiliser avec une instance GitLab (YNH ou non). diff --git a/doc/DISCLAIMER.md b/doc/DISCLAIMER.md new file mode 100644 index 0000000..4e53c7c --- /dev/null +++ b/doc/DISCLAIMER.md @@ -0,0 +1,12 @@ +## Configuration + +How to configure this app: by the admin panel of GitLab or the settings "CI/CD" of your project. + +### System configuration + +Running a Gitlab Runner mandates to choose [an executor](https://docs.gitlab.com/runner/executors/) at registeration time (when the Gitlab Runner instance registers to a Gitlab instance). For now this YunoHost application only supports the `docker` executor. + +## Additional information + +* To retrieve the information to be provided to the installation such as the `token` or the `gitlab's url` you must go here: `Settings->CI/CD->Runners->"Set up a specific Runner manually"` in the project or admin section of the GitLab instance to link to this runner. +* If you get this message during a job: `Could not resolve host: you.domain.tld`, you can add `dns_search = [“you.domain.tld”]` in the section `[[runners]]` section. diff --git a/doc/DISCLAIMER_fr.md b/doc/DISCLAIMER_fr.md new file mode 100644 index 0000000..e4e9f9d --- /dev/null +++ b/doc/DISCLAIMER_fr.md @@ -0,0 +1,13 @@ +## Configuration + +Comment configurer cette application: via le panneau d'administration de GitLab ou les paramettres "CI/CD" de votre projet. + +### Configuration système + +Lors du premier démarrage d'un Gitlab Runner, [un exécuteur](https://docs.gitlab.com/runner/executors/) doit être choisi (Lorsque l'instance Gitlab Runner s'enregistre auprès d'une instance Gitlab). Pour l'instant, cette application YunoHost ne supporte que l'[exécuteur `docker`](https://docs.gitlab.com/runner/executors/docker.html). + +## Informations additionnelles + +* Pour récupérer les informations à fournir à l'installation comme le `token` ou `l'url gitlab` vous devez vous rendre ici : `Settings->CI/CD->Runners->"Set up a specific Runner manually"` dans le projet +ou la section admin de l'instance GitLab à relier à ce runner. +* Si vous avez ce message pendant un travail : `Could not resolve host : you.domain.tld`, vous pouvez ajouter `dns_search = ["you.domain.tld"]` dans la section `[[runners]]`. diff --git a/doc/screenshots/.gitkeep b/doc/screenshots/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/doc/screenshots/ci-cd-test-deploy-illustration_2x.png b/doc/screenshots/ci-cd-test-deploy-illustration_2x.png new file mode 100644 index 0000000000000000000000000000000000000000..02c7a5f13e5a38438a2a23c0b092882c7bf14b23 GIT binary patch literal 107224 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�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 bfAIu{n#+&e)8pgLgM94i>gTe~DWM4f&VU7K literal 0 HcmV?d00001 diff --git a/manifest.json b/manifest.json index a0fab20..b3bae84 100644 --- a/manifest.json +++ b/manifest.json @@ -6,21 +6,27 @@ "en": "Continuous integration tool to use with a GitLab instance (YNH or not).", "fr": "Outil d'intégration continue à utiliser avec une instance GitLab (YNH ou non)." }, - "version": "15.0.0~ynh1", + "version": "15.0.0~ynh2", "url": "https://gitlab.com/gitlab-org/gitlab-runner", + "upstream": { + "license": "MIT", + "website": "https://gitlab.com/gitlab-org/gitlab-runner", + "admindoc": "https://docs.gitlab.com/runner/", + "code": "https://gitlab.com/gitlab-org/gitlab-runner" + }, "license": "MIT", "maintainer": { "name": "kay0u", "email": "pierre@kayou.io" }, "requirements": { - "yunohost": ">= 4.2.3" + "yunohost": ">= 4.3.0" }, "multi_instance": false, "services": [ ], "arguments": { - "install" : [ + "install": [ { "name": "gitlab_url", "type": "string", diff --git a/scripts/backup b/scripts/backup index 4fbff50..a3993da 100755 --- a/scripts/backup +++ b/scripts/backup @@ -6,7 +6,7 @@ # IMPORT GENERIC HELPERS #================================================= -#Keep this path for calling _common.sh inside the execution's context of backup and restore scripts +# Keep this path for calling _common.sh inside the execution's context of backup and restore scripts source ../settings/scripts/_common.sh source /usr/share/yunohost/helpers @@ -15,7 +15,6 @@ source /usr/share/yunohost/helpers #================================================= ynh_clean_setup () { - ### Remove this function if there's nothing to clean before calling the remove script. true } # Exit if an error occurs during the execution of the script @@ -24,7 +23,7 @@ ynh_abort_if_errors #================================================= # LOAD SETTINGS #================================================= -ynh_print_info "Loading installation settings..." +ynh_print_info --message="Loading installation settings..." app=$YNH_APP_INSTANCE_NAME @@ -38,4 +37,4 @@ app=$YNH_APP_INSTANCE_NAME # END OF SCRIPT #================================================= -ynh_print_info "Backup script completed for $app. (YunoHost will then actually copy those files to the archive)." +ynh_print_info --message="Backup script completed for $app. (YunoHost will then actually copy those files to the archive)." diff --git a/scripts/install b/scripts/install index 100b98c..beb71b6 100755 --- a/scripts/install +++ b/scripts/install @@ -14,7 +14,6 @@ source /usr/share/yunohost/helpers #================================================= ynh_clean_setup () { - ### Remove this function if there's nothing to clean before calling the remove script. true } # Exit if an error occurs during the execution of the script @@ -82,18 +81,12 @@ ynh_app_setting_set --app=$app --key=config_path --value=$config_path #================================================= # STANDARD MODIFICATIONS -#================================================= -# ADD DOCKER REPO -#================================================= -ynh_script_progression --message="Adding a new repo..." - -ynh_install_extra_repo --repo="https://download.docker.com/linux/debian $(lsb_release -cs) stable" --key="https://download.docker.com/linux/debian/gpg" --name="${app}-docker" - #================================================= # INSTALL DEPENDENCIES #================================================= ynh_script_progression --message="Installing dependencies..." +ynh_install_extra_repo --repo="https://download.docker.com/linux/debian $(lsb_release -cs) stable" --key="https://download.docker.com/linux/debian/gpg" --name="${app}-docker" ynh_install_app_dependencies $pkg_dependencies #================================================= @@ -165,8 +158,9 @@ ynh_store_file_checksum "$config_path/config.toml" #================================================= # GENERIC FINALIZATION #================================================= -# ADVERTISE SERVICE IN ADMIN PANEL +# INTEGRATE SERVICE IN YUNOHOST #================================================= +ynh_script_progression --message="Integrating service in YunoHost..." yunohost service add $app @@ -174,4 +168,4 @@ yunohost service add $app # END OF SCRIPT #================================================= -ynh_script_progression --message="Installation of $app completed" --last +ynh_script_progression --message="Installation of $app completed" diff --git a/scripts/remove b/scripts/remove index 1aa0517..ae6771c 100755 --- a/scripts/remove +++ b/scripts/remove @@ -21,13 +21,13 @@ config_path=$(ynh_app_setting_get --app=$app --key=config_path) #================================================= # STANDARD REMOVE #================================================= -# REMOVE SERVICE FROM ADMIN PANEL +# REMOVE SERVICE INTEGRATION IN YUNOHOST #================================================= -# Remove a service from the admin panel, added by `yunohost service add` -if yunohost service status $app >/dev/null 2>&1 +# Remove the service from the list of services known by YunoHost (added from `yunohost service add`) +if ynh_exec_warn_less yunohost service status $app >/dev/null then - ynh_script_progression --message="Removing $app service" + ynh_script_progression --message="Removing $app service integration..." yunohost service remove $app fi @@ -48,27 +48,21 @@ dpkg --remove $app #================================================= # REMOVE DEPENDENCIES #================================================= -ynh_script_progression --message="Removing dependencies" +ynh_script_progression --message="Removing dependencies..." # Remove metapackage and its dependencies ynh_remove_app_dependencies +ynh_remove_extra_repo --name="${app}-docker" #================================================= -# REMOVE APP CONFIG DIR +# REMOVE VARIOUS FILES #================================================= -ynh_script_progression --message="Removing app config directory" +ynh_script_progression --message="Removing various files..." ynh_secure_remove --file="$config_path" -#================================================= -# REMOVE NGINX CONFIGURATION -#================================================= -ynh_script_progression --message="Removing a repo..." - -ynh_remove_extra_repo --name="${app}-docker" - #================================================= # END OF SCRIPT #================================================= -ynh_script_progression --message="Removal of $app completed" --last +ynh_script_progression --message="Removal of $app completed" diff --git a/scripts/restore b/scripts/restore index 4d21a24..dc2c594 100755 --- a/scripts/restore +++ b/scripts/restore @@ -6,7 +6,7 @@ # IMPORT GENERIC HELPERS #================================================= -#Keep this path for calling _common.sh inside the execution's context of backup and restore scripts +# Keep this path for calling _common.sh inside the execution's context of backup and restore scripts source ../settings/scripts/_common.sh source /usr/share/yunohost/helpers @@ -15,7 +15,6 @@ source /usr/share/yunohost/helpers #================================================= ynh_clean_setup () { - #### Remove this function if there's nothing to clean before calling the remove script. true } # Exit if an error occurs during the execution of the script @@ -24,7 +23,7 @@ ynh_abort_if_errors #================================================= # LOAD SETTINGS #================================================= -ynh_script_progression --message="Loading settings..." +ynh_script_progression --message="Loading installation settings..." app=$YNH_APP_INSTANCE_NAME @@ -41,22 +40,17 @@ docker_image=$(ynh_app_setting_get --app=$app --key=docker_image) ynh_script_progression --message="Validating restoration parameters..." test ! -d $config_path \ - || ynh_die "There is already a directory: $config_path " + || ynh_die --message="There is already a directory: $config_path " #================================================= # STANDARD RESTORATION STEPS #================================================= -# ADD DOCKER REPO -#================================================= -ynh_script_progression --message="Restoring the docker repo..." - -ynh_install_extra_repo --repo="https://download.docker.com/linux/debian $(lsb_release -cs) stable" --key="https://download.docker.com/linux/debian/gpg" --name="${app}-docker" - -#================================================= -# INSTALL DEPENDENCIES +# REINSTALL DEPENDENCIES #================================================= ynh_script_progression --message="Reinstalling dependencies..." +# Define and install dependencies +ynh_install_extra_repo --repo="https://download.docker.com/linux/debian $(lsb_release -cs) stable" --key="https://download.docker.com/linux/debian/gpg" --name="${app}-docker" ynh_install_app_dependencies $pkg_dependencies #================================================= @@ -119,13 +113,21 @@ do done #================================================= -# ADVERTISE SERVICE IN ADMIN PANEL +# STORE THE CONFIG FILE CHECKSUM #================================================= +# Calculate and store the config file checksum into the app settings +ynh_store_file_checksum "$config_path/config.toml" + +#================================================= +# INTEGRATE SERVICE IN YUNOHOST +#================================================= +ynh_script_progression --message="Integrating service in YunoHost..." + yunohost service add $app #================================================= # END OF SCRIPT #================================================= -ynh_script_progression --message="Restoration completed for $app" --last +ynh_script_progression --message="Restoration completed for $app" diff --git a/scripts/upgrade b/scripts/upgrade index 4b83a54..020017a 100755 --- a/scripts/upgrade +++ b/scripts/upgrade @@ -19,11 +19,11 @@ app=$YNH_APP_INSTANCE_NAME architecture=$(ynh_app_setting_get --app=$app --key=architecture) #================================================= -# ENSURE DOWNWARD COMPATIBILITY +# CHECK VERSION #================================================= -ynh_script_progression --message="Ensuring downward compatibility..." +ynh_script_progression --message="Checking version..." -# NOTING TO DO HERE YET +upgrade_type=$(ynh_check_app_version_changed) #================================================= # BACKUP BEFORE UPGRADE THEN ACTIVE TRAP @@ -33,7 +33,7 @@ ynh_script_progression --message="Backing up the app before upgrading (may take # Backup the current version of the app ynh_backup_before_upgrade ynh_clean_setup () { - # restore it if the upgrade fails + # Restore it if the upgrade fails ynh_restore_upgradebackup } # Exit if an error occurs during the execution of the script @@ -41,6 +41,13 @@ ynh_abort_if_errors #================================================= # STANDARD UPGRADE STEPS +#================================================= +# ENSURE DOWNWARD COMPATIBILITY +#================================================= +ynh_script_progression --message="Ensuring downward compatibility..." + +# NOTING TO DO HERE YET + #================================================= # DOWNLOAD, CHECK AND UNPACK SOURCE #================================================= @@ -77,8 +84,9 @@ ynh_script_progression --message="Upgrading dependencies..." ynh_install_app_dependencies $pkg_dependencies #================================================= -# ADVERTISE SERVICE IN ADMIN PANEL +# INTEGRATE SERVICE IN YUNOHOST #================================================= +ynh_script_progression --message="Integrating service in YunoHost..." yunohost service add $app @@ -86,4 +94,4 @@ yunohost service add $app # END OF SCRIPT #================================================= -ynh_script_progression --message="Upgrade of $app completed" --last +ynh_script_progression --message="Upgrade of $app completed" From 5edb38ae1e3418d45dffda068bb72164a7992fec Mon Sep 17 00:00:00 2001 From: yalh76 Date: Thu, 14 Jul 2022 18:00:27 +0200 Subject: [PATCH 02/11] Implement auto-updater --- .github/workflows/updater.sh | 145 ++++++++++++++++++++++++++++++ .github/workflows/updater.yml | 49 ++++++++++ conf/amd64.src | 6 ++ conf/arm.src.default | 6 -- conf/armhf.src | 6 ++ conf/i386.src | 6 ++ conf/i386.src.default | 6 -- conf/x86-64.src.default | 6 -- scripts/actions/register | 2 +- scripts/install | 39 +------- scripts/restore | 26 +----- scripts/upgrade | 32 +++---- scripts/upgrade.d/upgrade.last.sh | 9 -- 13 files changed, 231 insertions(+), 107 deletions(-) create mode 100644 .github/workflows/updater.sh create mode 100644 .github/workflows/updater.yml create mode 100644 conf/amd64.src delete mode 100644 conf/arm.src.default create mode 100644 conf/armhf.src create mode 100644 conf/i386.src delete mode 100644 conf/i386.src.default delete mode 100644 conf/x86-64.src.default delete mode 100644 scripts/upgrade.d/upgrade.last.sh diff --git a/.github/workflows/updater.sh b/.github/workflows/updater.sh new file mode 100644 index 0000000..6d8eab8 --- /dev/null +++ b/.github/workflows/updater.sh @@ -0,0 +1,145 @@ +#!/bin/bash + +#================================================= +# PACKAGE UPDATING HELPER +#================================================= + +# This script is meant to be run by GitHub Actions +# The YunoHost-Apps organisation offers a template Action to run this script periodically +# Since each app is different, maintainers can adapt its contents so as to perform +# automatic actions when a new upstream release is detected. + +#================================================= +# FETCHING LATEST RELEASE AND ITS ASSETS +#================================================= + +# Fetching information +current_version=$(cat manifest.json | jq -j '.version|split("~")[0]') +# Some jq magic is needed, because the latest upstream release is not always the latest version (e.g. security patches for older versions) +version=$(curl --silent "https://gitlab.com/api/v4/projects/250833/releases" | jq -r '.[] | select( .prerelease != true ) | .tag_name' | sort -V | tail -1) +assets=($(curl --silent "https://gitlab.com/api/v4/projects/250833/releases" | jq -r '[ .[] | select(.tag_name=="'$version'").assets.links[].direct_asset_url ] | join(" ") | @sh' | tr -d "'")) + +# Later down the script, we assume the version has only digits and dots +# Sometimes the release name starts with a "v", so let's filter it out. +# You may need more tweaks here if the upstream repository has different naming conventions. +if [[ ${version:0:1} == "v" || ${version:0:1} == "V" ]]; then + version=${version:1} +fi + +# Setting up the environment variables +echo "Current version: $current_version" +echo "Latest release from upstream: $version" +echo "VERSION=$version" >> $GITHUB_ENV +# For the time being, let's assume the script will fail +echo "PROCEED=false" >> $GITHUB_ENV + +# Proceed only if the retrieved version is greater than the current one +if ! dpkg --compare-versions "$current_version" "lt" "$version" ; then + echo "::warning ::No new version available" + exit 0 +# Proceed only if a PR for this new version does not already exist +elif git ls-remote -q --exit-code --heads https://github.com/$GITHUB_REPOSITORY.git ci-auto-update-v$version ; then + echo "::warning ::A branch already exists for this update" + exit 0 +fi + +# Each release can hold multiple assets (e.g. binaries for different architectures, source code, etc.) +echo "${#assets[@]} available asset(s)" + +#================================================= +# UPDATE SOURCE FILES +#================================================= + +# Here we use the $assets variable to get the resources published in the upstream release. +# Here is an example for Grav, it has to be adapted in accordance with how the upstream releases look like. + +# Let's loop over the array of assets URLs +for asset_url in ${assets[@]}; do + +echo "Handling asset at $asset_url" + +# Assign the asset to a source file in conf/ directory +# Here we base the source file name upon a unique keyword in the assets url (admin vs. update) +# Leave $src empty to ignore the asset +case $asset_url in + *"arm64.deb"*) + src="arm64" + ;; + *"aarch64.deb"*) + src="aarch64" + ;; + *"armhf.deb"*) + src="armhf" + ;; + *"armel.deb"*) + src="armel" + ;; + *"i386.deb"*) + src="i386" + ;; + *"amd64.deb"*) + src="amd64" + ;; + *) + src="" + ;; +esac + +# If $src is not empty, let's process the asset +if [ ! -z "$src" ]; then + +# Create the temporary directory +tempdir="$(mktemp -d)" + +# Download sources and calculate checksum +filename=${asset_url##*/} +curl --silent -4 -L $asset_url -o "$tempdir/$filename" +checksum=$(sha256sum "$tempdir/$filename" | head -c 64) + +# Delete temporary directory +rm -rf $tempdir + +# Get extension +if [[ $filename == *.tar.gz ]]; then + extension=tar.gz +else + extension=${filename##*.} +fi + +# Rewrite source file +cat < conf/$src.src +SOURCE_URL=$asset_url +SOURCE_SUM=$checksum +SOURCE_SUM_PRG=sha256sum +SOURCE_FORMAT=$extension +SOURCE_IN_SUBDIR=false +SOURCE_FILENAME=gitlab-runner.deb +SOURCE_EXTRACT=false +EOT +echo "... conf/$src.src updated" + +else +echo "... asset ignored" +fi + +done + +#================================================= +# SPECIFIC UPDATE STEPS +#================================================= + +# Any action on the app's source code can be done. +# The GitHub Action workflow takes care of committing all changes after this script ends. + +#================================================= +# GENERIC FINALIZATION +#================================================= + +# Replace new version in manifest +echo "$(jq -s --indent 4 ".[] | .version = \"$version~ynh1\"" manifest.json)" > manifest.json + +# No need to update the README, yunohost-bot takes care of it + +# The Action will proceed only if the PROCEED environment variable is set to true +echo "PROCEED=true" >> $GITHUB_ENV +exit 0 diff --git a/.github/workflows/updater.yml b/.github/workflows/updater.yml new file mode 100644 index 0000000..fb72ba0 --- /dev/null +++ b/.github/workflows/updater.yml @@ -0,0 +1,49 @@ +# This workflow allows GitHub Actions to automagically update your app whenever a new upstream release is detected. +# You need to enable Actions in your repository settings, and fetch this Action from the YunoHost-Apps organization. +# This file should be enough by itself, but feel free to tune it to your needs. +# It calls updater.sh, which is where you should put the app-specific update steps. +name: Check for new upstream releases +on: + # Allow to manually trigger the workflow + workflow_dispatch: + # Run it every day at 6:00 UTC + schedule: + - cron: '0 6 * * *' +jobs: + updater: + runs-on: ubuntu-latest + steps: + - name: Fetch the source code + uses: actions/checkout@v2 + with: + token: ${{ secrets.GITHUB_TOKEN }} + - name: Run the updater script + id: run_updater + run: | + # Setting up Git user + git config --global user.name 'yunohost-bot' + git config --global user.email 'yunohost-bot@users.noreply.github.com' + # Run the updater script + /bin/bash .github/workflows/updater.sh + - name: Commit changes + id: commit + if: ${{ env.PROCEED == 'true' }} + run: | + git commit -am "Upgrade to v$VERSION" + - name: Create Pull Request + id: cpr + if: ${{ env.PROCEED == 'true' }} + uses: peter-evans/create-pull-request@v3 + with: + token: ${{ secrets.GITHUB_TOKEN }} + commit-message: Update to version ${{ env.VERSION }} + committer: 'yunohost-bot ' + author: 'yunohost-bot ' + signoff: false + base: testing + branch: ci-auto-update-v${{ env.VERSION }} + delete-branch: true + title: 'Upgrade to version ${{ env.VERSION }}' + body: | + Upgrade to v${{ env.VERSION }} + draft: false diff --git a/conf/amd64.src b/conf/amd64.src new file mode 100644 index 0000000..9d4132f --- /dev/null +++ b/conf/amd64.src @@ -0,0 +1,6 @@ +SOURCE_URL=https://packages.gitlab.com/runner/gitlab-runner/packages/debian/buster/gitlab-runner_15.0.0_amd64.deb/download.deb +SOURCE_SUM=0cdf0505fe72d46472f685736ace64fc5b5c7181fcb374d77b04e629bb6eeba5 +SOURCE_SUM_PRG=sha256sum +SOURCE_FILENAME=gitlab-runner.deb +SOURCE_EXTRACT=false +SOURCE_FORMAT=deb \ No newline at end of file diff --git a/conf/arm.src.default b/conf/arm.src.default deleted file mode 100644 index 823c11a..0000000 --- a/conf/arm.src.default +++ /dev/null @@ -1,6 +0,0 @@ -SOURCE_URL=https://packages.gitlab.com/runner/gitlab-runner/packages/debian/buster/gitlab-runner___VERSION___armhf.deb/download.deb -SOURCE_SUM=__SHA256_SUM__ -SOURCE_SUM_PRG=sha256sum -SOURCE_FILENAME=__SOURCE_FILENAME__ -SOURCE_EXTRACT=false -SOURCE_FORMAT=deb \ No newline at end of file diff --git a/conf/armhf.src b/conf/armhf.src new file mode 100644 index 0000000..c3df81b --- /dev/null +++ b/conf/armhf.src @@ -0,0 +1,6 @@ +SOURCE_URL=https://packages.gitlab.com/runner/gitlab-runner/packages/debian/buster/gitlab-runner_15.0.0_armhf.deb/download.deb +SOURCE_SUM=042ace4be975ecd916747d32e971c8356de90ef50eb2c75d372c5cd5371e2f74 +SOURCE_SUM_PRG=sha256sum +SOURCE_FILENAME=gitlab-runner.deb +SOURCE_EXTRACT=false +SOURCE_FORMAT=deb \ No newline at end of file diff --git a/conf/i386.src b/conf/i386.src new file mode 100644 index 0000000..1e13153 --- /dev/null +++ b/conf/i386.src @@ -0,0 +1,6 @@ +SOURCE_URL=https://packages.gitlab.com/runner/gitlab-runner/packages/debian/buster/gitlab-runner_15.0.0_i386.deb/download.deb +SOURCE_SUM=35bd675a1285f4ce4cd3c1494b59e0fba596ee395d9cf30c527922d969448263 +SOURCE_SUM_PRG=sha256sum +SOURCE_FILENAME=gitlab-runner.deb +SOURCE_EXTRACT=false +SOURCE_FORMAT=deb \ No newline at end of file diff --git a/conf/i386.src.default b/conf/i386.src.default deleted file mode 100644 index 450e7ec..0000000 --- a/conf/i386.src.default +++ /dev/null @@ -1,6 +0,0 @@ -SOURCE_URL=https://packages.gitlab.com/runner/gitlab-runner/packages/debian/buster/gitlab-runner___VERSION___i386.deb/download.deb -SOURCE_SUM=__SHA256_SUM__ -SOURCE_SUM_PRG=sha256sum -SOURCE_FILENAME=__SOURCE_FILENAME__ -SOURCE_EXTRACT=false -SOURCE_FORMAT=deb \ No newline at end of file diff --git a/conf/x86-64.src.default b/conf/x86-64.src.default deleted file mode 100644 index 8eaa481..0000000 --- a/conf/x86-64.src.default +++ /dev/null @@ -1,6 +0,0 @@ -SOURCE_URL=https://packages.gitlab.com/runner/gitlab-runner/packages/debian/buster/gitlab-runner___VERSION___amd64.deb/download.deb -SOURCE_SUM=__SHA256_SUM__ -SOURCE_SUM_PRG=sha256sum -SOURCE_FILENAME=__SOURCE_FILENAME__ -SOURCE_EXTRACT=false -SOURCE_FORMAT=deb \ No newline at end of file diff --git a/scripts/actions/register b/scripts/actions/register index 57d918d..31360f1 100644 --- a/scripts/actions/register +++ b/scripts/actions/register @@ -89,7 +89,7 @@ do --executor "$executor" \ --docker-image "$docker_img" \ --description "Yunohost runner" \ - --tag-list "$executor,$architecture" \ + --tag-list "$executor,$YNH_ARCH" \ --run-untagged \ --locked="false" diff --git a/scripts/install b/scripts/install index beb71b6..440c8a0 100755 --- a/scripts/install +++ b/scripts/install @@ -37,18 +37,6 @@ ynh_script_progression --message="Validating installation parameters..." config_path=/etc/$app test ! -e "$config_path" || ynh_die "This path already contains a folder" -# Detect the system architecture -if [ -n "$(uname -m | grep 64)" ]; then - architecture="x86-64" -elif [ -n "$(uname -m | grep 86)" ]; then - architecture="i386" -elif [ -n "$(uname -m | grep arm)" ]; then - architecture="arm" -else - ynh_die "Unable to detect your achitecture, please open a bug describing \ - your hardware and the result of the command \"uname -m\"." 1 -fi - # By default, the runner will use docker to run your builds. PR are welcomes to implement more executors executor="docker" @@ -76,7 +64,6 @@ ynh_app_setting_set --app=$app --key=gitlab_url --value=$gitlab_url ynh_app_setting_set --app=$app --key=token --value=$token ynh_app_setting_set --app=$app --key=executor --value=$executor ynh_app_setting_set --app=$app --key=docker_image --value=$docker_image -ynh_app_setting_set --app=$app --key=architecture --value=$architecture ynh_app_setting_set --app=$app --key=config_path --value=$config_path #================================================= @@ -94,28 +81,10 @@ ynh_install_app_dependencies $pkg_dependencies #================================================= ynh_script_progression --message="Setting up source files..." -update_src_version() { - source $YNH_APP_BASEDIR/scripts/upgrade.d/upgrade.last.sh - cp $YNH_APP_BASEDIR/conf/$architecture.src.default $YNH_APP_BASEDIR/conf/$architecture.src - ynh_replace_string --match_string="__VERSION__" --replace_string="$gitlab_runner_version" --target_file="$YNH_APP_BASEDIR/conf/$architecture.src" - ynh_replace_string --match_string="__SOURCE_FILENAME__" --replace_string="$gitlab_runner_filename" --target_file="$YNH_APP_BASEDIR/conf/$architecture.src" - - if [ $architecture = "x86-64" ]; then - ynh_replace_string --match_string="__SHA256_SUM__" --replace_string="$gitlab_runner_x86_64_source_sha256" --target_file="$YNH_APP_BASEDIR/conf/$architecture.src" - elif [ $architecture = "i386" ]; then - ynh_replace_string --match_string="__SHA256_SUM__" --replace_string="$gitlab_runner_i386_source_sha256" --target_file="$YNH_APP_BASEDIR/conf/$architecture.src" - elif [ $architecture = "arm" ]; then - ynh_replace_string --match_string="__SHA256_SUM__" --replace_string="$gitlab_runner_arm_source_sha256" --target_file="$YNH_APP_BASEDIR/conf/$architecture.src" - fi -} - -update_src_version - tempdir="$(mktemp -d)" - -ynh_setup_source --dest_dir=$tempdir --source_id=$architecture - -dpkg -i $tempdir/$gitlab_runner_filename +ynh_setup_source --dest_dir=$tempdir --source_id=$YNH_ARCH +dpkg -i $tempdir/gitlab-runner.deb +ynh_secure_remove --file="$tempdir" #================================================= # SPECIFIC SETUP @@ -143,7 +112,7 @@ do --executor "$executor" \ --docker-image "$docker_img" \ --description "Yunohost runner" \ - --tag-list "$executor,$architecture" \ + --tag-list "$executor,$YNH_ARCH" \ --run-untagged \ --locked="false" done diff --git a/scripts/restore b/scripts/restore index dc2c594..7863f18 100755 --- a/scripts/restore +++ b/scripts/restore @@ -58,28 +58,10 @@ ynh_install_app_dependencies $pkg_dependencies #================================================= ynh_script_progression --message="Reinstalling GitLab Runner..." -update_src_version() { - source $YNH_APP_BASEDIR/scripts/upgrade.d/upgrade.last.sh - cp $YNH_APP_BASEDIR/conf/$architecture.src.default $YNH_APP_BASEDIR/conf/$architecture.src - ynh_replace_string --match_string="__VERSION__" --replace_string="$gitlab_runner_version" --target_file="$YNH_APP_BASEDIR/conf/$architecture.src" - ynh_replace_string --match_string="__SOURCE_FILENAME__" --replace_string="$gitlab_runner_filename" --target_file="$YNH_APP_BASEDIR/conf/$architecture.src" - - if [ $architecture = "x86-64" ]; then - ynh_replace_string --match_string="__SHA256_SUM__" --replace_string="$gitlab_runner_x86_64_source_sha256" --target_file="$YNH_APP_BASEDIR/conf/$architecture.src" - elif [ $architecture = "i386" ]; then - ynh_replace_string --match_string="__SHA256_SUM__" --replace_string="$gitlab_runner_i386_source_sha256" --target_file="$YNH_APP_BASEDIR/conf/$architecture.src" - elif [ $architecture = "arm" ]; then - ynh_replace_string --match_string="__SHA256_SUM__" --replace_string="$gitlab_runner_arm_source_sha256" --target_file="$YNH_APP_BASEDIR/conf/$architecture.src" - fi -} - -update_src_version - tempdir="$(mktemp -d)" - -ynh_setup_source --dest_dir=$tempdir --source_id=$architecture - -dpkg -i $tempdir/$gitlab_runner_filename +ynh_setup_source --dest_dir=$tempdir --source_id=$YNH_ARCH +dpkg -i $tempdir/gitlab-runner.deb +ynh_secure_remove --file="$tempdir" #================================================= # SPECIFIC SETUP @@ -107,7 +89,7 @@ do --executor "$executor" \ --docker-image "$docker_img" \ --description "Yunohost runner" \ - --tag-list "$executor,$architecture" \ + --tag-list "$executor,$YNH_ARCH" \ --run-untagged \ --locked="false" done diff --git a/scripts/upgrade b/scripts/upgrade index 020017a..951b92c 100755 --- a/scripts/upgrade +++ b/scripts/upgrade @@ -46,41 +46,29 @@ ynh_abort_if_errors #================================================= ynh_script_progression --message="Ensuring downward compatibility..." -# NOTING TO DO HERE YET +ynh_app_setting_delete --app=$app --key=architecture #================================================= # DOWNLOAD, CHECK AND UNPACK SOURCE #================================================= ynh_script_progression --message="Upgrading source files..." -update_src_version() { - source $YNH_APP_BASEDIR/scripts/upgrade.d/upgrade.last.sh - cp $YNH_APP_BASEDIR/conf/$architecture.src.default $YNH_APP_BASEDIR/conf/$architecture.src - ynh_replace_string --match_string="__VERSION__" --replace_string="$gitlab_runner_version" --target_file="$YNH_APP_BASEDIR/conf/$architecture.src" - ynh_replace_string --match_string="__SOURCE_FILENAME__" --replace_string="$gitlab_runner_filename" --target_file="$YNH_APP_BASEDIR/conf/$architecture.src" +if [ "$upgrade_type" == "UPGRADE_APP" ] +then + ynh_script_progression --message="Upgrading source files..." - if [ $architecture = "x86-64" ]; then - ynh_replace_string --match_string="__SHA256_SUM__" --replace_string="$gitlab_runner_x86_64_source_sha256" --target_file="$YNH_APP_BASEDIR/conf/$architecture.src" - elif [ $architecture = "i386" ]; then - ynh_replace_string --match_string="__SHA256_SUM__" --replace_string="$gitlab_runner_i386_source_sha256" --target_file="$YNH_APP_BASEDIR/conf/$architecture.src" - elif [ $architecture = "arm" ]; then - ynh_replace_string --match_string="__SHA256_SUM__" --replace_string="$gitlab_runner_arm_source_sha256" --target_file="$YNH_APP_BASEDIR/conf/$architecture.src" - fi -} - -update_src_version - -tempdir="$(mktemp -d)" - -ynh_setup_source --dest_dir=$tempdir --source_id=$architecture - -dpkg -i $tempdir/$gitlab_runner_filename + tempdir="$(mktemp -d)" + ynh_setup_source --dest_dir=$tempdir --source_id=$YNH_ARCH + dpkg -i $tempdir/gitlab-runner.deb + ynh_secure_remove --file="$tempdir" +fi #================================================= # UPGRADE DEPENDENCIES #================================================= ynh_script_progression --message="Upgrading dependencies..." +ynh_install_extra_repo --repo="https://download.docker.com/linux/debian $(lsb_release -cs) stable" --key="https://download.docker.com/linux/debian/gpg" --name="${app}-docker" ynh_install_app_dependencies $pkg_dependencies #================================================= diff --git a/scripts/upgrade.d/upgrade.last.sh b/scripts/upgrade.d/upgrade.last.sh deleted file mode 100644 index dc82287..0000000 --- a/scripts/upgrade.d/upgrade.last.sh +++ /dev/null @@ -1,9 +0,0 @@ -gitlab_runner_version="15.0.0" - -gitlab_runner_x86_64_source_sha256="0cdf0505fe72d46472f685736ace64fc5b5c7181fcb374d77b04e629bb6eeba5" - -gitlab_runner_i386_source_sha256="35bd675a1285f4ce4cd3c1494b59e0fba596ee395d9cf30c527922d969448263" - -gitlab_runner_arm_source_sha256="042ace4be975ecd916747d32e971c8356de90ef50eb2c75d372c5cd5371e2f74" - -gitlab_runner_filename="gitlab-runner-${gitlab_runner_version}.deb" From ce373fdc5cf1af707ddfa6b339f30320110532f8 Mon Sep 17 00:00:00 2001 From: yunohost-bot Date: Thu, 14 Jul 2022 16:00:33 +0000 Subject: [PATCH 03/11] Auto-update README --- README.md | 53 ++++++++++++++++++++++++++-------------------------- README_fr.md | 52 +++++++++++++++++++++++++-------------------------- 2 files changed, 53 insertions(+), 52 deletions(-) diff --git a/README.md b/README.md index 2a8be19..a47aaa2 100644 --- a/README.md +++ b/README.md @@ -1,21 +1,30 @@ + + # GitLab Runner for YunoHost -[![Integration level](https://dash.yunohost.org/integration/gitlab-runner.svg)](https://dash.yunohost.org/appci/app/gitlab-runner) ![](https://ci-apps.yunohost.org/ci/badges/gitlab-runner.status.svg) ![](https://ci-apps.yunohost.org/ci/badges/gitlab-runner.maintain.svg) -[![Install GitLab Runner with YunoHost](https://install-app.yunohost.org/install-with-yunohost.png)](https://install-app.yunohost.org/?app=gitlab-runner) +[![Integration level](https://dash.yunohost.org/integration/gitlab-runner.svg)](https://dash.yunohost.org/appci/app/gitlab-runner) ![Working status](https://ci-apps.yunohost.org/ci/badges/gitlab-runner.status.svg) ![Maintenance status](https://ci-apps.yunohost.org/ci/badges/gitlab-runner.maintain.svg) +[![Install GitLab Runner with YunoHost](https://install-app.yunohost.org/install-with-yunohost.svg)](https://install-app.yunohost.org/?app=gitlab-runner) *[Lire ce readme en français.](./README_fr.md)* -> *This package allow you to install GitLab Runner quickly and simply on a YunoHost server. -If you don't have YunoHost, please see [here](https://yunohost.org/#/install) to know how to install and enjoy it.* +> *This package allows you to install GitLab Runner quickly and simply on a YunoHost server. +If you don't have YunoHost, please consult [the guide](https://yunohost.org/#/install) to learn how to install it.* ## Overview + GitLab Runner is a continuous integration tool to use with a GitLab instance (YNH or not). -**Shipped version:** 15.0.0 + +**Shipped version:** 15.0.0~ynh2 ## Screenshots -![](https://about.gitlab.com/images/ci/ci-cd-test-deploy-illustration_2x.png) +![Screenshot of GitLab Runner](./doc/screenshots/ci-cd-test-deploy-illustration_2x.png) + +## Disclaimers / important information ## Configuration @@ -25,37 +34,29 @@ How to configure this app: by the admin panel of GitLab or the settings "CI/CD" Running a Gitlab Runner mandates to choose [an executor](https://docs.gitlab.com/runner/executors/) at registeration time (when the Gitlab Runner instance registers to a Gitlab instance). For now this YunoHost application only supports the `docker` executor. -## Documentation - - * Official documentation: https://docs.gitlab.com/runner/ - -## YunoHost specific features - -#### Supported architectures - -* x86-64 - [![Build Status](https://ci-apps.yunohost.org/ci/logs/gitlab-runner%20%28Apps%29.svg)](https://ci-apps.yunohost.org/ci/apps/gitlab-runner/) -* ARMv8-A - [![Build Status](https://ci-apps-arm.yunohost.org/ci/logs/gitlab-runner%20%28Apps%29.svg)](https://ci-apps-arm.yunohost.org/ci/apps/gitlab-runner/) - ## Additional information * To retrieve the information to be provided to the installation such as the `token` or the `gitlab's url` you must go here: `Settings->CI/CD->Runners->"Set up a specific Runner manually"` in the project or admin section of the GitLab instance to link to this runner. * If you get this message during a job: `Could not resolve host: you.domain.tld`, you can add `dns_search = [“you.domain.tld”]` in the section `[[runners]]` section. -## Links +## Documentation and resources - * Report a bug: https://github.com/YunoHost-Apps/gitlab-runner_ynh/issues - * App website: https://about.gitlab.com/product/continuous-integration/ - * YunoHost website: https://yunohost.org/ ---- +* Official app website: +* Official admin documentation: +* Upstream app code repository: +* YunoHost documentation for this app: +* Report a bug: -Developers info ----------------- +## Developer info -Please do your pull request to the [testing branch](https://github.com/YunoHost-Apps/gitlab-runner_ynh/tree/testing). +Please send your pull request to the [testing branch](https://github.com/YunoHost-Apps/gitlab-runner_ynh/tree/testing). To try the testing branch, please proceed like that. -``` + +``` bash sudo yunohost app install https://github.com/YunoHost-Apps/gitlab-runner_ynh/tree/testing --debug or sudo yunohost app upgrade gitlab-runner -u https://github.com/YunoHost-Apps/gitlab-runner_ynh/tree/testing --debug ``` + +**More info regarding app packaging:** diff --git a/README_fr.md b/README_fr.md index c6d8991..f6f0a04 100644 --- a/README_fr.md +++ b/README_fr.md @@ -1,21 +1,30 @@ + + # GitLab Runner pour YunoHost -[![Integration level](https://dash.yunohost.org/integration/gitlab-runner.svg)](https://dash.yunohost.org/appci/app/gitlab-runner) ![](https://ci-apps.yunohost.org/ci/badges/gitlab-runner.status.svg) ![](https://ci-apps.yunohost.org/ci/badges/gitlab-runner.maintain.svg) -[![Installer GitLab Runner avec YunoHost](https://install-app.yunohost.org/install-with-yunohost.png)](https://install-app.yunohost.org/?app=gitlab-runner) +[![Niveau d'intégration](https://dash.yunohost.org/integration/gitlab-runner.svg)](https://dash.yunohost.org/appci/app/gitlab-runner) ![Statut du fonctionnement](https://ci-apps.yunohost.org/ci/badges/gitlab-runner.status.svg) ![Statut de maintenance](https://ci-apps.yunohost.org/ci/badges/gitlab-runner.maintain.svg) +[![Installer GitLab Runner avec YunoHost](https://install-app.yunohost.org/install-with-yunohost.svg)](https://install-app.yunohost.org/?app=gitlab-runner) -*[Read this readme in english.](./README.md)* +*[Read this readme in english.](./README.md)* -> *Ce package vous permet d'installer GitLab Runner rapidement et simplement sur un serveur YunoHost. +> *Ce package vous permet d'installer GitLab Runner rapidement et simplement sur un serveur YunoHost. Si vous n'avez pas YunoHost, regardez [ici](https://yunohost.org/#/install) pour savoir comment l'installer et en profiter.* ## Vue d'ensemble + GitLab Runner est un outil d'intégration continue à utiliser avec une instance GitLab (YNH ou non). -**Version incluse:** 15.0.0 + +**Version incluse :** 15.0.0~ynh2 ## Captures d'écran -![](https://about.gitlab.com/images/ci/ci-cd-test-deploy-illustration_2x.png) +![Capture d'écran de GitLab Runner](./doc/screenshots/ci-cd-test-deploy-illustration_2x.png) + +## Avertissements / informations importantes ## Configuration @@ -25,39 +34,30 @@ Comment configurer cette application: via le panneau d'administration de GitLab Lors du premier démarrage d'un Gitlab Runner, [un exécuteur](https://docs.gitlab.com/runner/executors/) doit être choisi (Lorsque l'instance Gitlab Runner s'enregistre auprès d'une instance Gitlab). Pour l'instant, cette application YunoHost ne supporte que l'[exécuteur `docker`](https://docs.gitlab.com/runner/executors/docker.html). -## Documentation - - * Documentation officielle : https://docs.gitlab.com/runner/ - -## Caractéristiques spécifiques YunoHost - -#### Supported architectures - -* x86-64 - [![Build Status](https://ci-apps.yunohost.org/ci/logs/gitlab-runner%20%28Apps%29.svg)](https://ci-apps.yunohost.org/ci/apps/gitlab-runner/) -* ARMv8-A - [![Build Status](https://ci-apps-arm.yunohost.org/ci/logs/gitlab-runner%20%28Apps%29.svg)](https://ci-apps-arm.yunohost.org/ci/apps/gitlab-runner/) - ## Informations additionnelles * Pour récupérer les informations à fournir à l'installation comme le `token` ou `l'url gitlab` vous devez vous rendre ici : `Settings->CI/CD->Runners->"Set up a specific Runner manually"` dans le projet ou la section admin de l'instance GitLab à relier à ce runner. * Si vous avez ce message pendant un travail : `Could not resolve host : you.domain.tld`, vous pouvez ajouter `dns_search = ["you.domain.tld"]` dans la section `[[runners]]`. -## Links +## Documentations et ressources - * Signaler un bug : https://github.com/YunoHost-Apps/gitlab-runner_ynh/issues - * Site de l'application : https://about.gitlab.com/product/continuous-integration/ - * Site web YunoHost : https://yunohost.org/ +* Site officiel de l'app : +* Documentation officielle de l'admin : +* Dépôt de code officiel de l'app : +* Documentation YunoHost pour cette app : +* Signaler un bug : ---- - -Informations pour les développeurs ----------------- +## Informations pour les développeurs Merci de faire vos pull request sur la [branche testing](https://github.com/YunoHost-Apps/gitlab-runner_ynh/tree/testing). Pour essayer la branche testing, procédez comme suit. -``` + +``` bash sudo yunohost app install https://github.com/YunoHost-Apps/gitlab-runner_ynh/tree/testing --debug ou sudo yunohost app upgrade gitlab-runner -u https://github.com/YunoHost-Apps/gitlab-runner_ynh/tree/testing --debug ``` + +**Plus d'infos sur le packaging d'applications :** From bf8ea9ee9b065478cef73f87700126845c562e33 Mon Sep 17 00:00:00 2001 From: yunohost-bot Date: Thu, 14 Jul 2022 16:00:39 +0000 Subject: [PATCH 04/11] Auto-update README --- README.md | 53 ++++++++++++++++++++++++++-------------------------- README_fr.md | 52 +++++++++++++++++++++++++-------------------------- 2 files changed, 53 insertions(+), 52 deletions(-) diff --git a/README.md b/README.md index 2a8be19..a47aaa2 100644 --- a/README.md +++ b/README.md @@ -1,21 +1,30 @@ + + # GitLab Runner for YunoHost -[![Integration level](https://dash.yunohost.org/integration/gitlab-runner.svg)](https://dash.yunohost.org/appci/app/gitlab-runner) ![](https://ci-apps.yunohost.org/ci/badges/gitlab-runner.status.svg) ![](https://ci-apps.yunohost.org/ci/badges/gitlab-runner.maintain.svg) -[![Install GitLab Runner with YunoHost](https://install-app.yunohost.org/install-with-yunohost.png)](https://install-app.yunohost.org/?app=gitlab-runner) +[![Integration level](https://dash.yunohost.org/integration/gitlab-runner.svg)](https://dash.yunohost.org/appci/app/gitlab-runner) ![Working status](https://ci-apps.yunohost.org/ci/badges/gitlab-runner.status.svg) ![Maintenance status](https://ci-apps.yunohost.org/ci/badges/gitlab-runner.maintain.svg) +[![Install GitLab Runner with YunoHost](https://install-app.yunohost.org/install-with-yunohost.svg)](https://install-app.yunohost.org/?app=gitlab-runner) *[Lire ce readme en français.](./README_fr.md)* -> *This package allow you to install GitLab Runner quickly and simply on a YunoHost server. -If you don't have YunoHost, please see [here](https://yunohost.org/#/install) to know how to install and enjoy it.* +> *This package allows you to install GitLab Runner quickly and simply on a YunoHost server. +If you don't have YunoHost, please consult [the guide](https://yunohost.org/#/install) to learn how to install it.* ## Overview + GitLab Runner is a continuous integration tool to use with a GitLab instance (YNH or not). -**Shipped version:** 15.0.0 + +**Shipped version:** 15.0.0~ynh2 ## Screenshots -![](https://about.gitlab.com/images/ci/ci-cd-test-deploy-illustration_2x.png) +![Screenshot of GitLab Runner](./doc/screenshots/ci-cd-test-deploy-illustration_2x.png) + +## Disclaimers / important information ## Configuration @@ -25,37 +34,29 @@ How to configure this app: by the admin panel of GitLab or the settings "CI/CD" Running a Gitlab Runner mandates to choose [an executor](https://docs.gitlab.com/runner/executors/) at registeration time (when the Gitlab Runner instance registers to a Gitlab instance). For now this YunoHost application only supports the `docker` executor. -## Documentation - - * Official documentation: https://docs.gitlab.com/runner/ - -## YunoHost specific features - -#### Supported architectures - -* x86-64 - [![Build Status](https://ci-apps.yunohost.org/ci/logs/gitlab-runner%20%28Apps%29.svg)](https://ci-apps.yunohost.org/ci/apps/gitlab-runner/) -* ARMv8-A - [![Build Status](https://ci-apps-arm.yunohost.org/ci/logs/gitlab-runner%20%28Apps%29.svg)](https://ci-apps-arm.yunohost.org/ci/apps/gitlab-runner/) - ## Additional information * To retrieve the information to be provided to the installation such as the `token` or the `gitlab's url` you must go here: `Settings->CI/CD->Runners->"Set up a specific Runner manually"` in the project or admin section of the GitLab instance to link to this runner. * If you get this message during a job: `Could not resolve host: you.domain.tld`, you can add `dns_search = [“you.domain.tld”]` in the section `[[runners]]` section. -## Links +## Documentation and resources - * Report a bug: https://github.com/YunoHost-Apps/gitlab-runner_ynh/issues - * App website: https://about.gitlab.com/product/continuous-integration/ - * YunoHost website: https://yunohost.org/ ---- +* Official app website: +* Official admin documentation: +* Upstream app code repository: +* YunoHost documentation for this app: +* Report a bug: -Developers info ----------------- +## Developer info -Please do your pull request to the [testing branch](https://github.com/YunoHost-Apps/gitlab-runner_ynh/tree/testing). +Please send your pull request to the [testing branch](https://github.com/YunoHost-Apps/gitlab-runner_ynh/tree/testing). To try the testing branch, please proceed like that. -``` + +``` bash sudo yunohost app install https://github.com/YunoHost-Apps/gitlab-runner_ynh/tree/testing --debug or sudo yunohost app upgrade gitlab-runner -u https://github.com/YunoHost-Apps/gitlab-runner_ynh/tree/testing --debug ``` + +**More info regarding app packaging:** diff --git a/README_fr.md b/README_fr.md index c6d8991..f6f0a04 100644 --- a/README_fr.md +++ b/README_fr.md @@ -1,21 +1,30 @@ + + # GitLab Runner pour YunoHost -[![Integration level](https://dash.yunohost.org/integration/gitlab-runner.svg)](https://dash.yunohost.org/appci/app/gitlab-runner) ![](https://ci-apps.yunohost.org/ci/badges/gitlab-runner.status.svg) ![](https://ci-apps.yunohost.org/ci/badges/gitlab-runner.maintain.svg) -[![Installer GitLab Runner avec YunoHost](https://install-app.yunohost.org/install-with-yunohost.png)](https://install-app.yunohost.org/?app=gitlab-runner) +[![Niveau d'intégration](https://dash.yunohost.org/integration/gitlab-runner.svg)](https://dash.yunohost.org/appci/app/gitlab-runner) ![Statut du fonctionnement](https://ci-apps.yunohost.org/ci/badges/gitlab-runner.status.svg) ![Statut de maintenance](https://ci-apps.yunohost.org/ci/badges/gitlab-runner.maintain.svg) +[![Installer GitLab Runner avec YunoHost](https://install-app.yunohost.org/install-with-yunohost.svg)](https://install-app.yunohost.org/?app=gitlab-runner) -*[Read this readme in english.](./README.md)* +*[Read this readme in english.](./README.md)* -> *Ce package vous permet d'installer GitLab Runner rapidement et simplement sur un serveur YunoHost. +> *Ce package vous permet d'installer GitLab Runner rapidement et simplement sur un serveur YunoHost. Si vous n'avez pas YunoHost, regardez [ici](https://yunohost.org/#/install) pour savoir comment l'installer et en profiter.* ## Vue d'ensemble + GitLab Runner est un outil d'intégration continue à utiliser avec une instance GitLab (YNH ou non). -**Version incluse:** 15.0.0 + +**Version incluse :** 15.0.0~ynh2 ## Captures d'écran -![](https://about.gitlab.com/images/ci/ci-cd-test-deploy-illustration_2x.png) +![Capture d'écran de GitLab Runner](./doc/screenshots/ci-cd-test-deploy-illustration_2x.png) + +## Avertissements / informations importantes ## Configuration @@ -25,39 +34,30 @@ Comment configurer cette application: via le panneau d'administration de GitLab Lors du premier démarrage d'un Gitlab Runner, [un exécuteur](https://docs.gitlab.com/runner/executors/) doit être choisi (Lorsque l'instance Gitlab Runner s'enregistre auprès d'une instance Gitlab). Pour l'instant, cette application YunoHost ne supporte que l'[exécuteur `docker`](https://docs.gitlab.com/runner/executors/docker.html). -## Documentation - - * Documentation officielle : https://docs.gitlab.com/runner/ - -## Caractéristiques spécifiques YunoHost - -#### Supported architectures - -* x86-64 - [![Build Status](https://ci-apps.yunohost.org/ci/logs/gitlab-runner%20%28Apps%29.svg)](https://ci-apps.yunohost.org/ci/apps/gitlab-runner/) -* ARMv8-A - [![Build Status](https://ci-apps-arm.yunohost.org/ci/logs/gitlab-runner%20%28Apps%29.svg)](https://ci-apps-arm.yunohost.org/ci/apps/gitlab-runner/) - ## Informations additionnelles * Pour récupérer les informations à fournir à l'installation comme le `token` ou `l'url gitlab` vous devez vous rendre ici : `Settings->CI/CD->Runners->"Set up a specific Runner manually"` dans le projet ou la section admin de l'instance GitLab à relier à ce runner. * Si vous avez ce message pendant un travail : `Could not resolve host : you.domain.tld`, vous pouvez ajouter `dns_search = ["you.domain.tld"]` dans la section `[[runners]]`. -## Links +## Documentations et ressources - * Signaler un bug : https://github.com/YunoHost-Apps/gitlab-runner_ynh/issues - * Site de l'application : https://about.gitlab.com/product/continuous-integration/ - * Site web YunoHost : https://yunohost.org/ +* Site officiel de l'app : +* Documentation officielle de l'admin : +* Dépôt de code officiel de l'app : +* Documentation YunoHost pour cette app : +* Signaler un bug : ---- - -Informations pour les développeurs ----------------- +## Informations pour les développeurs Merci de faire vos pull request sur la [branche testing](https://github.com/YunoHost-Apps/gitlab-runner_ynh/tree/testing). Pour essayer la branche testing, procédez comme suit. -``` + +``` bash sudo yunohost app install https://github.com/YunoHost-Apps/gitlab-runner_ynh/tree/testing --debug ou sudo yunohost app upgrade gitlab-runner -u https://github.com/YunoHost-Apps/gitlab-runner_ynh/tree/testing --debug ``` + +**Plus d'infos sur le packaging d'applications :** From 990be31467d8a47d403a773273d5398466e72a06 Mon Sep 17 00:00:00 2001 From: Kayou Date: Fri, 5 Aug 2022 11:33:02 +0200 Subject: [PATCH 05/11] Update scripts/install --- scripts/install | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/install b/scripts/install index 440c8a0..c4d2ff8 100755 --- a/scripts/install +++ b/scripts/install @@ -137,4 +137,4 @@ yunohost service add $app # END OF SCRIPT #================================================= -ynh_script_progression --message="Installation of $app completed" +ynh_script_progression --message="Installation of $app completed" --last From 720b3ff1d129dc3a431e564effe2e1ec15bd3edb Mon Sep 17 00:00:00 2001 From: Kayou Date: Fri, 5 Aug 2022 11:33:08 +0200 Subject: [PATCH 06/11] Update scripts/remove --- scripts/remove | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/remove b/scripts/remove index ae6771c..237ed15 100755 --- a/scripts/remove +++ b/scripts/remove @@ -65,4 +65,4 @@ ynh_secure_remove --file="$config_path" # END OF SCRIPT #================================================= -ynh_script_progression --message="Removal of $app completed" +ynh_script_progression --message="Removal of $app completed" --last From 68fbb752daf6706d9109a6d73c12db9c7c8d9809 Mon Sep 17 00:00:00 2001 From: Kayou Date: Fri, 5 Aug 2022 11:33:34 +0200 Subject: [PATCH 07/11] Apply suggestions from code review --- scripts/restore | 2 +- scripts/upgrade | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/scripts/restore b/scripts/restore index 7863f18..ff1a674 100755 --- a/scripts/restore +++ b/scripts/restore @@ -112,4 +112,4 @@ yunohost service add $app # END OF SCRIPT #================================================= -ynh_script_progression --message="Restoration completed for $app" +ynh_script_progression --message="Restoration completed for $app" --last diff --git a/scripts/upgrade b/scripts/upgrade index 951b92c..2126e83 100755 --- a/scripts/upgrade +++ b/scripts/upgrade @@ -82,4 +82,4 @@ yunohost service add $app # END OF SCRIPT #================================================= -ynh_script_progression --message="Upgrade of $app completed" +ynh_script_progression --message="Upgrade of $app completed" --last From 591984c609eb91102ff0db42e2d7fbe619559340 Mon Sep 17 00:00:00 2001 From: yunohost-bot Date: Fri, 5 Aug 2022 09:36:27 +0000 Subject: [PATCH 08/11] Upgrade to v15.2.1 --- conf/amd64.src | 7 ++++--- conf/armhf.src | 7 ++++--- conf/i386.src | 7 ++++--- manifest.json | 5 ++--- 4 files changed, 14 insertions(+), 12 deletions(-) diff --git a/conf/amd64.src b/conf/amd64.src index 9d4132f..834b11e 100644 --- a/conf/amd64.src +++ b/conf/amd64.src @@ -1,6 +1,7 @@ -SOURCE_URL=https://packages.gitlab.com/runner/gitlab-runner/packages/debian/buster/gitlab-runner_15.0.0_amd64.deb/download.deb -SOURCE_SUM=0cdf0505fe72d46472f685736ace64fc5b5c7181fcb374d77b04e629bb6eeba5 +SOURCE_URL=https://gitlab.com/gitlab-org/gitlab-runner/-/releases/v15.2.1/downloads/packages/deb/gitlab-runner_amd64.deb +SOURCE_SUM=aaf9494673752d016a3488403ae5ac68b81d96a24358469de8352d68b70e2ac8 SOURCE_SUM_PRG=sha256sum +SOURCE_FORMAT=deb +SOURCE_IN_SUBDIR=false SOURCE_FILENAME=gitlab-runner.deb SOURCE_EXTRACT=false -SOURCE_FORMAT=deb \ No newline at end of file diff --git a/conf/armhf.src b/conf/armhf.src index c3df81b..66c4454 100644 --- a/conf/armhf.src +++ b/conf/armhf.src @@ -1,6 +1,7 @@ -SOURCE_URL=https://packages.gitlab.com/runner/gitlab-runner/packages/debian/buster/gitlab-runner_15.0.0_armhf.deb/download.deb -SOURCE_SUM=042ace4be975ecd916747d32e971c8356de90ef50eb2c75d372c5cd5371e2f74 +SOURCE_URL=https://gitlab.com/gitlab-org/gitlab-runner/-/releases/v15.2.1/downloads/packages/deb/gitlab-runner_armhf.deb +SOURCE_SUM=4d679120b7eef8ed5e497a93a90663b69beb6719709269366d3c6760a1e34cec SOURCE_SUM_PRG=sha256sum +SOURCE_FORMAT=deb +SOURCE_IN_SUBDIR=false SOURCE_FILENAME=gitlab-runner.deb SOURCE_EXTRACT=false -SOURCE_FORMAT=deb \ No newline at end of file diff --git a/conf/i386.src b/conf/i386.src index 1e13153..b04e8dc 100644 --- a/conf/i386.src +++ b/conf/i386.src @@ -1,6 +1,7 @@ -SOURCE_URL=https://packages.gitlab.com/runner/gitlab-runner/packages/debian/buster/gitlab-runner_15.0.0_i386.deb/download.deb -SOURCE_SUM=35bd675a1285f4ce4cd3c1494b59e0fba596ee395d9cf30c527922d969448263 +SOURCE_URL=https://gitlab.com/gitlab-org/gitlab-runner/-/releases/v15.2.1/downloads/packages/deb/gitlab-runner_i386.deb +SOURCE_SUM=a95a97cc2330ecad7106c9a89536f478d32602fc0e7a8d7a8dca8b281883b4db SOURCE_SUM_PRG=sha256sum +SOURCE_FORMAT=deb +SOURCE_IN_SUBDIR=false SOURCE_FILENAME=gitlab-runner.deb SOURCE_EXTRACT=false -SOURCE_FORMAT=deb \ No newline at end of file diff --git a/manifest.json b/manifest.json index b3bae84..a438a79 100644 --- a/manifest.json +++ b/manifest.json @@ -6,7 +6,7 @@ "en": "Continuous integration tool to use with a GitLab instance (YNH or not).", "fr": "Outil d'intégration continue à utiliser avec une instance GitLab (YNH ou non)." }, - "version": "15.0.0~ynh2", + "version": "15.2.1~ynh1", "url": "https://gitlab.com/gitlab-org/gitlab-runner", "upstream": { "license": "MIT", @@ -23,8 +23,7 @@ "yunohost": ">= 4.3.0" }, "multi_instance": false, - "services": [ - ], + "services": [], "arguments": { "install": [ { From b99e48a9c5358ebd83e9182d52325d3aa6d1cf8b Mon Sep 17 00:00:00 2001 From: yunohost-bot Date: Fri, 5 Aug 2022 09:36:28 +0000 Subject: [PATCH 09/11] Update to version 15.2.1 --- conf/aarch64.src | 7 +++++++ conf/arm64.src | 7 +++++++ conf/armel.src | 7 +++++++ 3 files changed, 21 insertions(+) create mode 100644 conf/aarch64.src create mode 100644 conf/arm64.src create mode 100644 conf/armel.src diff --git a/conf/aarch64.src b/conf/aarch64.src new file mode 100644 index 0000000..033e057 --- /dev/null +++ b/conf/aarch64.src @@ -0,0 +1,7 @@ +SOURCE_URL=https://gitlab.com/gitlab-org/gitlab-runner/-/releases/v15.2.1/downloads/packages/deb/gitlab-runner_aarch64.deb +SOURCE_SUM=9d6c96321a89f4ccadcbe732391b8d354db7f828f8737f7f3a6c73fbedad75cd +SOURCE_SUM_PRG=sha256sum +SOURCE_FORMAT=deb +SOURCE_IN_SUBDIR=false +SOURCE_FILENAME=gitlab-runner.deb +SOURCE_EXTRACT=false diff --git a/conf/arm64.src b/conf/arm64.src new file mode 100644 index 0000000..6f3509a --- /dev/null +++ b/conf/arm64.src @@ -0,0 +1,7 @@ +SOURCE_URL=https://gitlab.com/gitlab-org/gitlab-runner/-/releases/v15.2.1/downloads/packages/deb/gitlab-runner_arm64.deb +SOURCE_SUM=770e52c3dad09b2db7d2fa66c5a7cc2548268b903e666e0266a359110868b9e0 +SOURCE_SUM_PRG=sha256sum +SOURCE_FORMAT=deb +SOURCE_IN_SUBDIR=false +SOURCE_FILENAME=gitlab-runner.deb +SOURCE_EXTRACT=false diff --git a/conf/armel.src b/conf/armel.src new file mode 100644 index 0000000..9df7e0e --- /dev/null +++ b/conf/armel.src @@ -0,0 +1,7 @@ +SOURCE_URL=https://gitlab.com/gitlab-org/gitlab-runner/-/releases/v15.2.1/downloads/packages/deb/gitlab-runner_armel.deb +SOURCE_SUM=7f80311a922ea0989cdcd431712a1fff1ecb65ef01a2792c9f0890d7dd1081d3 +SOURCE_SUM_PRG=sha256sum +SOURCE_FORMAT=deb +SOURCE_IN_SUBDIR=false +SOURCE_FILENAME=gitlab-runner.deb +SOURCE_EXTRACT=false From 294d33c91333675353e290a38316cea799092b19 Mon Sep 17 00:00:00 2001 From: yunohost-bot Date: Fri, 5 Aug 2022 09:36:31 +0000 Subject: [PATCH 10/11] Auto-update README --- README.md | 2 +- README_fr.md | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index a47aaa2..9d5780c 100644 --- a/README.md +++ b/README.md @@ -18,7 +18,7 @@ If you don't have YunoHost, please consult [the guide](https://yunohost.org/#/in GitLab Runner is a continuous integration tool to use with a GitLab instance (YNH or not). -**Shipped version:** 15.0.0~ynh2 +**Shipped version:** 15.2.1~ynh1 ## Screenshots diff --git a/README_fr.md b/README_fr.md index f6f0a04..c176d21 100644 --- a/README_fr.md +++ b/README_fr.md @@ -18,7 +18,7 @@ Si vous n'avez pas YunoHost, regardez [ici](https://yunohost.org/#/install) pour GitLab Runner est un outil d'intégration continue à utiliser avec une instance GitLab (YNH ou non). -**Version incluse :** 15.0.0~ynh2 +**Version incluse :** 15.2.1~ynh1 ## Captures d'écran From 79ef1ed5aa77e334ba6dfa8d65f28c8a8d14cbe9 Mon Sep 17 00:00:00 2001 From: Kayou Date: Fri, 5 Aug 2022 13:22:20 +0200 Subject: [PATCH 11/11] Remove duplicate log --- scripts/upgrade | 1 - 1 file changed, 1 deletion(-) diff --git a/scripts/upgrade b/scripts/upgrade index 2126e83..bf7d6dd 100755 --- a/scripts/upgrade +++ b/scripts/upgrade @@ -51,7 +51,6 @@ ynh_app_setting_delete --app=$app --key=architecture #================================================= # DOWNLOAD, CHECK AND UNPACK SOURCE #================================================= -ynh_script_progression --message="Upgrading source files..." if [ "$upgrade_type" == "UPGRADE_APP" ] then