성취

Tier: Free, Premium, Ultimate Offering: GitLab.com, Self-managed Status: Experiment
Self-managed GitLab의 경우, 이 기능은 기본적으로 사용 불가능합니다. 사용하려면 관리자가 성취라는 기능 플래그를 활성화해야 합니다. 이 기능은 아직 제품 사용을 위한 준비가 되지 않았습니다.

성취는 GitLab에서 사용자 활동에 대한 보상 수단입니다. Namespace 관리자 또는 소유자로서 특정 기여를 위해 사용자 정의 성취를 만들 수 있습니다. 이러한 성취를 사용자에게 수여하거나 정의된 기준에 따라 철회할 수 있습니다.

사용자로서는 프로필에서 다양한 프로젝트나 그룹에 대한 기여를 강조하기 위해 성취를 수집할 수 있습니다. 성취는 이름, 설명 및 아바타로 구성됩니다.

사용자 프로필 페이지의 성취

성취는 사용자에 의해 소유되는 것으로 간주됩니다. Namespace의 가시성 설정과 관계없이 표시됩니다.

이 기능은 실험적인 것입니다. 계획된 작업에 대한 자세한 내용은 epic 9429를 참조하세요. epic에 의겼 후 사용 사례를 알려주세요.

성취유형

프로그래밍적으로, 성취를 생성, 수여, 철회 또는 삭제하는 방법은 한 가지입니다.

실제로, 상여할 수 있는 성취의 유형을 구분할 수 있습니다.

  • 한 번만 부여되고 철회할 수 없음. 예를 들어 “첫 번째 기여 병합” 성취.
  • 한 번만 부여되고 철회할 수 있는 성취. 예를 들어 “핵심 팀 구성원” 성취.
  • 여러 번 부여됨. 예를 들어 “이달의 기여자” 성취.

그룹 성취보기

그룹에 대한 모든 가능한 및 부여된 성취를 보려면:

  • https://gitlab.com/groups/<group-path>/-/achievements으로 이동하십시오.

페이지에는 성취 목록과 해당 성취를 받은 회원 목록이 표시됩니다.

사용자 성취 보기

사용자의 성취를 사용자 프로필 페이지에서 볼 수 있습니다.

전제 조건:

  • 사용자 프로필은 공개여야 합니다.

사용자의 성취를 보려면:

  1. 사용자 프로필 페이지로 이동합니다.
  2. 사용자 아바타 아래에서 그들의 성취를 볼 수 있습니다.
  3. 성취에 대한 자세한 정보를 보려면 해당 성취 위로 마우스를 가져가세요. 다음 정보가 표시됩니다.

    • 성취명
    • 성취 설명
    • 사용자에게 성취가 수여된 날짜
    • 사용자가 Namespace의 구성원이거나 Namespace가 공개되어 있을 경우 성취를 수여한 Namespace

사용자의 성취 목록을 검색하려면 user GraphQL type을 쿼리하세요.

query {
  user(username: "<username>") {
    userAchievements {
      nodes {
        achievement {
          name
          description
          avatarUrl
          namespace {
            fullPath
            name
          }
        }
      }
    }
  }
}

성취 만들기

특정 기여를 위해 사용자 정의 성취를 만들 수 있습니다.

전제 조건:

  • Namespace에 대한 Maintainer 또는 Owner 역할이어야 합니다.

성취를 만들려면:

  • UI에서:
    1. 성취 페이지에서 새로운 성취를 선택합니다.
    2. 성취 이름을 입력합니다.
    3. 선택 사항. 성취에 대한 설명을 입력하고 성취용 아바타를 업로드합니다.
    4. 변경 사항 저장을 선택합니다.
  • GraphQL API를 사용하여, achievementsCreate GraphQL mutation을 호출하세요.

    mutation achievementsCreate($file: Upload!) {
      achievementsCreate(
        input: {
          namespaceId: "gid://gitlab/Namespace/<namespace id>",
          name: "<name>",
          description: "<description>",
          avatar: $file}
      ) {
        errors
        achievement {
          id
          name
          description
          avatarUrl
        }
      }
    }
    

    아바타 파일을 제공하려면 curl을 사용하여 뮤테이션을 호출하세요.

    curl "https://gitlab.com/api/graphql" \
      -H "Authorization: Bearer <your-pat-token>" \
      -H "Content-Type: multipart/form-data" \
      -F operations='{ "query": "mutation ($file: Upload!) { achievementsCreate(input: { namespaceId: \"gid://gitlab/Namespace/<namespace-id>\", name: \"<name>\", description: \"<description>\", avatar: $file }) { achievement { id name description avatarUrl } } }", "variables": { "file": null } }' \
      -F map='{ "0": ["variables.file"] }' \
      -F 0='@/path/to/your/file.jpg'
    

    성공 시 응답으로 성취 ID가 반환됩니다.

    {"data":{"achievementsCreate":{"achievement":{"id":"gid://gitlab/Achievements::Achievement/1","name":"<name>","description":"<description>","avatarUrl":"https://gitlab.com/uploads/-/system/achievements/achievement/avatar/1/file.jpg"}}}}
    

성취 업데이트

언제든지 성취의 이름, 설명 및 아바타를 변경할 수 있습니다.

전제 조건:

  • Namespace에 대한 Maintainer 또는 Owner 역할이어야 합니다.

성취를 업데이트하려면, achievementsUpdate GraphQL mutation을 호출하세요.

mutation achievementsUpdate($file: Upload!) {
  achievementsUpdate(
    input: {
      achievementId: "gid://gitlab/Achievements::Achievement/<achievement id>",
      name: "<new name>",
      description: "<new description>",
      avatar: $file}
  ) {
    errors
    achievement {
      id
      name
      description
      avatarUrl
    }
  }
}

성취 수여

기여를 인정하기 위해 사용자에게 성취를 부여할 수 있습니다. 사용자에게 성취를 수여하면 이메일 알림을 받습니다.

전제 조건:

  • Namespace에 대한 Maintainer 또는 Owner 역할이어야 합니다.

사용자에게 성취를 수여하려면, achievementsAward GraphQL mutation을 호출하세요.

mutation {
  achievementsAward(input: {
    achievementId: "gid://gitlab/Achievements::Achievement/<achievement id>",
    userId: "gid://gitlab/User/<user id>" }) {
    userAchievement {
      id
      achievement {
        id
        name
      }
      user {
        id
        username
      }
    }
    errors
  }
}

업적 취소

사용자가 수상 기준을 더 이상 충족하지 않는다고 판단하는 경우 사용자의 업적을 취소할 수 있습니다.

사전 요구 사항:

  • 해당 네임스페이스의 Maintainer 또는 Owner 역할이 있어야 합니다.

업적을 취소하려면 achievementsRevoke GraphQL 뮤테이션을 호출하십시오.

mutation {
  achievementsRevoke(input: {
    userAchievementId: "gid://gitlab/Achievements::UserAchievement/<user achievement id>" }) {
    userAchievement {
      id
      achievement {
        id
        name
      }
      user {
        id
        username
      }
      revokedAt
    }
    errors
  }
}

수여된 업적 삭제

실수로 사용자에게 업적을 수여한 경우 삭제할 수 있습니다.

사전 요구 사항:

  • 해당 네임스페이스의 Owner 역할이 있어야 합니다.

수여된 업적을 삭제하려면 userAchievementsDelete GraphQL 뮤테이션을 호출하십시오.

mutation {
  userAchievementsDelete(input: {
    userAchievementId: "gid://gitlab/Achievements::UserAchievement/<user achievement id>" }) {
    userAchievement {
      id
      achievement {
        id
        name
      }
      user {
        id
        username
      }
    }
    errors
  }
}

업적 삭제

더 이상 업적이 필요하지 않다고 판단하는 경우 삭제할 수 있습니다. 이로 인해 해당 업적과 관련된 모든 수여 및 취소된 인스턴스가 삭제됩니다.

사전 요구 사항:

  • 해당 네임스페이스의 Maintainer 또는 Owner 역할이 있어야 합니다.

업적을 삭제하려면 achievementsDelete GraphQL 뮤테이션을 호출하십시오.

mutation {
  achievementsDelete(input: {
    achievementId: "gid://gitlab/Achievements::Achievement/<achievement id>" }) {
    achievement {
      id
      name
    }
    errors
  }
}

업적 숨기기

프로필에 업적을 표시하지 않으려면 선택할 수 있습니다. 다음을 수행하십시오:

  1. 왼쪽 사이드바에서 아바타를 선택합니다.
  2. 프로필 편집을 선택합니다.
  3. 주요 설정 섹션에서 프로필에 업적 표시 확인란을 해제합니다.
  4. 프로필 설정 업데이트를 선택합니다.

특정 업적의 가시성 변경

프로필에 모든 업적을 표시하지 않으려면 특정 업적의 가시성을 변경할 수 있습니다.

자신의 업적 중 하나를 숨기려면 userAchievementsUpdate GraphQL 뮤테이션을 호출하십시오.

mutation {
  userAchievementsUpdate(input: {
    userAchievementId: "gid://gitlab/Achievements::UserAchievement/<user achievement id>"
    showOnProfile: false
  }) {
    userAchievement {
      id
      showOnProfile
    }
    errors
  }
}

다시 하나의 업적을 표시하려면 showOnProfile 인수에 대해 true 값을 사용하여 동일한 뮤테이션을 호출하십시오.

업적 재정렬

기본적으로 프로필에 있는 업적은 수여된 날짜에 따라 오름차순으로 표시됩니다.

열 업적의 순서를 변경하려면 userAchievementPrioritiesUpdate GraphQL 뮤테이션을 호출하고 우선순위가 지정된 모든 업적의 정렬된 목록을 사용하십시오.

mutation {
  userAchievementPrioritiesUpdate(input: {
    userAchievementIds: ["gid://gitlab/Achievements::UserAchievement/<first user achievement id>", "gid://gitlab/Achievements::UserAchievement/<second user achievement id>"],
    }) {
    userAchievements {
      id
      priority
    }
    errors
  }
}