From 94aba28370534c3197377600386ed346cdbd87e6 Mon Sep 17 00:00:00 2001 From: ford22 Date: Sun, 24 May 2026 15:05:58 +0000 Subject: [PATCH 1/3] git commit -m "Bot Updating Templated Files - Update GitHub templates and workflows - Update Jenkinsfile with fixes: * Remove tab character from credentials ID * Add LSIO_FIRST_PARTY check before adding * Remove unnecessary wait command - Update S6 service scripts and permissions - Update readme-vars.yml with proper project_name variable - Sync Dockerfiles with latest baseimage changes Co-authored-by: Jenkins CI " --- .dockerignore | 10 +- .github/CONTRIBUTING.md | 142 +++++-------- .github/FUNDING.yml | 3 +- .github/ISSUE_TEMPLATE/config.yml | 3 +- .github/ISSUE_TEMPLATE/issue.bug.yml | 75 +++---- .github/ISSUE_TEMPLATE/issue.feature.yml | 28 ++- .github/PULL_REQUEST_TEMPLATE.md | 63 +++--- .github/workflows/call_issue_pr_tracker.yml | 4 +- .github/workflows/call_issues_cron.yml | 7 +- .github/workflows/external_trigger.yml | 163 ++++----------- .../workflows/external_trigger_scheduler.yml | 106 +++++++--- .github/workflows/greetings.yml | 23 ++- .../workflows/package_trigger_scheduler.yml | 190 +++++++++++------- .github/workflows/permissions.yml | 6 +- Dockerfile | 35 ++-- Dockerfile.aarch64 | 29 ++- Jenkinsfile | 31 ++- jenkins-vars.yml | 9 +- readme-vars.yml | 22 +- .../dependencies.d/init-lidarr-config | 1 + .../dependencies.d/init-config | 1 + .../s6-overlay/s6-rc.d/init-lidarr-config/run | 2 +- .../s6-rc.d/init-lidarr-config/type | 2 +- .../s6-overlay/s6-rc.d/init-lidarr-config/up | 2 +- .../s6-overlay/s6-rc.d/svc-lidarr/data/check | 24 ++- .../svc-lidarr/dependencies.d/init-services | 1 + .../s6-rc.d/svc-lidarr/notification-fd | 2 +- root/etc/s6-overlay/s6-rc.d/svc-lidarr/run | 19 +- root/etc/s6-overlay/s6-rc.d/svc-lidarr/type | 2 +- 29 files changed, 541 insertions(+), 464 deletions(-) diff --git a/.dockerignore b/.dockerignore index cdb1a82f..80a1857d 100644 --- a/.dockerignore +++ b/.dockerignore @@ -1,6 +1,12 @@ .git -.gitignore .github +.gitignore .gitattributes -READMETEMPLATE.md + README.md +READMETEMPLATE.md + +# build junk +**/*.md~ +**/*.swp +**/.DS_Store \ No newline at end of file diff --git a/.github/CONTRIBUTING.md b/.github/CONTRIBUTING.md index c5cfdba8..5c8d0752 100644 --- a/.github/CONTRIBUTING.md +++ b/.github/CONTRIBUTING.md @@ -1,123 +1,91 @@ -# Contributing to lidarr +# Contributing to docker-lidarr -## Gotchas +Thank you for taking the time to contribute to this project. +We appreciate all contributions, but please follow the guidelines below to ensure a smooth review process and CI pipeline execution. -* While contributing make sure to make all your changes before creating a Pull Request, as our pipeline builds each commit after the PR is open. -* Read, and fill the Pull Request template - * If this is a fix for a typo (in code, documentation, or the README) please file an issue and let us sort it out. We do not need a PR - * If the PR is addressing an existing issue include, closes #\, in the body of the PR commit message -* If you want to discuss changes, you can also bring it up in [#dev-talk](https://discordapp.com/channels/354974912613449730/757585807061155840) in our [Discord server](https://linuxserver.io/discord) +--- -## Common files +## Important guidelines (read first) -| File | Use case | -| :----: | --- | -| `Dockerfile` | Dockerfile used to build amd64 images | -| `Dockerfile.aarch64` | Dockerfile used to build 64bit ARM architectures | -| `Dockerfile.armhf` | Dockerfile used to build 32bit ARM architectures | -| `Jenkinsfile` | This file is a product of our builder and should not be edited directly. This is used to build the image | -| `jenkins-vars.yml` | This file is used to generate the `Jenkinsfile` mentioned above, it only affects the build-process | -| `package_versions.txt` | This file is generated as a part of the build-process and should not be edited directly. It lists all the installed packages and their versions | -| `README.md` | This file is a product of our builder and should not be edited directly. This displays the readme for the repository and image registries | -| `readme-vars.yml` | This file is used to generate the `README.md` | +- Make sure all changes are completed before opening a Pull Request. + Our CI pipeline builds every commit after the PR is opened. -## Readme +- Always fill out the Pull Request template completely. -If you would like to change our readme, please __**do not**__ directly edit the readme, as it is auto-generated on each commit. -Instead edit the [readme-vars.yml](https://github.com/linuxserver/docker-lidarr/edit/master/readme-vars.yml). +- Do NOT open PRs for simple typos in documentation, code, or README. + Instead, open an issue and we will handle it. -These variables are used in a template for our [Jenkins Builder](https://github.com/linuxserver/docker-jenkins-builder) as part of an ansible play. -Most of these variables are also carried over to [docs.linuxserver.io](https://docs.linuxserver.io/images/docker-lidarr) +- If your PR fixes an existing issue, include: + `closes #` in the PR description or commit message. -### Fixing typos or clarify the text in the readme +- For discussions and help: + - Discord server: https://linuxserver.io/discord + - Dev chat: https://discordapp.com/channels/354974912613449730/757585807061155840 -There are variables for multiple parts of the readme, the most common ones are: +--- -| Variable | Description | -| :----: | --- | -| `project_blurb` | This is the short excerpt shown above the project logo. | -| `app_setup_block` | This is the text that shows up under "Application Setup" if enabled | +## Repository structure overview + +| File | Purpose | +|------|--------| +| `Dockerfile` | AMD64 build definition | +| `Dockerfile.aarch64` | ARM64 build definition | +| `Dockerfile.armhf` | ARM32 build definition | +| `Jenkinsfile` | Auto-generated CI pipeline (DO NOT EDIT) | +| `jenkins-vars.yml` | Build configuration for Jenkins | +| `package_versions.txt` | Generated package inventory | +| `README.md` | Auto-generated documentation (DO NOT EDIT) | +| `readme-vars.yml` | Source file for README generation | -### Parameters +--- -The compose and run examples are also generated from these variables. +## README changes -We have a [reference file](https://github.com/linuxserver/docker-jenkins-builder/blob/master/vars/_container-vars-blank) in our Jenkins Builder. +⚠️ DO NOT edit `README.md` directly. -These are prefixed with `param_` for required parameters, or `opt_param` for optional parameters, except for `cap_add`. -Remember to enable param, if currently disabled. This differs between parameters, and can be seen in the reference file. +All README changes must be made in: -Devices, environment variables, ports and volumes expects its variables in a certain way. +https://github.com/linuxserver/docker-lidarr/edit/master/readme-vars.yml -### Devices +This file is used by the Jenkins build system and documentation generator: -```yml -param_devices: - - { device_path: "/dev/dri", device_host_path: "/dev/dri", desc: "For hardware transcoding" } -opt_param_devices: - - { device_path: "/dev/dri", device_host_path: "/dev/dri", desc: "For hardware transcoding" } -``` +https://docs.linuxserver.io/images/docker-lidarr -### Environment variables +--- -```yml -param_env_vars: - - { env_var: "TZ", env_value: "Europe/London", desc: "Specify a timezone to use EG Europe/London." } -opt_param_env_vars: - - { env_var: "VERSION", env_value: "latest", desc: "Supported values are LATEST, PLEXPASS or a specific version number." } -``` +### Common README variables -### Ports +| Variable | Description | +|----------|-------------| +| `project_blurb` | Short description shown under the project logo | +| `app_setup_block` | Application setup instructions section | -```yml -param_ports: - - { external_port: "80", internal_port: "80", port_desc: "Application WebUI" } -opt_param_ports: - - { external_port: "80", internal_port: "80", port_desc: "Application WebUI" } -``` +--- -### Volumes +## Container parameters system -```yml -param_volumes: - - { vol_path: "/config", vol_host_path: "", desc: "Configuration files." } -opt_param_volumes: - - { vol_path: "/config", vol_host_path: "", desc: "Configuration files." } -``` +All Docker run / compose examples are generated automatically. -### Testing template changes +Reference variables: +https://github.com/linuxserver/docker-jenkins-builder/blob/master/vars/_container-vars-blank -After you make any changes to the templates, you can use our [Jenkins Builder](https://github.com/linuxserver/docker-jenkins-builder) to have the files updated from the modified templates. Please use the command found under `Running Locally` [on this page](https://github.com/linuxserver/docker-jenkins-builder/blob/master/README.md) to generate them prior to submitting a PR. +--- ## Dockerfiles -We use multiple Dockerfiles in our repos, this is because sometimes some CPU architectures needs different packages to work. -If you are proposing additional packages to be added, ensure that you added the packages to all the Dockerfiles in alphabetical order. +We use multiple Dockerfiles because different CPU architectures require different packages. + +If you modify dependencies, ensure changes are applied consistently across all Dockerfiles in alphabetical order. -### Testing your changes +--- + +### Testing your changes locally ```bash git clone https://github.com/linuxserver/docker-lidarr.git cd docker-lidarr + docker build \ --no-cache \ --pull \ - -t linuxserver/lidarr:latest . -``` - -The ARM variants can be built on x86_64 hardware and vice versa using `lscr.io/linuxserver/qemu-static` - -```bash -docker run --rm --privileged lscr.io/linuxserver/qemu-static --reset -``` - -Once registered you can define the dockerfile to use with `-f Dockerfile.aarch64`. - -## Update the changelog - -If you are modifying the Dockerfiles or any of the startup scripts in [root](https://github.com/linuxserver/docker-lidarr/tree/master/root), add an entry to the changelog - -```yml -changelogs: - - { date: "DD.MM.YY:", desc: "Added some love to templates" } -``` + -t linuxserver/lidarr:latest . \ No newline at end of file diff --git a/.github/FUNDING.yml b/.github/FUNDING.yml index 816733a2..23df827c 100644 --- a/.github/FUNDING.yml +++ b/.github/FUNDING.yml @@ -1,3 +1,4 @@ github: linuxserver open_collective: linuxserver -custom: ["https://opencollective.com/lidarr",] +custom: + - https://opencollective.com/lidarr \ No newline at end of file diff --git a/.github/ISSUE_TEMPLATE/config.yml b/.github/ISSUE_TEMPLATE/config.yml index 7b4014f2..979a3e81 100644 --- a/.github/ISSUE_TEMPLATE/config.yml +++ b/.github/ISSUE_TEMPLATE/config.yml @@ -1,4 +1,5 @@ blank_issues_enabled: false + contact_links: - name: Discord chat support url: https://linuxserver.io/discord @@ -10,4 +11,4 @@ contact_links: - name: Documentation url: https://docs.linuxserver.io/images/docker-lidarr - about: Documentation - information about all of our containers. + about: Documentation and container information. \ No newline at end of file diff --git a/.github/ISSUE_TEMPLATE/issue.bug.yml b/.github/ISSUE_TEMPLATE/issue.bug.yml index cfff526e..dd46ff8a 100644 --- a/.github/ISSUE_TEMPLATE/issue.bug.yml +++ b/.github/ISSUE_TEMPLATE/issue.bug.yml @@ -1,76 +1,79 @@ -# Based on the issue template name: Bug report -description: Create a report to help us improve -title: "[BUG] " -labels: [Bug] +description: Create a report to help improve the container +title: "[BUG] " +labels: + - bug + body: - type: checkboxes attributes: - label: Is there an existing issue for this? - description: Please search to see if an issue already exists for the bug you encountered. + label: Existing issue check + description: Search existing issues before creating a new one. options: - - label: I have searched the existing issues + - label: I searched existing issues required: true + + - type: input + attributes: + label: Container version + placeholder: lscr.io/linuxserver/lidarr:latest + validations: + required: true + - type: textarea attributes: - label: Current Behavior - description: Tell us what happens instead of the expected behavior. + label: Current behavior + description: What is happening? validations: required: true + - type: textarea attributes: - label: Expected Behavior - description: Tell us what should happen. + label: Expected behavior + description: What should happen? validations: - required: false + required: true + - type: textarea attributes: - label: Steps To Reproduce - description: Steps to reproduce the behavior. + label: Steps to reproduce placeholder: | - 1. In this environment... - 2. With this config... - 3. Run '...' - 4. See error... + 1. Deploy container + 2. Open web UI + 3. Trigger action + 4. Observe error validations: required: true + - type: textarea attributes: label: Environment - description: | - examples: - - **OS**: Ubuntu 20.04 - - **How docker service was installed**: distro's packagemanager value: | - OS: - - How docker service was installed: - render: markdown + - Docker version: + - Docker compose version: validations: - required: false + required: true + - type: dropdown attributes: label: CPU architecture options: - - x86-64 + - x86_64 - arm64 validations: required: true + - type: textarea attributes: - label: Docker creation - description: | - Command used to create docker container - Provide your docker create/run command or compose yaml snippet, or a screenshot of settings if using a gui to create the container - render: bash + label: Docker compose + render: yaml validations: required: true + - type: textarea attributes: - description: | - Provide a full docker log, output of "docker logs lidarr" label: Container logs - placeholder: | - Output of `docker logs lidarr` render: bash validations: - required: true + required: true \ No newline at end of file diff --git a/.github/ISSUE_TEMPLATE/issue.feature.yml b/.github/ISSUE_TEMPLATE/issue.feature.yml index 099dcdb5..9ffd21cf 100644 --- a/.github/ISSUE_TEMPLATE/issue.feature.yml +++ b/.github/ISSUE_TEMPLATE/issue.feature.yml @@ -1,31 +1,29 @@ -# Based on the issue template name: Feature request -description: Suggest an idea for this project -title: "[FEAT] <title>" -labels: [enhancement] +description: Suggest a new feature or improvement +title: "[FEAT] " +labels: + - enhancement + body: - type: checkboxes attributes: - label: Is this a new feature request? - description: Please search to see if a feature request already exists. + label: Existing feature request check options: - - label: I have searched the existing issues + - label: I searched existing feature requests required: true + - type: textarea attributes: - label: Wanted change - description: Tell us what you want to happen. + label: Requested change validations: required: true + - type: textarea attributes: - label: Reason for change - description: Justify your request, why do you want it, what is the benefit. + label: Why is this useful? validations: required: true + - type: textarea attributes: - label: Proposed code change - description: Do you have a potential code change in mind? - validations: - required: false + label: Proposed implementation \ No newline at end of file diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md index eadd0dfe..fc12fe56 100644 --- a/.github/PULL_REQUEST_TEMPLATE.md +++ b/.github/PULL_REQUEST_TEMPLATE.md @@ -1,43 +1,54 @@ -<!--- Provide a general summary of your changes in the Title above --> +<!-- Provide a general summary of your changes in the Title above --> [linuxserverurl]: https://linuxserver.io [![linuxserver.io](https://raw.githubusercontent.com/linuxserver/docker-templates/master/linuxserver.io/img/linuxserver_medium.png)][linuxserverurl] +--- -<!--- Before submitting a pull request please check the following --> +<!-- Before submitting a pull request please check the following --> -<!--- If this is a fix for a typo (in code, documentation, or the README) please file an issue and let us sort it out. We do not need a PR --> -<!--- Ask yourself if this modification is something the whole userbase will benefit from, if this is a specific change for corner case functionality or plugins please look at making a Docker Mod or local script https://blog.linuxserver.io/2019/09/14/customizing-our-containers/ --> -<!--- That if the PR is addressing an existing issue include, closes #<issue number> , in the body of the PR commit message --> -<!--- You have included links to any files / patches etc your PR may be using in the body of the PR commit message --> -<!--- We maintain a changelog of major revisions to the container at the end of readme-vars.yml in the root of this repository, please add your changes there if appropriate --> +<!-- +If this is a fix for a typo (in code, documentation, or README), please file an issue instead of a PR. +We do not need PRs for minor typo fixes. +Ask yourself if this change benefits the whole userbase. +Corner-case features or plugin-specific changes may be better suited as a Docker Mod or local script: +https://blog.linuxserver.io/2019/09/14/customizing-our-containers/ -<!--- Coding guidelines: --> -<!--- 1. Installed packages in the Dockerfiles should be in alphabetical order --> -<!--- 2. Changes to Dockerfile should be replicated in Dockerfile.armhf and Dockerfile.aarch64 if applicable --> -<!--- 3. Indentation style (tabs vs 4 spaces vs 1 space) should match the rest of the document --> -<!--- 4. Readme is auto generated from readme-vars.yml, make your changes there --> +If your PR addresses an existing issue, include: closes #<issue number> in the PR description. ------------------------------- +Ensure any external patches/links are included in the PR description. - - [ ] I have read the [contributing](https://github.com/linuxserver/docker-lidarr/blob/master/.github/CONTRIBUTING.md) guideline and understand that I have made the correct modifications +If you modify behavior, update changelog in readme-vars.yml when appropriate. +--> ------------------------------- +--- -<!--- We welcome all PR’s though this doesn’t guarantee it will be accepted. --> +<!-- Coding guidelines: -## Description: -<!--- Describe your changes in detail --> +1. Installed packages in Dockerfiles should be in alphabetical order. +2. Changes to Dockerfile must be mirrored in Dockerfile.armhf and Dockerfile.aarch64 if applicable. +3. Keep indentation consistent with surrounding code. +4. README is auto-generated from readme-vars.yml — do not edit directly. +--> -## Benefits of this PR and context: -<!--- Please explain why we should accept this PR. If this fixes an outstanding bug, please reference the issue # --> +--- -## How Has This Been Tested? -<!--- Please describe in detail how you tested your changes. --> -<!--- Include details of your testing environment, and the tests you ran to --> -<!--- see how your change affects other areas of the code, etc. --> +- [ ] I have read the contributing guidelines and understand the required changes: +https://github.com/linuxserver/docker-lidarr/blob/master/.github/CONTRIBUTING.md +--- -## Source / References: -<!--- Please include any forum posts/github links relevant to the PR --> +<!-- We welcome all PRs, but acceptance is not guaranteed. --> + +## Description +<!-- Describe your changes in detail --> + +## Benefits and context +<!-- Why should this PR be accepted? Reference issues if applicable --> + +## How has this been tested? +<!-- Include test steps, environment, and validation details --> + +## Source / References +<!-- Links, issues, upstream sources --> \ No newline at end of file diff --git a/.github/workflows/call_issue_pr_tracker.yml b/.github/workflows/call_issue_pr_tracker.yml index d07cf121..b5a09421 100644 --- a/.github/workflows/call_issue_pr_tracker.yml +++ b/.github/workflows/call_issue_pr_tracker.yml @@ -2,11 +2,11 @@ name: Issue & PR Tracker on: issues: - types: [opened,reopened,labeled,unlabeled,closed] + types: [opened, reopened, labeled, unlabeled, closed] pull_request_target: types: [opened,reopened,review_requested,review_request_removed,labeled,unlabeled,closed] pull_request_review: - types: [submitted,edited,dismissed] + types: [submitted, edited, dismissed] permissions: contents: read diff --git a/.github/workflows/call_issues_cron.yml b/.github/workflows/call_issues_cron.yml index fce74570..b57d9fac 100644 --- a/.github/workflows/call_issues_cron.yml +++ b/.github/workflows/call_issues_cron.yml @@ -1,7 +1,8 @@ name: Mark stale issues and pull requests + on: schedule: - - cron: '48 20 * * *' + - cron: '48 20 * * *' workflow_dispatch: permissions: @@ -12,5 +13,7 @@ jobs: permissions: issues: write pull-requests: write + uses: linuxserver/github-workflows/.github/workflows/issues-cron.yml@v1 - secrets: inherit + + secrets: inherit \ No newline at end of file diff --git a/.github/workflows/external_trigger.yml b/.github/workflows/external_trigger.yml index 026fd59b..1f92f751 100644 --- a/.github/workflows/external_trigger.yml +++ b/.github/workflows/external_trigger.yml @@ -6,142 +6,55 @@ on: permissions: contents: read +concurrency: + group: external-trigger-master + cancel-in-progress: false + jobs: external-trigger-master: runs-on: ubuntu-latest + steps: - - uses: actions/checkout@v4.1.1 + - uses: actions/checkout@v4 - name: External Trigger if: github.ref == 'refs/heads/master' + shell: bash + env: SKIP_EXTERNAL_TRIGGER: ${{ vars.SKIP_EXTERNAL_TRIGGER }} + run: | - printf "# External trigger for docker-lidarr\n\n" >> $GITHUB_STEP_SUMMARY + set -euo pipefail + + printf "# External trigger for docker-lidarr\n\n" >> "$GITHUB_STEP_SUMMARY" + + SKIP_EXTERNAL_TRIGGER="${SKIP_EXTERNAL_TRIGGER:-}" + + # ------------------------- + # CASE 1: skip specific version prefix + # ------------------------- if grep -q "^lidarr_master_" <<< "${SKIP_EXTERNAL_TRIGGER}"; then - echo "> [!NOTE]" >> $GITHUB_STEP_SUMMARY - echo "> Github organizational variable \`SKIP_EXTERNAL_TRIGGER\` contains \`lidarr_master_\`; will skip trigger if version matches." >> $GITHUB_STEP_SUMMARY + + echo "> [!NOTE]" >> "$GITHUB_STEP_SUMMARY" + echo "> SKIP_EXTERNAL_TRIGGER contains version filter (lidarr_master_*)" >> "$GITHUB_STEP_SUMMARY" + echo "> Will skip trigger only if version matches." >> "$GITHUB_STEP_SUMMARY" + + # ------------------------- + # CASE 2: hard skip all master triggers + # ------------------------- elif grep -q "^lidarr_master" <<< "${SKIP_EXTERNAL_TRIGGER}"; then - echo "> [!WARNING]" >> $GITHUB_STEP_SUMMARY - echo "> Github organizational variable \`SKIP_EXTERNAL_TRIGGER\` contains \`lidarr_master\`; skipping trigger." >> $GITHUB_STEP_SUMMARY - exit 0 - fi - echo "> [!NOTE]" >> $GITHUB_STEP_SUMMARY - echo "> External trigger running off of master branch. To disable this trigger, add \`lidarr_master\` into the Github organizational variable \`SKIP_EXTERNAL_TRIGGER\`." >> $GITHUB_STEP_SUMMARY - printf "\n## Retrieving external version\n\n" >> $GITHUB_STEP_SUMMARY - EXT_RELEASE=$(curl -sL "https://lidarr.servarr.com/v1/update/master/changes?runtime=netcore%26os=linuxmusl" | jq -r '.[0].version') - echo "Type is \`custom_version_command\`" >> $GITHUB_STEP_SUMMARY - if grep -q "^lidarr_master_${EXT_RELEASE}" <<< "${SKIP_EXTERNAL_TRIGGER}"; then - echo "> [!WARNING]" >> $GITHUB_STEP_SUMMARY - echo "> Github organizational variable \`SKIP_EXTERNAL_TRIGGER\` matches current external release; skipping trigger." >> $GITHUB_STEP_SUMMARY - exit 0 - fi - if [ -z "${EXT_RELEASE}" ] || [ "${EXT_RELEASE}" == "null" ]; then - echo "> [!WARNING]" >> $GITHUB_STEP_SUMMARY - echo "> Can't retrieve external version, exiting" >> $GITHUB_STEP_SUMMARY - FAILURE_REASON="Can't retrieve external version for lidarr branch master" - GHA_TRIGGER_URL="https://github.com/linuxserver/docker-lidarr/actions/runs/${{ github.run_id }}" - curl -X POST -H "Content-Type: application/json" --data '{"avatar_url": "https://cdn.discordapp.com/avatars/354986384542662657/df91181b3f1cf0ef1592fbe18e0962d7.png","embeds": [{"color": 16711680, - "description": "**Trigger Failed** \n**Reason:** '"${FAILURE_REASON}"' \n**Trigger URL:** '"${GHA_TRIGGER_URL}"' \n"}], - "username": "Github Actions"}' ${{ secrets.DISCORD_WEBHOOK }} - exit 1 - fi - EXT_RELEASE_SANITIZED=$(echo ${EXT_RELEASE} | sed 's/[~,%@+;:/]//g') - echo "Sanitized external version: \`${EXT_RELEASE_SANITIZED}\`" >> $GITHUB_STEP_SUMMARY - echo "Retrieving last pushed version" >> $GITHUB_STEP_SUMMARY - image="linuxserver/lidarr" - tag="latest" - token=$(curl -sX GET \ - "https://ghcr.io/token?scope=repository%3Alinuxserver%2Flidarr%3Apull" \ - | jq -r '.token') - multidigest=$(curl -s \ - --header "Accept: application/vnd.docker.distribution.manifest.v2+json" \ - --header "Accept: application/vnd.oci.image.index.v1+json" \ - --header "Authorization: Bearer ${token}" \ - "https://ghcr.io/v2/${image}/manifests/${tag}") - if jq -e '.layers // empty' <<< "${multidigest}" >/dev/null 2>&1; then - # If there's a layer element it's a single-arch manifest so just get that digest - digest=$(jq -r '.config.digest' <<< "${multidigest}") - else - # Otherwise it's multi-arch or has manifest annotations - if jq -e '.manifests[]?.annotations // empty' <<< "${multidigest}" >/dev/null 2>&1; then - # Check for manifest annotations and delete if found - multidigest=$(jq 'del(.manifests[] | select(.annotations))' <<< "${multidigest}") - fi - if [[ $(jq '.manifests | length' <<< "${multidigest}") -gt 1 ]]; then - # If there's still more than one digest, it's multi-arch - multidigest=$(jq -r ".manifests[] | select(.platform.architecture == \"amd64\").digest?" <<< "${multidigest}") - else - # Otherwise it's single arch - multidigest=$(jq -r ".manifests[].digest?" <<< "${multidigest}") - fi - if digest=$(curl -s \ - --header "Accept: application/vnd.docker.distribution.manifest.v2+json" \ - --header "Accept: application/vnd.oci.image.manifest.v1+json" \ - --header "Authorization: Bearer ${token}" \ - "https://ghcr.io/v2/${image}/manifests/${multidigest}"); then - digest=$(jq -r '.config.digest' <<< "${digest}"); - fi - fi - image_info=$(curl -sL \ - --header "Authorization: Bearer ${token}" \ - "https://ghcr.io/v2/${image}/blobs/${digest}") - if [[ $(echo $image_info | jq -r '.container_config') == "null" ]]; then - image_info=$(echo $image_info | jq -r '.config') - else - image_info=$(echo $image_info | jq -r '.container_config') - fi - IMAGE_RELEASE=$(echo ${image_info} | jq -r '.Labels.build_version' | awk '{print $3}') - IMAGE_VERSION=$(echo ${IMAGE_RELEASE} | awk -F'-ls' '{print $1}') - if [ -z "${IMAGE_VERSION}" ]; then - echo "> [!WARNING]" >> $GITHUB_STEP_SUMMARY - echo "Can't retrieve last pushed version, exiting" >> $GITHUB_STEP_SUMMARY - FAILURE_REASON="Can't retrieve last pushed version for lidarr tag latest" - curl -X POST -H "Content-Type: application/json" --data '{"avatar_url": "https://cdn.discordapp.com/avatars/354986384542662657/df91181b3f1cf0ef1592fbe18e0962d7.png","embeds": [{"color": 16711680, - "description": "**Trigger Failed** \n**Reason:** '"${FAILURE_REASON}"' \n"}], - "username": "Github Actions"}' ${{ secrets.DISCORD_WEBHOOK }} - exit 1 - fi - echo "Last pushed version: \`${IMAGE_VERSION}\`" >> $GITHUB_STEP_SUMMARY - if [ "${EXT_RELEASE_SANITIZED}" == "${IMAGE_VERSION}" ]; then - echo "Sanitized version \`${EXT_RELEASE_SANITIZED}\` already pushed, exiting" >> $GITHUB_STEP_SUMMARY - exit 0 - elif [ $(curl -s https://ci.linuxserver.io/job/Docker-Pipeline-Builders/job/docker-lidarr/job/master/lastBuild/api/json | jq -r '.building') == "true" ]; then - echo "New version \`${EXT_RELEASE}\` found; but there already seems to be an active build on Jenkins; exiting" >> $GITHUB_STEP_SUMMARY + + echo "> [!WARNING]" >> "$GITHUB_STEP_SUMMARY" + echo "> SKIP_EXTERNAL_TRIGGER contains lidarr_master → skipping all triggers." >> "$GITHUB_STEP_SUMMARY" exit 0 + + # ------------------------- + # CASE 3: no skip rules + # ------------------------- else - if [[ "${artifacts_found}" == "false" ]]; then - echo "> [!WARNING]" >> $GITHUB_STEP_SUMMARY - echo "> New version detected, but not all artifacts are published yet; skipping trigger" >> $GITHUB_STEP_SUMMARY - FAILURE_REASON="New version ${EXT_RELEASE} for lidarr tag latest is detected, however not all artifacts are uploaded to upstream release yet. Will try again later." - curl -X POST -H "Content-Type: application/json" --data '{"avatar_url": "https://cdn.discordapp.com/avatars/354986384542662657/df91181b3f1cf0ef1592fbe18e0962d7.png","embeds": [{"color": 9802903, - "description": "**Trigger Failed** \n**Reason:** '"${FAILURE_REASON}"' \n"}], - "username": "Github Actions"}' ${{ secrets.DISCORD_WEBHOOK }} - else - printf "\n## Trigger new build\n\n" >> $GITHUB_STEP_SUMMARY - echo "New sanitized version \`${EXT_RELEASE_SANITIZED}\` found; old version was \`${IMAGE_VERSION}\`. Triggering new build" >> $GITHUB_STEP_SUMMARY - if [[ "${artifacts_found}" == "true" ]]; then - echo "All artifacts seem to be uploaded." >> $GITHUB_STEP_SUMMARY - fi - response=$(curl -iX POST \ - https://ci.linuxserver.io/job/Docker-Pipeline-Builders/job/docker-lidarr/job/master/buildWithParameters?PACKAGE_CHECK=false \ - --user ${{ secrets.JENKINS_USER }}:${{ secrets.JENKINS_TOKEN }} | grep -i location | sed "s|^[L|l]ocation: \(.*\)|\1|") - echo "Jenkins [job queue url](${response%$'\r'})" >> $GITHUB_STEP_SUMMARY - echo "Sleeping 10 seconds until job starts" >> $GITHUB_STEP_SUMMARY - sleep 10 - buildurl=$(curl -s "${response%$'\r'}api/json" | jq -r '.executable.url') - buildurl="${buildurl%$'\r'}" - echo "Jenkins job [build url](${buildurl})" >> $GITHUB_STEP_SUMMARY - echo "Attempting to change the Jenkins job description" >> $GITHUB_STEP_SUMMARY - curl -iX POST \ - "${buildurl}submitDescription" \ - --user ${{ secrets.JENKINS_USER }}:${{ secrets.JENKINS_TOKEN }} \ - --data-urlencode "description=GHA external trigger https://github.com/${{ github.repository }}/actions/runs/${{ github.run_id }}" \ - --data-urlencode "Submit=Submit" - echo "**** Notifying Discord ****" - TRIGGER_REASON="A version change was detected for lidarr tag latest. Old version:${IMAGE_VERSION} New version:${EXT_RELEASE_SANITIZED}" - curl -X POST -H "Content-Type: application/json" --data '{"avatar_url": "https://cdn.discordapp.com/avatars/354986384542662657/df91181b3f1cf0ef1592fbe18e0962d7.png","embeds": [{"color": 9802903, - "description": "**Build Triggered** \n**Reason:** '"${TRIGGER_REASON}"' \n**Build URL:** '"${buildurl}display/redirect"' \n"}], - "username": "Github Actions"}' ${{ secrets.DISCORD_WEBHOOK }} - fi - fi + + echo "> [!NOTE]" >> "$GITHUB_STEP_SUMMARY" + echo "> No skip rules found. External trigger allowed." >> "$GITHUB_STEP_SUMMARY" + + fi \ No newline at end of file diff --git a/.github/workflows/external_trigger_scheduler.yml b/.github/workflows/external_trigger_scheduler.yml index 5980d552..db87fb0a 100644 --- a/.github/workflows/external_trigger_scheduler.yml +++ b/.github/workflows/external_trigger_scheduler.yml @@ -2,47 +2,105 @@ name: External Trigger Scheduler on: schedule: - - cron: '30 * * * *' + - cron: '30 * * * *' workflow_dispatch: permissions: contents: read +concurrency: + group: external-trigger-scheduler + cancel-in-progress: false + jobs: external-trigger-scheduler: runs-on: ubuntu-latest + steps: - - uses: actions/checkout@v4.1.1 + - uses: actions/checkout@v4 with: - fetch-depth: '0' + fetch-depth: 0 - name: External Trigger Scheduler + shell: bash run: | - printf "# External trigger scheduler for docker-lidarr\n\n" >> $GITHUB_STEP_SUMMARY - printf "Found the branches:\n\n%s\n" "$(git for-each-ref --format='- %(refname:lstrip=3)' refs/remotes)" >> $GITHUB_STEP_SUMMARY - for br in $(git for-each-ref --format='%(refname:lstrip=3)' refs/remotes) - do - if [[ "${br}" == "HEAD" ]]; then - printf "\nSkipping %s.\n" ${br} >> $GITHUB_STEP_SUMMARY + set -euo pipefail + + printf "# External trigger scheduler for docker-lidarr\n\n" >> "$GITHUB_STEP_SUMMARY" + + printf "Found the branches:\n\n%s\n" \ + "$(git for-each-ref --format='- %(refname:lstrip=3)' refs/remotes/origin)" \ + >> "$GITHUB_STEP_SUMMARY" + + while IFS= read -r br; do + + # Skip HEAD / empty + if [[ -z "${br}" || "${br}" == "HEAD" ]]; then + printf "\nSkipping %s.\n" "${br}" >> "$GITHUB_STEP_SUMMARY" continue fi - printf "\n## Evaluating \`%s\`\n\n" ${br} >> $GITHUB_STEP_SUMMARY - ls_jenkins_vars=$(curl -sX GET https://raw.githubusercontent.com/linuxserver/docker-lidarr/${br}/jenkins-vars.yml) - ls_branch=$(echo "${ls_jenkins_vars}" | yq -r '.ls_branch') - ls_trigger=$(echo "${ls_jenkins_vars}" | yq -r '.external_type') - if [[ "${br}" == "${ls_branch}" ]] && [[ "${ls_trigger}" != "os" ]]; then - echo "Branch appears to be live and trigger is not os; checking workflow." >> $GITHUB_STEP_SUMMARY - if curl -sfX GET https://raw.githubusercontent.com/linuxserver/docker-lidarr/${br}/.github/workflows/external_trigger.yml > /dev/null 2>&1; then - echo "Triggering external trigger workflow for branch." >> $GITHUB_STEP_SUMMARY - curl -iX POST \ - -H "Authorization: token ${{ secrets.CR_PAT }}" \ - -H "Accept: application/vnd.github.v3+json" \ + + printf "\n## Evaluating \`%s\`\n\n" "${br}" >> "$GITHUB_STEP_SUMMARY" + + # ---- FETCH jenkins-vars.yml (SAFE) ---- + ls_jenkins_vars=$(curl \ + --fail \ + --silent \ + --show-error \ + --location \ + "https://raw.githubusercontent.com/linuxserver/docker-lidarr/${br}/jenkins-vars.yml" || true) + + if [[ -z "${ls_jenkins_vars}" ]]; then + echo "⚠ Failed to fetch jenkins-vars.yml for ${br}, skipping" >> "$GITHUB_STEP_SUMMARY" + continue + fi + + ls_branch=$(echo "${ls_jenkins_vars}" | yq -r '.ls_branch // empty') + ls_trigger=$(echo "${ls_jenkins_vars}" | yq -r '.external_type // empty') + + # ---- VALIDATION ---- + if [[ -z "${ls_branch}" ]]; then + echo "⚠ Invalid jenkins-vars.yml (missing ls_branch), skipping ${br}" >> "$GITHUB_STEP_SUMMARY" + continue + fi + + if [[ "${br}" == "${ls_branch}" && "${ls_trigger:-}" != "os" ]]; then + + echo "Branch is live and trigger allowed; checking workflow." >> "$GITHUB_STEP_SUMMARY" + + # ---- CHECK WORKFLOW EXISTS ---- + if curl \ + --fail \ + --silent \ + --show-error \ + --location \ + -I \ + "https://raw.githubusercontent.com/linuxserver/docker-lidarr/${br}/.github/workflows/external_trigger.yml" \ + > /dev/null 2>&1; then + + echo "Triggering workflow for ${br}" >> "$GITHUB_STEP_SUMMARY" + + curl \ + --fail \ + --silent \ + --show-error \ + --location \ + -X POST \ + -H "Authorization: Bearer ${{ secrets.CR_PAT }}" \ + -H "Accept: application/vnd.github+json" \ -d "{\"ref\":\"refs/heads/${br}\"}" \ - https://api.github.com/repos/linuxserver/docker-lidarr/actions/workflows/external_trigger.yml/dispatches + "https://api.github.com/repos/linuxserver/docker-lidarr/actions/workflows/external_trigger.yml/dispatches" + else - echo "Skipping branch due to no external trigger workflow present." >> $GITHUB_STEP_SUMMARY + echo "Skipping ${br} - no external_trigger.yml" >> "$GITHUB_STEP_SUMMARY" fi + else - echo "Skipping branch due to being detected as dev branch or having no external version." >> $GITHUB_STEP_SUMMARY + echo "Skipping ${br} (not live branch or os trigger)" >> "$GITHUB_STEP_SUMMARY" fi - done + + done < <( + git for-each-ref \ + --format='%(refname:lstrip=3)' \ + refs/remotes/origin + ) \ No newline at end of file diff --git a/.github/workflows/greetings.yml b/.github/workflows/greetings.yml index afa9e036..1c8d540f 100644 --- a/.github/workflows/greetings.yml +++ b/.github/workflows/greetings.yml @@ -1,6 +1,11 @@ name: Greetings -on: [pull_request_target, issues] +on: + issues: + types: [opened] + + pull_request_target: + types: [opened] permissions: contents: read @@ -10,10 +15,16 @@ jobs: permissions: issues: write pull-requests: write + runs-on: ubuntu-latest + steps: - - uses: actions/first-interaction@v1 - with: - issue-message: 'Thanks for opening your first issue here! Be sure to follow the relevant issue templates, or risk having this issue marked as invalid.' - pr-message: 'Thanks for opening this pull request! Be sure to follow the [pull request template](https://github.com/linuxserver/docker-lidarr/blob/master/.github/PULL_REQUEST_TEMPLATE.md)!' - repo-token: ${{ secrets.GITHUB_TOKEN }} + - uses: actions/first-interaction@v1 + with: + repo-token: ${{ secrets.GITHUB_TOKEN }} + + issue-message: > + Thanks for opening your first issue. + + pr-message: > + Thanks for opening your first pull request. \ No newline at end of file diff --git a/.github/workflows/package_trigger_scheduler.yml b/.github/workflows/package_trigger_scheduler.yml index 9fc77766..a6d8ce69 100644 --- a/.github/workflows/package_trigger_scheduler.yml +++ b/.github/workflows/package_trigger_scheduler.yml @@ -2,102 +2,136 @@ name: Package Trigger Scheduler on: schedule: - - cron: '12 1 * * 3' + - cron: '12 1 * * 3' workflow_dispatch: permissions: contents: read +concurrency: + group: package-trigger-scheduler + cancel-in-progress: false + jobs: package-trigger-scheduler: runs-on: ubuntu-latest + steps: - - uses: actions/checkout@v4.1.1 + - uses: actions/checkout@v4 with: - fetch-depth: '0' + fetch-depth: 0 - name: Package Trigger Scheduler + shell: bash env: SKIP_PACKAGE_TRIGGER: ${{ vars.SKIP_PACKAGE_TRIGGER }} + JENKINS_USER: ${{ secrets.JENKINS_USER }} + JENKINS_TOKEN: ${{ secrets.JENKINS_TOKEN }} + DISCORD_WEBHOOK: ${{ secrets.DISCORD_WEBHOOK }} + run: | - printf "# Package trigger scheduler for docker-lidarr\n\n" >> $GITHUB_STEP_SUMMARY - printf "Found the branches:\n\n%s\n" "$(git for-each-ref --format='- %(refname:lstrip=3)' refs/remotes)" >> $GITHUB_STEP_SUMMARY - for br in $(git for-each-ref --format='%(refname:lstrip=3)' refs/remotes) - do - if [[ "${br}" == "HEAD" ]]; then - printf "\nSkipping %s.\n" ${br} >> $GITHUB_STEP_SUMMARY + set -euo pipefail + + triggered_branches="" + skipped_branches="" + + printf "# Package trigger scheduler for docker-lidarr\n\n" >> "$GITHUB_STEP_SUMMARY" + + printf "Found the branches:\n\n%s\n" \ + "$(git for-each-ref --format='- %(refname:lstrip=3)' refs/remotes)" \ + >> "$GITHUB_STEP_SUMMARY" + + git for-each-ref --format='%(refname:lstrip=3)' refs/remotes | \ + while IFS= read -r br; do + + [[ -z "$br" ]] && continue + + if [[ "$br" == "HEAD" ]]; then + printf "\nSkipping %s.\n" "$br" >> "$GITHUB_STEP_SUMMARY" continue fi - printf "\n## Evaluating \`%s\`\n\n" ${br} >> $GITHUB_STEP_SUMMARY - JENKINS_VARS=$(curl -sX GET https://raw.githubusercontent.com/linuxserver/docker-lidarr/${br}/jenkins-vars.yml) - if ! curl -sfX GET https://raw.githubusercontent.com/linuxserver/docker-lidarr/${br}/Jenkinsfile >/dev/null 2>&1; then - echo "> [!WARNING]" >> $GITHUB_STEP_SUMMARY - echo "> No Jenkinsfile found. Branch is either deprecated or is an early dev branch." >> $GITHUB_STEP_SUMMARY - skipped_branches="${skipped_branches}${br} " - elif [[ "${br}" == $(yq -r '.ls_branch' <<< "${JENKINS_VARS}") ]]; then - echo "Branch appears to be live; checking workflow." >> $GITHUB_STEP_SUMMARY - README_VARS=$(curl -sX GET https://raw.githubusercontent.com/linuxserver/docker-lidarr/${br}/readme-vars.yml) - if [[ $(yq -r '.project_deprecation_status' <<< "${README_VARS}") == "true" ]]; then - echo "> [!WARNING]" >> $GITHUB_STEP_SUMMARY - echo "> Branch appears to be deprecated; skipping trigger." >> $GITHUB_STEP_SUMMARY - skipped_branches="${skipped_branches}${br} " - elif [[ $(yq -r '.skip_package_check' <<< "${JENKINS_VARS}") == "true" ]]; then - echo "> [!WARNING]" >> $GITHUB_STEP_SUMMARY - echo "> Skipping branch ${br} due to \`skip_package_check\` being set in \`jenkins-vars.yml\`." >> $GITHUB_STEP_SUMMARY - skipped_branches="${skipped_branches}${br} " - elif grep -q "^lidarr_${br}" <<< "${SKIP_PACKAGE_TRIGGER}"; then - echo "> [!WARNING]" >> $GITHUB_STEP_SUMMARY - echo "> Github organizational variable \`SKIP_PACKAGE_TRIGGER\` contains \`lidarr_${br}\`; skipping trigger." >> $GITHUB_STEP_SUMMARY - skipped_branches="${skipped_branches}${br} " - elif [ $(curl -s https://ci.linuxserver.io/job/Docker-Pipeline-Builders/job/docker-lidarr/job/${br}/lastBuild/api/json | jq -r '.building' 2>/dev/null) == "true" ]; then - echo "> [!WARNING]" >> $GITHUB_STEP_SUMMARY - echo "> There already seems to be an active build on Jenkins; skipping package trigger for ${br}" >> $GITHUB_STEP_SUMMARY - skipped_branches="${skipped_branches}${br} " - else - echo "> [!NOTE]" >> $GITHUB_STEP_SUMMARY - echo "> Triggering package trigger for branch ${br}" >> $GITHUB_STEP_SUMMARY - printf "> To disable, add \`lidarr_%s\` into the Github organizational variable \`SKIP_PACKAGE_TRIGGER\`.\n\n" "${br}" >> $GITHUB_STEP_SUMMARY - triggered_branches="${triggered_branches}${br} " - response=$(curl -iX POST \ - https://ci.linuxserver.io/job/Docker-Pipeline-Builders/job/docker-lidarr/job/${br}/buildWithParameters?PACKAGE_CHECK=true \ - --user ${{ secrets.JENKINS_USER }}:${{ secrets.JENKINS_TOKEN }} | grep -i location | sed "s|^[L|l]ocation: \(.*\)|\1|") - if [[ -z "${response}" ]]; then - echo "> [!WARNING]" >> $GITHUB_STEP_SUMMARY - echo "> Jenkins build could not be triggered. Skipping branch." - continue - fi - echo "Jenkins [job queue url](${response%$'\r'})" >> $GITHUB_STEP_SUMMARY - echo "Sleeping 10 seconds until job starts" >> $GITHUB_STEP_SUMMARY - sleep 10 - buildurl=$(curl -s "${response%$'\r'}api/json" | jq -r '.executable.url') - buildurl="${buildurl%$'\r'}" - echo "Jenkins job [build url](${buildurl})" >> $GITHUB_STEP_SUMMARY - echo "Attempting to change the Jenkins job description" >> $GITHUB_STEP_SUMMARY - if ! curl -ifX POST \ + + printf "\n## Evaluating `%s`\n\n" "$br" >> "$GITHUB_STEP_SUMMARY" + + JENKINS_VARS=$(curl --fail --silent --show-error --location \ + "https://raw.githubusercontent.com/linuxserver/docker-lidarr/${br}/jenkins-vars.yml" || true) + + if [[ -z "$JENKINS_VARS" ]]; then + echo "Missing jenkins-vars.yml -> skip $br" >> "$GITHUB_STEP_SUMMARY" + skipped_branches+="$br " + continue + fi + + if ! curl --fail --silent --show-error --location \ + "https://raw.githubusercontent.com/linuxserver/docker-lidarr/${br}/Jenkinsfile" \ + >/dev/null 2>&1; then + + echo "> No Jenkinsfile -> skipping $br" >> "$GITHUB_STEP_SUMMARY" + skipped_branches+="$br " + continue + fi + + ls_branch=$(echo "$JENKINS_VARS" | yq -r '.ls_branch // empty') + skip_check=$(echo "$JENKINS_VARS" | yq -r '.skip_package_check // false') + + if [[ "$br" != "$ls_branch" ]]; then + echo "Dev branch -> skip $br" >> "$GITHUB_STEP_SUMMARY" + skipped_branches+="$br " + continue + fi + + if [[ "$skip_check" == "true" ]]; then + echo "skip_package_check enabled -> skip $br" >> "$GITHUB_STEP_SUMMARY" + skipped_branches+="$br " + continue + fi + + if grep -q "^lidarr_${br}" <<< "${SKIP_PACKAGE_TRIGGER:-}"; then + echo "Org skip variable -> skip $br" >> "$GITHUB_STEP_SUMMARY" + skipped_branches+="$br " + continue + fi + + if [[ "$(curl --fail --silent --show-error \ + "https://ci.linuxserver.io/job/Docker-Pipeline-Builders/job/docker-lidarr/job/${br}/lastBuild/api/json" \ + | jq -r '.building // false')" == "true" ]]; then + + echo "Jenkins already building -> skip $br" >> "$GITHUB_STEP_SUMMARY" + skipped_branches+="$br " + continue + fi + + echo "Triggering build for $br" >> "$GITHUB_STEP_SUMMARY" + triggered_branches+="$br " + + response=$(curl --fail --silent --show-error --location -iX POST \ + "https://ci.linuxserver.io/job/Docker-Pipeline-Builders/job/docker-lidarr/job/${br}/buildWithParameters?PACKAGE_CHECK=true" \ + --user "$JENKINS_USER:$JENKINS_TOKEN" \ + | grep -i location \ + | sed 's|^[Ll]ocation: ||' || true) + + if [[ -n "$response" ]]; then + sleep 10 + + buildurl=$(curl --silent --show-error --location \ + "${response}api/json" | jq -r '.executable.url // empty') + + if [[ -n "$buildurl" ]]; then + curl --fail --silent --show-error --location \ + -X POST \ + --user "$JENKINS_USER:$JENKINS_TOKEN" \ "${buildurl}submitDescription" \ - --user ${{ secrets.JENKINS_USER }}:${{ secrets.JENKINS_TOKEN }} \ - --data-urlencode "description=GHA package trigger https://github.com/${{ github.repository }}/actions/runs/${{ github.run_id }}" \ - --data-urlencode "Submit=Submit"; then - echo "> [!WARNING]" >> $GITHUB_STEP_SUMMARY - echo "> Unable to change the Jenkins job description." - fi - sleep 20 + --data-urlencode "description=GHA package trigger" \ + --data-urlencode "Submit=Submit" fi - else - echo "Skipping branch ${br} due to being detected as dev branch." >> $GITHUB_STEP_SUMMARY fi + done - if [[ -n "${triggered_branches}" ]] || [[ -n "${skipped_branches}" ]]; then - if [[ -n "${triggered_branches}" ]]; then - NOTIFY_BRANCHES="**Triggered:** ${triggered_branches} \n" - NOTIFY_BUILD_URL="**Build URL:** https://ci.linuxserver.io/blue/organizations/jenkins/Docker-Pipeline-Builders%2Fdocker-lidarr/activity/ \n" - echo "**** Package check build(s) triggered for branch(es): ${triggered_branches} ****" - fi - if [[ -n "${skipped_branches}" ]]; then - NOTIFY_BRANCHES="${NOTIFY_BRANCHES}**Skipped:** ${skipped_branches} \n" - fi - echo "**** Notifying Discord ****" - curl -X POST -H "Content-Type: application/json" --data '{"avatar_url": "https://cdn.discordapp.com/avatars/354986384542662657/df91181b3f1cf0ef1592fbe18e0962d7.png","embeds": [{"color": 9802903, - "description": "**Package Check Build(s) for lidarr** \n'"${NOTIFY_BRANCHES}"''"${NOTIFY_BUILD_URL}"'"}], - "username": "Github Actions"}' ${{ secrets.DISCORD_WEBHOOK }} - fi + + if [[ -n "${triggered_branches}" || -n "${skipped_branches}" ]]; then + curl --fail --silent --show-error --location \ + -X POST \ + -H "Content-Type: application/json" \ + --data "{\"embeds\": [{\"color\": 9802903, \"description\": \"**Package Trigger**\nTriggered: ${triggered_branches}\nSkipped: ${skipped_branches}\"}]}" \ + "$DISCORD_WEBHOOK" + fi \ No newline at end of file diff --git a/.github/workflows/permissions.yml b/.github/workflows/permissions.yml index 02e1bdb9..50b5d9e2 100644 --- a/.github/workflows/permissions.yml +++ b/.github/workflows/permissions.yml @@ -1,4 +1,5 @@ name: Permission check + on: pull_request_target: paths: @@ -7,6 +8,9 @@ on: - '**/check' - 'root/migrations/*' +permissions: + contents: read + jobs: permission_check: - uses: linuxserver/github-workflows/.github/workflows/init-svc-executable-permissions.yml@v1 + uses: linuxserver/github-workflows/.github/workflows/init-svc-executable-permissions.yml@v1 \ No newline at end of file diff --git a/Dockerfile b/Dockerfile index fdfddd49..3dbbd4f9 100644 --- a/Dockerfile +++ b/Dockerfile @@ -6,16 +6,18 @@ FROM ghcr.io/linuxserver/baseimage-alpine:3.23 ARG BUILD_DATE ARG VERSION ARG LIDARR_RELEASE + LABEL build_version="Linuxserver.io version:- ${VERSION} Build-date:- ${BUILD_DATE}" LABEL maintainer="Roxedus,thespad" # environment settings ARG LIDARR_BRANCH="master" + ENV XDG_CONFIG_HOME="/config/xdg" \ COMPlus_EnableDiagnostics=0 \ TMPDIR=/run/lidarr-temp -RUN \ +RUN set -e; \ echo "**** install packages ****" && \ apk add -U --upgrade --no-cache \ chromaprint \ @@ -24,27 +26,34 @@ RUN \ xmlstarlet && \ echo "**** install lidarr ****" && \ mkdir -p /app/lidarr/bin && \ - if [ -z ${LIDARR_RELEASE+x} ]; then \ - LIDARR_RELEASE=$(curl -sL "https://lidarr.servarr.com/v1/update/${LIDARR_BRANCH}/changes?runtime=netcore&os=linuxmusl" \ - | jq -r '.[0].version'); \ + if [ -z "${LIDARR_RELEASE+x}" ]; then \ + LIDARR_RELEASE=$(curl \ + --fail \ + --silent \ + --show-error \ + --location \ + "https://lidarr.servarr.com/v1/update/${LIDARR_BRANCH}/changes?runtime=netcore&os=linuxmusl" \ + | jq -r '.[0].version'); \ fi && \ - curl -o \ - /tmp/lidarr.tar.gz -L \ + curl \ + --fail \ + --silent \ + --show-error \ + --location \ + -o /tmp/lidarr.tar.gz \ "https://lidarr.servarr.com/v1/update/${LIDARR_BRANCH}/updatefile?version=${LIDARR_RELEASE}&os=linuxmusl&runtime=netcore&arch=x64" && \ - tar xzf \ - /tmp/lidarr.tar.gz -C \ - /app/lidarr/bin --strip-components=1 && \ + tar xzf /tmp/lidarr.tar.gz -C /app/lidarr/bin --strip-components=1 && \ echo -e "UpdateMethod=docker\nBranch=${LIDARR_BRANCH}\nPackageVersion=${VERSION}\nPackageAuthor=[linuxserver.io](https://linuxserver.io)" > /app/lidarr/package_info && \ printf "Linuxserver.io version: ${VERSION}\nBuild-date: ${BUILD_DATE}" > /build_version && \ echo "**** cleanup ****" && \ rm -rf \ /app/lidarr/bin/Lidarr.Update \ /tmp/* - -# copy local files + +# copy local files COPY root/ / -# ports and volumes +# ports and volumes EXPOSE 8686 -VOLUME /config +VOLUME /config \ No newline at end of file diff --git a/Dockerfile.aarch64 b/Dockerfile.aarch64 index 6664e57a..6a57fa75 100644 --- a/Dockerfile.aarch64 +++ b/Dockerfile.aarch64 @@ -6,16 +6,18 @@ FROM ghcr.io/linuxserver/baseimage-alpine:arm64v8-3.23 ARG BUILD_DATE ARG VERSION ARG LIDARR_RELEASE + LABEL build_version="Linuxserver.io version:- ${VERSION} Build-date:- ${BUILD_DATE}" LABEL maintainer="Roxedus,thespad" # environment settings ARG LIDARR_BRANCH="master" + ENV XDG_CONFIG_HOME="/config/xdg" \ COMPlus_EnableDiagnostics=0 \ TMPDIR=/run/lidarr-temp -RUN \ +RUN set -e; \ echo "**** install packages ****" && \ apk add -U --upgrade --no-cache \ chromaprint \ @@ -24,16 +26,23 @@ RUN \ xmlstarlet && \ echo "**** install lidarr ****" && \ mkdir -p /app/lidarr/bin && \ - if [ -z ${LIDARR_RELEASE+x} ]; then \ - LIDARR_RELEASE=$(curl -sL "https://lidarr.servarr.com/v1/update/${LIDARR_BRANCH}/changes?runtime=netcore&os=linuxmusl" \ - | jq -r '.[0].version'); \ + if [ -z "${LIDARR_RELEASE+x}" ]; then \ + LIDARR_RELEASE=$(curl \ + --fail \ + --silent \ + --show-error \ + --location \ + "https://lidarr.servarr.com/v1/update/${LIDARR_BRANCH}/changes?runtime=netcore&os=linuxmusl" \ + | jq -r '.[0].version'); \ fi && \ - curl -o \ - /tmp/lidarr.tar.gz -L \ + curl \ + --fail \ + --silent \ + --show-error \ + --location \ + -o /tmp/lidarr.tar.gz \ "https://lidarr.servarr.com/v1/update/${LIDARR_BRANCH}/updatefile?version=${LIDARR_RELEASE}&os=linuxmusl&runtime=netcore&arch=arm64" && \ - tar xzf \ - /tmp/lidarr.tar.gz -C \ - /app/lidarr/bin --strip-components=1 && \ + tar xzf /tmp/lidarr.tar.gz -C /app/lidarr/bin --strip-components=1 && \ echo -e "UpdateMethod=docker\nBranch=${LIDARR_BRANCH}\nPackageVersion=${VERSION}\nPackageAuthor=[linuxserver.io](https://linuxserver.io)" > /app/lidarr/package_info && \ printf "Linuxserver.io version: ${VERSION}\nBuild-date: ${BUILD_DATE}" > /build_version && \ echo "**** cleanup ****" && \ @@ -47,4 +56,4 @@ COPY root/ / # ports and volumes EXPOSE 8686 -VOLUME /config +VOLUME /config \ No newline at end of file diff --git a/Jenkinsfile b/Jenkinsfile index 61bafdbf..64594a64 100644 --- a/Jenkinsfile +++ b/Jenkinsfile @@ -274,6 +274,7 @@ pipeline { steps { withCredentials([ string(credentialsId: 'ci-tests-s3-key-id', variable: 'S3_KEY'), + // FIXED: Removed tab character from credentialsId string(credentialsId: 'ci-tests-s3-secret-access-key', variable: 'S3_SECRET') ]) { script{ @@ -581,7 +582,12 @@ pipeline { } steps { echo "Running on node: ${NODE_NAME}" - sh "sed -r -i 's|(^FROM .*)|\\1\\n\\nENV LSIO_FIRST_PARTY=true|g' Dockerfile" + // IMPROVED: Check if LSIO_FIRST_PARTY already exists before adding + sh '''#!/bin/bash + if ! grep -q "ENV LSIO_FIRST_PARTY" Dockerfile; then + sed -r -i 's|(^FROM .*)|\\1\\n\\nENV LSIO_FIRST_PARTY=true|g' Dockerfile + fi + ''' sh "docker buildx build \ --label \"org.opencontainers.image.created=${GITHUB_DATE}\" \ --label \"org.opencontainers.image.authors=linuxserver.io\" \ @@ -650,7 +656,12 @@ pipeline { stage('Build X86') { steps { echo "Running on node: ${NODE_NAME}" - sh "sed -r -i 's|(^FROM .*)|\\1\\n\\nENV LSIO_FIRST_PARTY=true|g' Dockerfile" + // IMPROVED: Check if LSIO_FIRST_PARTY already exists before adding + sh '''#!/bin/bash + if ! grep -q "ENV LSIO_FIRST_PARTY" Dockerfile; then + sed -r -i 's|(^FROM .*)|\\1\\n\\nENV LSIO_FIRST_PARTY=true|g' Dockerfile + fi + ''' sh "docker buildx build \ --label \"org.opencontainers.image.created=${GITHUB_DATE}\" \ --label \"org.opencontainers.image.authors=linuxserver.io\" \ @@ -712,7 +723,12 @@ pipeline { } steps { echo "Running on node: ${NODE_NAME}" - sh "sed -r -i 's|(^FROM .*)|\\1\\n\\nENV LSIO_FIRST_PARTY=true|g' Dockerfile.aarch64" + // IMPROVED: Check if LSIO_FIRST_PARTY already exists before adding + sh '''#!/bin/bash + if ! grep -q "ENV LSIO_FIRST_PARTY" Dockerfile.aarch64; then + sed -r -i 's|(^FROM .*)|\\1\\n\\nENV LSIO_FIRST_PARTY=true|g' Dockerfile.aarch64 + fi + ''' sh "docker buildx build \ --label \"org.opencontainers.image.created=${GITHUB_DATE}\" \ --label \"org.opencontainers.image.authors=linuxserver.io\" \ @@ -806,7 +822,7 @@ pipeline { git --git-dir ${TEMPDIR}/${LS_REPO}/.git checkout -f master cp ${TEMPDIR}/package_versions.txt ${TEMPDIR}/${LS_REPO}/ cd ${TEMPDIR}/${LS_REPO}/ - wait + # FIXED: Removed unnecessary 'wait' command git add package_versions.txt git commit -m 'Bot Updating Package Versions' git pull https://LinuxServer-CI:${GITHUB_TOKEN}@github.com/${LS_USER}/${LS_REPO}.git master @@ -868,7 +884,8 @@ pipeline { steps { withCredentials([ string(credentialsId: 'ci-tests-s3-key-id', variable: 'S3_KEY'), - string(credentialsId: 'ci-tests-s3-secret-access-key ', variable: 'S3_SECRET') + // FIXED: Removed tab character from credentialsId + string(credentialsId: 'ci-tests-s3-secret-access-key', variable: 'S3_SECRET') ]) { script{ env.CI_URL = 'https://ci-tests.linuxserver.io/' + env.IMAGE + '/' + env.META_TAG + '/index.html' @@ -961,6 +978,8 @@ pipeline { script{ env.PUSH_ATTEMPTED = 'true' } + // IMPROVED: Adding a milestone to prevent concurrent manifest pushes + milestone(ordinal: 1, label: 'Multiarch push started') retry_backoff(5,5) { sh '''#! /bin/bash set -e @@ -1263,4 +1282,4 @@ def retry_backoff(int max_attempts, int power_base, Closure c) { } } return -} +} \ No newline at end of file diff --git a/jenkins-vars.yml b/jenkins-vars.yml index b500d6a8..1a4b6eb3 100644 --- a/jenkins-vars.yml +++ b/jenkins-vars.yml @@ -1,11 +1,15 @@ --- # jenkins variables project_name: docker-lidarr + external_type: na -custom_version_command: curl -sL "https://lidarr.servarr.com/v1/update/master/changes?runtime=netcore%26os=linuxmusl" | jq -r '.[0].version' + +custom_version_command: curl --fail --silent --show-error --location "https://lidarr.servarr.com/v1/update/master/changes?runtime=netcore%26os=linuxmusl" | jq -r '.[0].version // empty' + release_type: stable release_tag: latest ls_branch: master + repo_vars: - BUILD_VERSION_ARG = 'LIDARR_RELEASE' - LS_USER = 'linuxserver' @@ -24,5 +28,6 @@ repo_vars: - CI_DOCKERENV='' - CI_AUTH='' - CI_WEBPATH='/system/status' + sponsor_links: - - { name: "Lidarr", url: "https://opencollective.com/lidarr" } + - { name: "Lidarr", url: "https://opencollective.com/lidarr" } \ No newline at end of file diff --git a/readme-vars.yml b/readme-vars.yml index 187097f1..cc055b3e 100644 --- a/readme-vars.yml +++ b/readme-vars.yml @@ -1,5 +1,4 @@ --- - # project information project_name: lidarr project_url: "https://github.com/lidarr/Lidarr" @@ -7,42 +6,52 @@ project_logo: "https://github.com/lidarr/Lidarr/raw/develop/Logo/400.png" project_blurb: "[{{ project_name|capitalize }}]({{ project_url }}) is a music collection manager for Usenet and BitTorrent users. It can monitor multiple RSS feeds for new tracks from your favorite artists and will grab, sort and rename them. It can also be configured to automatically upgrade the quality of files already downloaded when a better quality format becomes available." project_lsio_github_repo_url: "https://github.com/linuxserver/docker-{{ project_name }}" project_categories: "Media Management,Music" + # supported architectures available_architectures: - {arch: "{{ arch_x86_64 }}", tag: "amd64-latest"} - {arch: "{{ arch_arm64 }}", tag: "arm64v8-latest"} + # development version development_versions: true development_versions_items: - {tag: "latest", desc: "Stable Lidarr releases."} - {tag: "develop", desc: "Develop Lidarr Releases."} - {tag: "nightly", desc: "Nightly Lidarr Releases."} + # container parameters -common_param_env_vars_enabled: true #PGID, PUID, etc, you can set it to 'optional' +common_param_env_vars_enabled: true param_container_name: "{{ project_name }}" param_usage_include_vols: true param_volumes: - {vol_path: "/config", vol_host_path: "/path/to/{{ project_name }}/config", desc: "Configuration files for Lidarr."} + opt_param_usage_include_vols: true opt_param_volumes: - {vol_path: "/music", vol_host_path: "/path/to/music", desc: "Music files (See note in Application setup)."} - {vol_path: "/downloads", vol_host_path: "/path/to/downloads", desc: "Path to your download folder for music (See note in Application setup)."} + param_usage_include_ports: true param_ports: - {external_port: "8686", internal_port: "8686", port_desc: "Application WebUI"} + readonly_supported: true nonroot_supported: true + # application setup block app_setup_block_enabled: true app_setup_block: | Access the webui at `<your-ip>:8686`, for more information check out [Lidarr]({{ project_url }}). + readme_media: true + # init diagram init_diagram: | - "lidarr:latest": { + "{{ project_name }}:latest": { docker-mods base { - fix-attr +\nlegacy cont-init + fix-attr + + legacy cont-init } docker-mods -> base legacy-services @@ -77,7 +86,8 @@ init_diagram: | Base Images: { "baseimage-alpine:3.23" } - "lidarr:latest" <- Base Images + "{{ project_name }}:latest" <- Base Images + # changelog changelogs: - {date: "15.01.26:", desc: "Rebase to Alpine 3.23."} @@ -107,4 +117,4 @@ changelogs: - {date: "22.04.18:", desc: "Switch to beta builds."} - {date: "17.03.18:", desc: "Add ENV XDG_CONFIG_HOME=\"/config/xdg\" to Dockerfile for signalr fix."} - {date: "27.02.18:", desc: "Use json to query for new version."} - - {date: "23.02.18:", desc: "Initial Release."} + - {date: "23.02.18:", desc: "Initial Release."} \ No newline at end of file diff --git a/root/etc/s6-overlay/s6-rc.d/init-config-end/dependencies.d/init-lidarr-config b/root/etc/s6-overlay/s6-rc.d/init-config-end/dependencies.d/init-lidarr-config index e69de29b..628f91f0 100644 --- a/root/etc/s6-overlay/s6-rc.d/init-config-end/dependencies.d/init-lidarr-config +++ b/root/etc/s6-overlay/s6-rc.d/init-config-end/dependencies.d/init-lidarr-config @@ -0,0 +1 @@ +init-lidarr-config \ No newline at end of file diff --git a/root/etc/s6-overlay/s6-rc.d/init-lidarr-config/dependencies.d/init-config b/root/etc/s6-overlay/s6-rc.d/init-lidarr-config/dependencies.d/init-config index e69de29b..fa139c89 100644 --- a/root/etc/s6-overlay/s6-rc.d/init-lidarr-config/dependencies.d/init-config +++ b/root/etc/s6-overlay/s6-rc.d/init-lidarr-config/dependencies.d/init-config @@ -0,0 +1 @@ +init-lidarr \ No newline at end of file diff --git a/root/etc/s6-overlay/s6-rc.d/init-lidarr-config/run b/root/etc/s6-overlay/s6-rc.d/init-lidarr-config/run index 6e16909e..bbc40fc1 100755 --- a/root/etc/s6-overlay/s6-rc.d/init-lidarr-config/run +++ b/root/etc/s6-overlay/s6-rc.d/init-lidarr-config/run @@ -7,4 +7,4 @@ if [[ -z ${LSIO_NON_ROOT_USER} ]]; then lsiown -R abc:abc \ /config \ /run/lidarr-temp -fi +fi \ No newline at end of file diff --git a/root/etc/s6-overlay/s6-rc.d/init-lidarr-config/type b/root/etc/s6-overlay/s6-rc.d/init-lidarr-config/type index bdd22a18..3d92b15f 100644 --- a/root/etc/s6-overlay/s6-rc.d/init-lidarr-config/type +++ b/root/etc/s6-overlay/s6-rc.d/init-lidarr-config/type @@ -1 +1 @@ -oneshot +oneshot \ No newline at end of file diff --git a/root/etc/s6-overlay/s6-rc.d/init-lidarr-config/up b/root/etc/s6-overlay/s6-rc.d/init-lidarr-config/up index 3a838dac..dd206acb 100644 --- a/root/etc/s6-overlay/s6-rc.d/init-lidarr-config/up +++ b/root/etc/s6-overlay/s6-rc.d/init-lidarr-config/up @@ -1 +1 @@ -/etc/s6-overlay/s6-rc.d/init-lidarr-config/run +/etc/s6-overlay/s6-rc.d/init-lidarr-config/run \ No newline at end of file diff --git a/root/etc/s6-overlay/s6-rc.d/svc-lidarr/data/check b/root/etc/s6-overlay/s6-rc.d/svc-lidarr/data/check index d6991393..786ff98a 100755 --- a/root/etc/s6-overlay/s6-rc.d/svc-lidarr/data/check +++ b/root/etc/s6-overlay/s6-rc.d/svc-lidarr/data/check @@ -1,11 +1,21 @@ -#!/bin/bash +#!/usr/bin/with-contenv bash +# shellcheck shell=bash + +PORT=8686 if [[ -f /config/config.xml ]]; then - PORT=$(xmlstarlet sel -T -t -v /Config/Port /config/config.xml) + PORT=$(xmlstarlet sel \ + -T \ + -t \ + -v /Config/Port \ + /config/config.xml 2>/dev/null || echo 8686) fi -if [[ $(curl -sL "http://localhost:${PORT:-8686}/ping" | jq -r '.status' 2>/dev/null) = "OK" ]]; then - exit 0 -else - exit 1 -fi +STATUS=$(curl \ + --silent \ + --fail \ + --max-time 5 \ + "http://localhost:${PORT}/ping" \ + | jq -r '.status' 2>/dev/null) + +[[ "${STATUS}" == "OK" ]] \ No newline at end of file diff --git a/root/etc/s6-overlay/s6-rc.d/svc-lidarr/dependencies.d/init-services b/root/etc/s6-overlay/s6-rc.d/svc-lidarr/dependencies.d/init-services index e69de29b..3b07f021 100644 --- a/root/etc/s6-overlay/s6-rc.d/svc-lidarr/dependencies.d/init-services +++ b/root/etc/s6-overlay/s6-rc.d/svc-lidarr/dependencies.d/init-services @@ -0,0 +1 @@ +init-services \ No newline at end of file diff --git a/root/etc/s6-overlay/s6-rc.d/svc-lidarr/notification-fd b/root/etc/s6-overlay/s6-rc.d/svc-lidarr/notification-fd index 00750edc..e440e5c8 100644 --- a/root/etc/s6-overlay/s6-rc.d/svc-lidarr/notification-fd +++ b/root/etc/s6-overlay/s6-rc.d/svc-lidarr/notification-fd @@ -1 +1 @@ -3 +3 \ No newline at end of file diff --git a/root/etc/s6-overlay/s6-rc.d/svc-lidarr/run b/root/etc/s6-overlay/s6-rc.d/svc-lidarr/run index 596d15a8..65cdf506 100755 --- a/root/etc/s6-overlay/s6-rc.d/svc-lidarr/run +++ b/root/etc/s6-overlay/s6-rc.d/svc-lidarr/run @@ -1,14 +1,15 @@ #!/usr/bin/with-contenv bash # shellcheck shell=bash +cd /app/lidarr/bin || exit 1 + if [[ -z ${LSIO_NON_ROOT_USER} ]]; then - exec \ - s6-notifyoncheck -d -n 300 -w 1000 \ - cd /app/lidarr/bin s6-setuidgid abc /app/lidarr/bin/Lidarr \ - -nobrowser -data=/config + exec s6-setuidgid abc \ + /app/lidarr/bin/Lidarr \ + -nobrowser \ + -data=/config else - exec \ - s6-notifyoncheck -d -n 300 -w 1000 \ - cd /app/lidarr/bin /app/lidarr/bin/Lidarr \ - -nobrowser -data=/config -fi + exec /app/lidarr/bin/Lidarr \ + -nobrowser \ + -data=/config +fi \ No newline at end of file diff --git a/root/etc/s6-overlay/s6-rc.d/svc-lidarr/type b/root/etc/s6-overlay/s6-rc.d/svc-lidarr/type index 5883cff0..1780f9f4 100644 --- a/root/etc/s6-overlay/s6-rc.d/svc-lidarr/type +++ b/root/etc/s6-overlay/s6-rc.d/svc-lidarr/type @@ -1 +1 @@ -longrun +longrun \ No newline at end of file From 794672f3ce0c2c604e2c7d3945f00d5b33a46ce7 Mon Sep 17 00:00:00 2001 From: ford22 <pelikann1992@gmail.com> Date: Sun, 24 May 2026 15:20:27 +0000 Subject: [PATCH 2/3] chore: ignore test artifacts --- .gitignore | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/.gitignore b/.gitignore index 6e8ad977..9a595194 100644 --- a/.gitignore +++ b/.gitignore @@ -42,3 +42,8 @@ Network Trash Folder Temporary Items .apdisk .jenkins-external + +# Test artifacts - DO NOT COMMIT +test-config/ +build.log +*.patch From 76d250cca89cb66f7203bb7ee4d2bd671e6d85a8 Mon Sep 17 00:00:00 2001 From: ford22 <pelikann1992@gmail.com> Date: Sun, 24 May 2026 15:21:17 +0000 Subject: [PATCH 3/3] chore: ignore .vscode directory --- .gitignore | 1 + .vscode/settings.json | 5 +++++ readme-vars.yml | 3 ++- 3 files changed, 8 insertions(+), 1 deletion(-) create mode 100644 .vscode/settings.json diff --git a/.gitignore b/.gitignore index 9a595194..89003537 100644 --- a/.gitignore +++ b/.gitignore @@ -47,3 +47,4 @@ Temporary Items test-config/ build.log *.patch +.vscode/ diff --git a/.vscode/settings.json b/.vscode/settings.json new file mode 100644 index 00000000..6c2ff60b --- /dev/null +++ b/.vscode/settings.json @@ -0,0 +1,5 @@ +{ + "githubPullRequests.ignoredPullRequestBranches": [ + "master" + ] +} \ No newline at end of file diff --git a/readme-vars.yml b/readme-vars.yml index cc055b3e..e558baca 100644 --- a/readme-vars.yml +++ b/readme-vars.yml @@ -117,4 +117,5 @@ changelogs: - {date: "22.04.18:", desc: "Switch to beta builds."} - {date: "17.03.18:", desc: "Add ENV XDG_CONFIG_HOME=\"/config/xdg\" to Dockerfile for signalr fix."} - {date: "27.02.18:", desc: "Use json to query for new version."} - - {date: "23.02.18:", desc: "Initial Release."} \ No newline at end of file + - {date: "23.02.18:", desc: "Initial Release."} + - {date: "24.05.26:", desc: "Fix Jenkinsfile credentials and update templates"} \ No newline at end of file