diff --git a/defaults/config.yaml b/defaults/config.yaml new file mode 100644 index 0000000..446817b --- /dev/null +++ b/defaults/config.yaml @@ -0,0 +1,87 @@ +# Example configuration file, it's safe to copy this as the default config file without any modification. + +# You don't have to copy this file to your instance, +# just run `./act_runner generate-config > config.yaml` to generate a config file. + +log: + # The level of logging, can be trace, debug, info, warn, error, fatal + level: info + +runner: + # Where to store the registration result. + file: .runner + # Execute how many tasks concurrently at the same time. + capacity: 1 + # Extra environment variables to run jobs. + envs: + A_TEST_ENV_NAME_1: a_test_env_value_1 + A_TEST_ENV_NAME_2: a_test_env_value_2 + # Extra environment variables to run jobs from a file. + # It will be ignored if it's empty or the file doesn't exist. + env_file: .env + # The timeout for a job to be finished. + # Please note that the Gitea instance also has a timeout (3h by default) for the job. + # So the job could be stopped by the Gitea instance if it's timeout is shorter than this. + timeout: 3h + # Whether skip verifying the TLS certificate of the Gitea instance. + insecure: false + # The timeout for fetching the job from the Gitea instance. + fetch_timeout: 5s + # The interval for fetching the job from the Gitea instance. + fetch_interval: 2s + # The labels of a runner are used to determine which jobs the runner can run, and how to run them. + # Like: ["macos-arm64:host", "ubuntu-latest:docker://node:16-bullseye", "ubuntu-22.04:docker://node:16-bullseye"] + # If it's empty when registering, it will ask for inputting labels. + # If it's empty when execute `deamon`, will use labels in `.runner` file. + labels: [] + +cache: + # Enable cache server to use actions/cache. + enabled: true + # The directory to store the cache data. + # If it's empty, the cache data will be stored in $HOME/.cache/actcache. + dir: "" + # The host of the cache server. + # It's not for the address to listen, but the address to connect from job containers. + # So 0.0.0.0 is a bad choice, leave it empty to detect automatically. + host: "" + # The port of the cache server. + # 0 means to use a random available port. + port: 0 + # The external cache server URL. Valid only when enable is true. + # If it's specified, act_runner will use this URL as the ACTIONS_CACHE_URL rather than start a server by itself. + # The URL should generally end with "/". + external_server: "" + +container: + # Specifies the network to which the container will connect. + # Could be host, bridge or the name of a custom network. + # If it's empty, act_runner will create a network automatically. + network: "" + # Whether to use privileged mode or not when launching task containers (privileged mode is required for Docker-in-Docker). + privileged: false + # And other options to be used when the container is started (eg, --add-host=my.gitea.url:host-gateway). + options: + # The parent directory of a job's working directory. + # If it's empty, /workspace will be used. + workdir_parent: + # Volumes (including bind mounts) can be mounted to containers. Glob syntax is supported, see https://github.com/gobwas/glob + # You can specify multiple volumes. If the sequence is empty, no volumes can be mounted. + # For example, if you only allow containers to mount the `data` volume and all the json files in `/src`, you should change the config to: + # valid_volumes: + # - data + # - /src/*.json + # If you want to allow any volume, please use the following configuration: + # valid_volumes: + # - '**' + valid_volumes: [] + # overrides the docker client host with the specified one. + # If it's empty, act_runner will find an available docker host automatically. + # If it's "-", act_runner will find an available docker host automatically, but the docker host won't be mounted to the job containers and service containers. + # If it's not empty or "-", the specified docker host will be used. An error will be returned if it doesn't work. + docker_host: "" + +host: + # The parent directory of a job's working directory. + # If it's empty, $HOME/.cache/act/ will be used. + workdir_parent: diff --git a/defaults/main.yml b/defaults/main.yml index e91746d..44f50e7 100644 --- a/defaults/main.yml +++ b/defaults/main.yml @@ -1,5 +1,7 @@ --- # defaults file for deploy_adguard +deploy_gitea_runner_version: latest +deploy_gitea_runner_deploy_method: docker # deployment method, either host or docker. deploy_gitea_runner_directory: /opt/gitea-actions deploy_gitea_runner_timezone: "Europe/Paris" deploy_gitea_runner_start_service: false @@ -8,16 +10,27 @@ deploy_gitea_runner_server_token: "" deploy_gitea_runner_name: gitea-runner deploy_gitea_runner_config: log: - level: debug + level: info runner: file: .runner capacity: 1 timeout: 3h insecure: false fetch_timeout: 5s - fetch_interval: 15s + fetch_interval: 2s + labels: [] cache: enabled: true + dir: + host: + port: 0 + external_server: container: - network: "gitea-actions_internal" - privileged: true + network: "" + privileged: false + options: + workdir_parent: + valid_volumes: [] + docker_host: "" + host: + workdir_parent: \ No newline at end of file diff --git a/tasks/install_host.yml b/tasks/install_host.yml new file mode 100644 index 0000000..c630394 --- /dev/null +++ b/tasks/install_host.yml @@ -0,0 +1,46 @@ +--- +# task/install_compose file for install_docker +- name: "Get release for compose:{{ install_docker_compose_version }}" + vars: + _docker_compose_url_ext: "{% if install_docker_compose_version == 'latest'%}releases{% else %}releases/tags{% endif %}" + ansible.builtin.uri: + url: "{{ install_docker_compose_github_api }}/{{ _docker_compose_url_ext }}/{{ install_docker_compose_version }}" + return_content: true + register: _docker_compose_new_release + +- name: "Check current compose version" + ansible.builtin.command: "{{ install_docker_compose_path }} --version --short" + register: _docker_compose_old_release + check_mode: false + changed_when: false + failed_when: false + +- name: "Set facts for wanted compose release" + ansible.builtin.set_fact: + install_docker_compose_wanted_version: "{{ _docker_compose_new_release.json['tag_name']|regex_replace('v', '') }}" + when: _docker_compose_new_release.json is defined + and (_docker_compose_new_release.json | length > 0) + +- name: "Set facts for current compose release" + ansible.builtin.set_fact: + install_docker_compose_current_version: "{{ _docker_compose_old_release.stdout | regex_replace('v', '') }}" + when: _docker_compose_old_release.stdout is defined + and (_docker_compose_old_release.stdout | length > 0) + +- name: "Remove old compose binary if different" + ansible.builtin.file: + path: "{{ install_docker_compose_path }}" + state: absent + register: _docker_compose_binary_removed + when: install_docker_compose_current_version is defined + and install_docker_compose_wanted_version not in install_docker_compose_current_version + +- name: "Download and install compose:{{ install_docker_compose_version }}" + ansible.builtin.get_url: + url: "{{ install_docker_compose_github_url }}/releases/download/v{{ install_docker_compose_wanted_version }}/docker-compose-linux-{{ ansible_architecture }}" + dest: "{{ install_docker_compose_path }}" + owner: root + group: root + mode: '0755' + when: (install_docker_compose_current_version is not defined) + or (_docker_compose_binary_removed.changed)