{
 "merge_request": {
  "id": 235,
  "iid": 29,
  "project_id": 402,
  "title": "gitlab-ci: fix build on merge request with unset variables",
  "description": "A Gitlab \"rules\" -> \"if:\" check needs an explicit check against \"null\"\nto check for an undefined/empty variable:\n\nOtherwise it will fail with a \"yaml error\" and the following\n(misleading) error:\n\n```\nUnable to create pipeline\n\n    'sign manifest' job needs 'build-all: [ath79-generic]' job, but 'build-all: [ath79-generic]' is not in any previous stage\n    'sign manifest' job needs 'build-all: [ath79-nand]' job, but 'build-all: [ath79-nand]' is not in any previous stage\n    'sign manifest' job needs 'build-all: [ath79-mikrotik]' job, but 'build-all: [ath79-mikrotik]' is not in any previous stage\n    'sign manifest' job needs 'build-all: [bcm27xx-bcm2708]' job, but 'build-all: [bcm27xx-bcm2708]' is not in any previous stage\n    'sign manifest' job needs 'build-all: [bcm27xx-bcm2709]' job, but 'build-all: [bcm27xx-bcm2709]' is not in any previous stage\n    'sign manifest' job needs 'build-all: [ipq40xx-generic]' job, but 'build-all: [ipq40xx-generic]' is not in any previous stage\n    'sign manifest' job needs 'build-all: [ipq40xx-mikrotik]' job, but 'build-all: [ipq40xx-mikrotik]' is not in any previous stage\n    'sign manifest' job needs 'build-all: [ipq806x-generic]' job, but 'build-all: [ipq806x-generic]' is not in any previous stage\n    'sign manifest' job needs 'build-all: [lantiq-xrx200]' job, but 'build-all: [lantiq-xrx200]' is not in any previous stage\n    'sign manifest' job needs 'build-all: [lantiq-xway]' job, but 'build-all: [lantiq-xway]' is not in any previous stage\n    'sign manifest' job needs 'build-all: [mediatek-mt7622]' job, but 'build-all: [mediatek-mt7622]' is not in any previous stage\n    'sign manifest' job needs 'build-all: [mpc85xx-p1010]' job, but 'build-all: [mpc85xx-p1010]' is not in any previous stage\n    'sign manifest' job needs 'build-all: [mpc85xx-p1020]' job, but 'build-all: [mpc85xx-p1020]' is not in any previous stage\n    'sign manifest' job needs 'build-all: [ramips-mt7620]' job, but 'build-all: [ramips-mt7620]' is not in any previous stage\n    'sign manifest' job needs 'build-all: [ramips-mt7621]' job, but 'build-all: [ramips-mt7621]' is not in any previous stage\n    'sign manifest' job needs 'build-all: [ramips-mt76x8]' job, but 'build-all: [ramips-mt76x8]' is not in any previous stage\n    'sign manifest' job needs 'build-all: [rockchip-armv8]' job, but 'build-all: [rockchip-armv8]' is not in any previous stage\n    'sign manifest' job needs 'build-all: [sunxi-cortexa7]' job, but 'build-all: [sunxi-cortexa7]' is not in any previous stage\n    'sign manifest' job needs 'build-all: [x86-generic]' job, but 'build-all: [x86-generic]' is not in any previous stage\n    'sign manifest' job needs 'build-all: [x86-geode]' job, but 'build-all: [x86-geode]' is not in any previous stage\n    'sign manifest' job needs 'build-all: [x86-legacy]' job, but 'build-all: [x86-legacy]' is not in any previous stage\n    'sign manifest' job needs 'build-all: [x86-64]' job, but 'build-all: [x86-64]' is not in any previous stage\n    'sign manifest' job needs 'generate manifest' job, but 'generate manifest' is not in any previous stage\n    'upload' job needs 'generate manifest' job, but 'generate manifest' is not in any previous stage\n    'upload-package-registry' job needs 'generate manifest' job, but 'generate manifest' is not in any previous stage\n```\n\nLink: https://docs.gitlab.com/ee/ci/jobs/job_control.html#check-if-a-variable-is-undefined\nSigned-off-by: Linus L\u00fcssing <linus.luessing@c0d3.blue>",
  "state": "closed",
  "created_at": "2023-12-07T06:12:01.602Z",
  "updated_at": "2023-12-07T08:10:03.957Z",
  "merged_by": null,
  "merge_user": null,
  "merged_at": null,
  "closed_by": {
   "id": 4,
   "username": "tux",
   "public_email": "",
   "name": "Linus L\u00fcssing",
   "state": "active",
   "locked": false,
   "avatar_url": "https://secure.gravatar.com/avatar/136494b2c221809b086123f59384d25e22cd3d2131230a809b06551e12ba7bbb?s=80&d=identicon",
   "web_url": "https://git.chaotikum.org/tux"
  },
  "closed_at": "2023-12-07T08:10:03.972Z",
  "target_branch": "master",
  "source_branch": "pr-fix-merge-request-signing-key-check",
  "user_notes_count": 1,
  "upvotes": 0,
  "downvotes": 0,
  "author": {
   "id": 4,
   "username": "tux",
   "public_email": "",
   "name": "Linus L\u00fcssing",
   "state": "active",
   "locked": false,
   "avatar_url": "https://secure.gravatar.com/avatar/136494b2c221809b086123f59384d25e22cd3d2131230a809b06551e12ba7bbb?s=80&d=identicon",
   "web_url": "https://git.chaotikum.org/tux"
  },
  "assignees": [],
  "assignee": null,
  "reviewers": [],
  "source_project_id": 552,
  "target_project_id": 402,
  "labels": [],
  "draft": false,
  "imported": false,
  "imported_from": "none",
  "work_in_progress": false,
  "milestone": null,
  "merge_when_pipeline_succeeds": false,
  "merge_status": "can_be_merged",
  "detailed_merge_status": "not_open",
  "merge_after": null,
  "sha": "18505260ca6f8a995ea12c98b0876fcd008a951e",
  "merge_commit_sha": null,
  "squash_commit_sha": null,
  "discussion_locked": null,
  "should_remove_source_branch": null,
  "force_remove_source_branch": true,
  "prepared_at": "2023-12-07T06:12:04.144Z",
  "allow_collaboration": true,
  "allow_maintainer_to_push": true,
  "reference": "!29",
  "references": {
   "short": "!29",
   "relative": "!29",
   "full": "freifunk-luebeck/site-ffhl!29"
  },
  "web_url": "https://git.chaotikum.org/freifunk-luebeck/site-ffhl/-/merge_requests/29",
  "time_stats": {
   "time_estimate": 0,
   "total_time_spent": 0,
   "human_time_estimate": null,
   "human_total_time_spent": null
  },
  "squash": false,
  "squash_on_merge": false,
  "task_completion_status": {
   "count": 0,
   "completed_count": 0
  },
  "has_conflicts": false,
  "blocking_discussions_resolved": true
 },
 "discussions": [
  {
   "id": "2bd101646fda135942b1481e3ec6347cad5613fe",
   "reply_id": "2bd101646fda135942b1481e3ec6347cad5613fe",
   "project_id": 402,
   "commit_id": null,
   "confidential": false,
   "diff_discussion": false,
   "expanded": true,
   "for_commit": false,
   "individual_note": true,
   "resolvable": false,
   "discussion_path": null,
   "resolved": false,
   "resolved_by_push": false,
   "resolved_by": null,
   "resolved_at": null,
   "resolve_path": "/freifunk-luebeck/site-ffhl/-/merge_requests/29/discussions/2bd101646fda135942b1481e3ec6347cad5613fe/resolve",
   "resolve_with_issue_path": "/freifunk-luebeck/site-ffhl/-/issues/new?discussion_to_resolve=2bd101646fda135942b1481e3ec6347cad5613fe&merge_request_id=235&merge_request_to_resolve_discussions_of=29",
   "notes": [
    {
     "id": "2578",
     "type": null,
     "author": {
      "id": 4,
      "username": "tux",
      "public_email": "",
      "name": "Linus L\u00fcssing",
      "state": "active",
      "locked": false,
      "avatar_url": "https://secure.gravatar.com/avatar/136494b2c221809b086123f59384d25e22cd3d2131230a809b06551e12ba7bbb?s=80&d=identicon",
      "status_tooltip_html": null,
      "show_status": false,
      "availability": null,
      "path": "/tux",
      "bot": false,
      "user_type": "human"
     },
     "created_at": "2023-12-07T08:10:03.696Z",
     "updated_at": "2023-12-07T08:10:03.696Z",
     "system": false,
     "noteable_id": 235,
     "noteable_type": "MergeRequest",
     "project_id": 402,
     "resolvable": false,
     "confidential": false,
     "internal": false,
     "imported": false,
     "imported_from": "none",
     "noteable_iid": 29,
     "commands_changes": {},
     "external_author": null,
     "note": "does not fix it, therefore closing",
     "note_html": "<p data-sourcepos=\"1:1-1:34\" dir=\"auto\">does not fix it, therefore closing</p>",
     "body_first_line_html": "<p>does not fix it, therefore closing</p>",
     "current_user": {
      "can_edit": false,
      "can_award_emoji": false,
      "can_resolve": false,
      "can_resolve_discussion": false
     },
     "suggestions": [],
     "resolved": false,
     "resolved_by": null,
     "resolved_by_push": false,
     "is_noteable_author": true,
     "discussion_id": "2bd101646fda135942b1481e3ec6347cad5613fe",
     "emoji_awardable": true,
     "award_emoji": [],
     "report_abuse_path": "/-/abuse_reports/add_category",
     "noteable_note_url": "https://git.chaotikum.org/freifunk-luebeck/site-ffhl/-/merge_requests/29#note_2578",
     "cached_markdown_version": 2162688,
     "human_access": "Owner",
     "is_contributor": false,
     "project_name": "site-ffhl",
     "toggle_award_path": "/freifunk-luebeck/site-ffhl/notes/2578/toggle_award_emoji",
     "path": "/freifunk-luebeck/site-ffhl/notes/2578"
    }
   ]
  },
  {
   "id": "8600a365fee32e03dc3a1d5c2aa74b175d774ee8",
   "reply_id": "8600a365fee32e03dc3a1d5c2aa74b175d774ee8",
   "project_id": 402,
   "commit_id": null,
   "confidential": false,
   "diff_discussion": false,
   "expanded": true,
   "for_commit": false,
   "individual_note": true,
   "resolvable": false,
   "discussion_path": null,
   "resolved": false,
   "resolved_by_push": false,
   "resolved_by": null,
   "resolved_at": null,
   "resolve_path": "/freifunk-luebeck/site-ffhl/-/merge_requests/29/discussions/8600a365fee32e03dc3a1d5c2aa74b175d774ee8/resolve",
   "resolve_with_issue_path": "/freifunk-luebeck/site-ffhl/-/issues/new?discussion_to_resolve=8600a365fee32e03dc3a1d5c2aa74b175d774ee8&merge_request_id=235&merge_request_to_resolve_discussions_of=29",
   "notes": [
    {
     "id": "8600a365fee32e03dc3a1d5c2aa74b175d774ee8",
     "type": "StateNote",
     "author": {
      "id": 4,
      "username": "tux",
      "public_email": "",
      "name": "Linus L\u00fcssing",
      "state": "active",
      "locked": false,
      "avatar_url": "https://secure.gravatar.com/avatar/136494b2c221809b086123f59384d25e22cd3d2131230a809b06551e12ba7bbb?s=80&d=identicon",
      "status_tooltip_html": null,
      "show_status": false,
      "availability": null,
      "path": "/tux",
      "bot": false,
      "user_type": "human"
     },
     "created_at": "2023-12-07T08:10:03.990Z",
     "updated_at": "2023-12-07T08:10:03.990Z",
     "system": true,
     "noteable_id": 235,
     "noteable_type": "MergeRequest",
     "project_id": 402,
     "resolvable": false,
     "confidential": false,
     "internal": false,
     "imported": false,
     "imported_from": "none",
     "noteable_iid": 29,
     "commands_changes": {},
     "external_author": null,
     "note": "closed",
     "note_html": "<p data-sourcepos=\"1:1-1:6\" dir=\"auto\">closed</p>",
     "body_first_line_html": "<p>closed</p>",
     "current_user": {
      "can_edit": false,
      "can_award_emoji": false,
      "can_resolve": false,
      "can_resolve_discussion": false
     },
     "suggestions": [],
     "resolved": false,
     "resolved_by": null,
     "resolved_by_push": false,
     "system_note_icon_name": "merge-request-close",
     "is_noteable_author": true,
     "discussion_id": "8600a365fee32e03dc3a1d5c2aa74b175d774ee8",
     "emoji_awardable": false,
     "report_abuse_path": "/-/abuse_reports/add_category",
     "noteable_note_url": null,
     "cached_markdown_version": 2162688,
     "human_access": "Owner",
     "is_contributor": false,
     "project_name": "site-ffhl"
    }
   ]
  }
 ]
}