{"id":15925996,"url":"https://github.com/griefed/gitlab-ci-cd","last_synced_at":"2026-03-16T11:01:20.669Z","repository":{"id":52957521,"uuid":"384680304","full_name":"Griefed/gitlab-ci-cd","owner":"Griefed","description":"Provides GitLab Semantic Release, buildx, git, JDK 8, NodeJS, discord.sh for Griefed's GitLab CI/CD pipelines.","archived":false,"fork":false,"pushed_at":"2025-03-01T11:15:29.000Z","size":122,"stargazers_count":4,"open_issues_count":0,"forks_count":3,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-03-19T03:57:33.952Z","etag":null,"topics":["buildx","cicd","discord-webhook","docker","gitlab","jdk8","nodejs","quasar-framework","semantic-release"],"latest_commit_sha":null,"homepage":"","language":"Dockerfile","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/Griefed.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2021-07-10T11:20:34.000Z","updated_at":"2025-03-01T11:15:32.000Z","dependencies_parsed_at":"2024-02-01T12:29:43.553Z","dependency_job_id":"705284ad-70a8-4ca8-a435-c60794b89e06","html_url":"https://github.com/Griefed/gitlab-ci-cd","commit_stats":null,"previous_names":[],"tags_count":48,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Griefed%2Fgitlab-ci-cd","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Griefed%2Fgitlab-ci-cd/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Griefed%2Fgitlab-ci-cd/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Griefed%2Fgitlab-ci-cd/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Griefed","download_url":"https://codeload.github.com/Griefed/gitlab-ci-cd/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":245289756,"owners_count":20591127,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["buildx","cicd","discord-webhook","docker","gitlab","jdk8","nodejs","quasar-framework","semantic-release"],"created_at":"2024-10-06T22:21:00.967Z","updated_at":"2026-03-16T11:01:20.570Z","avatar_url":"https://github.com/Griefed.png","language":"Dockerfile","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Sources, GitHub, GitLab and Mirroring and all that good stuff\n\nRepositories on GitHub are now for issues only. I've set up my own installation of GitLab and moved all my repositories over to [Git.Griefed.de](https://git.griefed.de/users/Griefed/projects). Make sure to check there first for the latest code before opening an issue on GitHub.\n\nFor questions, you can always join my [Discord server](https://discord.griefed.de) and talk to me there.\n\n---\n\n# gitlab-ci-cd\nProvides GitLab Semantic Release, buildx, JDK 8, NodeJS for Griefed's GitLab CI/CD pipelines.\n\nCombines:\n- [docker-buildx](https://git.griefed.de/prosper/docker-with-buildx)\n- JDK8\n- [GitLab Semantic Release](https://git.griefed.de/prosper/gitlab-semantic-release)\n- NodeJS\n- Docker-in-Docker\n- [discord.sh](https://github.com/ChaoticWeg/discord.sh)\n- git\n- [act](https://github.com/nektos/act)\n\n# act\n\nact requires a `.actrc`-file to be present in the executing users home directory, so `~/.actrc`. For information about the contents and configuration of this file, see [nektos/act#first-run](https://github.com/nektos/act#first-act-run) and [nektos/act#configuration](https://github.com/nektos/act#configuration)\n\n# discord.sh example\n\n## GitLab\n\n:warning: **Requires CI/CD variable `AVATAR_IMAGE_URL`**\n\n:warning: **Requires CI/CD variable `AUTHOR_ICON_URL`**\n\n:warning: **Requires CI/CD variable `IMAGE_URL`**\n\n:warning: **Requires CI/CD variable `THUMBNAIL_URL`**\n\n:warning: **Requires CI/CD variable `FOOTER_ICON_URL`**\n\n```yml\nInform About Release:\n  stage: Build Release\n  image: ghcr.io/griefed/gitlab-ci-cd:2.0.9\n  needs:\n    - job: Build Release\n      artifacts: false\n    - job: Build Docker Release\n      artifacts: false\n      optional: true\n    - job: Build Docker PreRelease\n      artifacts: false\n      optional: true\n  script:\n    - /discord.sh\n      --webhook-url=\"$WEBHOOK_URL\"\n      --username \"$CI_PROJECT_TITLE\"\n      --avatar \"${AVATAR_IMAGE_URL}\"\n      --text \"There's been a new release for ${CI_PROJECT_TITLE}. The new version is ${CI_COMMIT_TAG} and is available at \u003c${CI_PROJECT_URL}/-/releases/${CI_COMMIT_TAG}\u003e\"\n      --title \"New ${CI_PROJECT_TITLE} Release\"\n      --description \"There's been a new release for ${CI_PROJECT_TITLE}. The new version is ${CI_COMMIT_TAG} and is available at ${CI_PROJECT_URL}/-/releases/${CI_COMMIT_TAG}\"\n      --color \"0xC0FFEE\"\n      --url \"${CI_PROJECT_URL}/-/releases/${CI_COMMIT_TAG}\"\n      --author \"${CI_PROJECT_NAMESPACE}\"\n      --author-url \"https://${CI_SERVER_HOST}/${CI_PROJECT_NAMESPACE}\"\n      --author-icon \"${AUTHOR_ICON_URL}\"\n      --image \"${IMAGE_URL}\"\n      --thumbnail \"${THUMBNAIL_URL}\"\n      --field \"Author;[${CI_PROJECT_NAMESPACE}](https://${CI_SERVER_HOST}/${CI_PROJECT_NAMESPACE})\"\n      --field \"Platform;[${CI_SERVER_HOST}](https://${CI_SERVER_HOST})\"\n      --footer \"Released at $CI_JOB_STARTED_AT\"\n      --footer-icon \"${FOOTER_ICON_URL}\"\n  rules:\n    - if: '$CI_COMMIT_TAG =~ /^\\d+\\.\\d+\\.\\d+-(alpha|beta)\\.\\d+$/'\n    - if: '$CI_COMMIT_TAG =~ /^\\d+\\.\\d+\\.\\d+$/'\n```\n\n## Example\n\n![embed](https://i.griefed.de/images/2022/08/04/grafik.png)\n\n# buildx Example\n\n```yml\ntest docker:\n  stage: test\n  image: ghcr.io/griefed/gitlab-ci-cd:2.0.9\n  before_script:\n    - docker login -u \"$DOCKERHUB_USER\" -p \"$DOCKERHUB_TOKEN\" docker.io\n    - docker login -u \"$CI_REGISTRY_USER\" -p \"$CI_REGISTRY_PASSWORD\" $CI_REGISTRY\n    - docker login -u \"$DOCKERHUB_USER\" -p \"$GITHUB_TOKEN\" ghcr.io\n    - docker run --rm --privileged multiarch/qemu-user-static --reset -p yes\n    - docker buildx create --use --name grfdbuilder\n  script:\n    - docker buildx build\n      --push\n      --no-cache\n      --platform linux/amd64,linux/arm64,linux/arm/v7\n      --tag \"index.docker.io/$DOCKERHUB_USER/$DOCKERHUB_REPO:develop-$CI_COMMIT_SHORT_SHA\"\n      --tag \"ghcr.io/$DOCKERHUB_USER/$DOCKERHUB_REPO:develop-$CI_COMMIT_SHORT_SHA\" .\n  except:\n    refs:\n      - tags\n    variables:\n      - '$CI_COMMIT_TITLE =~ /^RELEASE:.+$/ || $CI_PIPELINE_SOURCE == \"schedule\"'\n```\n\n# GitLab Semantic Release example\n\n## Setup \n\n:warning: **Requires CI/CD variable `GITLAB_TOKEN` with personal-access-token (read/write permision to registry and repository).**\n\n:warning: **Requires CI/CD variable `DOCKERHUB_USER` with lowercase username of the Dockerhub repository owner where the image will be pushed to.**\n\n:warning: **Requires CI/CD variable `DOCKERHUB_REPO` with lowercase name of the Dockerhub repository where the image will be pushed to.**\n\n:warning: **Requires CI/CD variable `DOCKERHUB_TOKEN` with personal-access-token to Docherhub.**\n\nCurrently it's doing:\n- bump up semantic version (major/minor/patch) according to commits \n- create tag with release version\n- create release for new tag\n- update [CHANGELOG.md](CHANGELOG.md) with release notes generated from commits\n- commit \u0026 push all above steps\n\n## Example configs\n\n### GitLab Runner config.toml\n\nExample config.toml for a GitLab-Runner which works with a dockerized GitLab and multiarch Docker images using buildx:\n\n```toml\nconcurrent = 1\ncheck_interval = 0\n\n[session_server]\n  session_timeout = 1800\n\n[[runners]]\n  name = \"Runner-One\"\n  url = \"https://url.to.your.gitlab\"\n  token = \"token_generated_by_runner_registration\"\n  executor = \"docker\"\n  environment = [\"DOCKER_TLS_CERTDIR=\"]\n  [runners.custom_build_dir]\n  [runners.cache]\n    [runners.cache.s3]\n    [runners.cache.gcs]\n    [runners.cache.azure]\n  [runners.docker]\n    tls_verify = false\n    image = \"ubuntu:20.04\"\n    privileged = true\n    disable_entrypoint_overwrite = false\n    oom_kill_disable = false\n    disable_cache = false\n    cache_dir = \"/cache\"\n    volumes = [\"/var/run/docker.sock:/var/run/docker.sock\", \"/cache\"]\n    shm_size = 0\n```\n\n### GitLab .gitlab-ci.yml\n\nExample of a GitLab CI comosed of three stages: test, release and build\n\n```yml\nstages:\n  - test\n  - release\n  - build\n\nservices:\n  - name: ghcr.io/griefed/gitlab-ci-cd:2.0.9\n    alias: docker\n\nimage: ghcr.io/griefed/gitlab-ci-cd:2.0.9\n\nvariables:\n  project_name: $CI_PROJECT_NAME\n  SEMANTIC_RELEASE_PACKAGE: $CI_PROJECT_NAME\n\nworkflow:\n  rules:\n    - if: '$CI_MERGE_REQUEST_EVENT_TYPE == \"detached\"'\n      when: never\n    - if: '$CI_PIPELINE_SOURCE == \"merge_request_event\"'\n      when: never\n    - when: always\n\ntest docker:\n  stage: test\n  image: ghcr.io/griefed/gitlab-ci-cd:2.0.9\n  before_script:\n    - docker login -u \"$DOCKERHUB_USER\" -p \"$DOCKERHUB_TOKEN\" docker.io\n    - docker login -u \"$CI_REGISTRY_USER\" -p \"$CI_REGISTRY_PASSWORD\" $CI_REGISTRY\n    - docker login -u \"$DOCKERHUB_USER\" -p \"$GITHUB_TOKEN\" ghcr.io\n    - docker run --rm --privileged multiarch/qemu-user-static --reset -p yes\n    - docker buildx create --use --name grfdbuilder\n  script:\n    - docker buildx build\n      --push\n      --no-cache\n      --platform linux/amd64,linux/arm64,linux/arm/v7\n      --tag \"index.docker.io/$DOCKERHUB_USER/$DOCKERHUB_REPO:develop-$CI_COMMIT_SHORT_SHA\"\n      --tag \"ghcr.io/$DOCKERHUB_USER/$DOCKERHUB_REPO:develop-$CI_COMMIT_SHORT_SHA\" .\n  except:\n    refs:\n      - tags\n    variables:\n      - '$CI_COMMIT_TITLE =~ /^RELEASE:.+$/ || $CI_PIPELINE_SOURCE == \"schedule\"'\n\nrelease:\n  needs: ['test docker']\n  image: ghcr.io/griefed/gitlab-ci-cd:2.0.9\n  stage: release\n  script:\n    - npx semantic-release\n  only:\n    - main\n  except:\n    refs:\n      - tags\n    variables:\n      - '$CI_COMMIT_TITLE =~ /^RELEASE:.+$/ || $CI_PIPELINE_SOURCE == \"schedule\"'\n\nbuild:\n  stage: build\n  image: ghcr.io/griefed/gitlab-ci-cd:2.0.9\n  before_script:\n    - docker login -u \"$DOCKERHUB_USER\" -p \"$DOCKERHUB_TOKEN\" docker.io\n    - docker login -u \"$CI_REGISTRY_USER\" -p \"$CI_REGISTRY_PASSWORD\" $CI_REGISTRY\n    - docker login -u \"$DOCKERHUB_USER\" -p \"$GITHUB_TOKEN\" ghcr.io\n    - docker run --rm --privileged multiarch/qemu-user-static --reset -p yes\n    - docker buildx create --use --name grfdbuilder\n  script:\n    - docker buildx build\n      --push\n      --no-cache\n      --platform linux/amd64,linux/arm64,linux/arm/v7\n      --tag \"ghcr.io/$DOCKERHUB_USER/$DOCKERHUB_REPO:$CI_COMMIT_TAG\"\n      --tag \"ghcr.io/$DOCKERHUB_USER/$DOCKERHUB_REPO:latest\"\n      --tag \"index.docker.io/$DOCKERHUB_USER/$DOCKERHUB_REPO:$CI_COMMIT_TAG\"\n      --tag \"index.docker.io/$DOCKERHUB_USER/$DOCKERHUB_REPO:latest\" .\n  only:\n    - tags\n```\n\n### Semantic-Release .releaserc.yml\n\nExample config for changelog, tag and release generating config file using conventional commits.\n\n```yml\nbranches: ['master','main']\nci: true\ndebug: true\ndryRun: false\ntagFormat: '${version}'\n\n# Global plugin options (will be passed to all plugins)\npreset: 'conventionalcommits'\ngitlabUrl: 'https://git.griefed.de/' # your gitlab url\n\n# Responsible for verifying conditions necessary to proceed with the release:\n# configuration is correct, authentication token are valid, etc...\nverifyConditions:\n  - '@semantic-release/changelog'\n  - '@semantic-release/git'\n  - '@semantic-release/gitlab'\n\n# Responsible for determining the type of the next release (major, minor or patch).\n# If multiple plugins with a analyzeCommits step are defined, the release type will be\n# the highest one among plugins output.\n# Look details at: https://github.com/semantic-release/commit-analyzer#configuration\nanalyzeCommits:\n  - path: '@semantic-release/commit-analyzer'\n    releaseRules:\n      - type: breaking  # Changes that break something makes something incompatible to ealier version\n        release: major\n      - type: build     # Changes that affect the build system or external dependencies\n        release: patch\n      - type: chore     # Other changes that don't modify src or test files\n        release: false\n      - type: ci        # Changes to our CI configuration files and scripts\n        release: false\n      - type: docs      # Documentation only changes\n        release: false\n      - type: feat      # A new feature\n        release: minor\n      - type: fix       # A bug fix\n        release: patch\n      - type: perf      # A code change that improves performance\n        release: patch\n      - type: refactor  # A code change that neither fixes a bug nor adds a feature\n        release: false\n      - type: revert    # Reverts a previous commit\n        release: patch\n      - type: style     # Changes that do not affect the meaning of the code\n        release: false\n      - type: test      # Adding missing tests or correcting existing tests\n        release: false\n\n# Responsible for generating the content of the release note.\n# If multiple plugins with a generateNotes step are defined,\n# the release notes will be the result of the concatenation of each plugin output.\ngenerateNotes:\n  - path: '@semantic-release/release-notes-generator'\n    writerOpts:\n      groupBy: 'type'\n      commitGroupsSort: 'title'\n      commitsSort: 'header'\n    linkCompare: true\n    linkReferences: true\n    presetConfig:\n      types:  # looks like it only works with 'conventionalcommits' preset\n        - type: 'build'\n          section: '🦊 CI/CD'\n          hidden: false\n        - type: 'chore'\n          section: 'Other'\n          hidden: false\n        - type: 'ci'\n          section: '🦊 CI/CD'\n          hidden: false\n        - type: 'docs'\n          section: '📔 Docs'\n          hidden: false\n        - type: 'example'\n          section: '📝 Examples'\n          hidden: false\n        - type: 'feat'\n          section: '🚀 Features'\n          hidden: false\n        - type: 'fix'\n          section: '🛠 Fixes'\n          hidden: false\n        - type: 'perf'\n          section: '⏩ Performance'\n          hidden: false\n        - type: 'refactor'\n          section: ':scissors: Refactor'\n          hidden: false\n        - type: 'revert'\n          section: '👀 Reverts'\n          hidden: false\n        - type: 'style'\n          section: '💈 Style'\n          hidden: false\n        - type: 'test'\n          section: '🧪 Tests'\n          hidden: false\n\n# Responsible for preparing the release, for example creating or updating files\n# such as package.json, CHANGELOG.md, documentation or compiled assets\n# and pushing a commit.\nprepare:\n  # - path: '@semantic-release/exec'\n  #   # Execute shell command to set package version\n  #   cmd: './deployment/version-plaintext-set.sh ${nextRelease.version}'\n  # - path: '@semantic-release/exec'\n  #   cmd: './deployment/version-oas-set.sh ${nextRelease.version} openapi.yaml'\n  # - path: '@semantic-release/exec'\n  #   verifyReleaseCmd: \"echo ${nextRelease.version} \u003e VERSION.txt\"\n  - path: '@semantic-release/changelog'\n    # Create or update the changelog file in the local project repository\n  - path: '@semantic-release/git'\n    # Push a release commit and tag, including configurable files\n    message: 'RELEASE: ${nextRelease.version}'\n    assets: ['CHANGELOG.md']\n\n# Responsible for publishing the release.\npublish:\n  - path: '@semantic-release/gitlab'\n    # Publish a GitLab release\n    #  (https://docs.gitlab.com/ce/user/project/releases/index.html#add-release-notes-to-git-tags)\n\nsuccess: false\n\nfail: false\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fgriefed%2Fgitlab-ci-cd","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fgriefed%2Fgitlab-ci-cd","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fgriefed%2Fgitlab-ci-cd/lists"}