성취

Tier: Free, Premium, Ultimate Offering: GitLab.com, Self-Managed, GitLab Dedicated Status: Experiment
  • GitLab 15.10에 도입되었습니다. 기본적으로 비활성화된 achievements라는 플래그가 있습니다.

플래그: Self-Managed형 GitLab에서는 기본적으로 이 기능을 사용할 수 없습니다. 사용하려면 시스템 관리자가 achievements라는 플래그를 활성화해야 합니다. 이 기능은 프로덕션 환경에서 사용할 준비가 되지 않았습니다.

성취는 GitLab에서 사용자의 활동에 대한 보상 방법입니다. Namespace 유지자 또는 소유자로서 특정 기여에 대한 사용자 정의 성취를 만들어 기준에 따라 사용자에게 수여하거나 회수할 수 있습니다.

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

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

성취는 사용자가 소유합니다. 성취를 만든 Namespace의 가시성 설정과 상관없이 표시됩니다.

이 기능은 실험적입니다. 예정된 작업에 대한 자세한 내용은 에픽 9429을 참조하십시오. 에픽에 의견을 남겨 사용 사례에 대해 알려주세요.

성취 유형

프로그래밍적으로 성취를 만들거나 수여, 회수 또는 삭제하는 유일한 방법이 있습니다.

실제로, 수여되는 성취를 구분할 수 있습니다.:

  • 한 번만 부여되고 취소할 수 없음. 예: “첫 번째 기여 Merge” 성취.
  • 한 번만 수여되고 취소할 수 있음. 예: “핵심 팀 구성원” 성취.
  • 여러 번 수여될 수 있음. 예: “이달의 기여자” 성취.

사용자의 성취 보기

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

전제 조건:

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

사용자의 성취를 보려면 다음을 수행합니다.

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

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

사용자의 성취 디렉터리을 검색하려면 user GraphQL 유형을 쿼리합니다.

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

성취 만들기

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

전제 조건:

  • Namespace의 Maintainer 또는 Owner 역할이 있어야 합니다.

성취를 만들려면 achievementsCreate GraphQL 뮤테이션을 호출합니다.

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 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 {
  achievementsAward(input: {
    achievementId: "gid://gitlab/Achievements::Achievement/<achievement id>",
    userId: "gid://gitlab/User/<user id>" }) {
    userAchievement {
      id
      achievement {
        id
        name
      }
      user {
        id
        username
      }
    }
    errors
  }
}

성취 회수

사용자가 수여 기준을 더 이상 충족하지 않는다고 판단되면 사용자의 성취를 회수할 수 있습니다.

전제 조건:

  • Namespace의 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
  }
}

수여된 성취 삭제

실수로 사용자에게 성취를 수여한 경우 해당 성취를 삭제할 수 있습니다.

전제 조건:

  • Namespace의 소유자 역할이 있어야 합니다.

수여된 성취를 삭제하려면 userAchievementsDelete GraphQL 뮤테이션을 호출합니다.

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

성취 삭제

더 이상 필요하지 않은 성취를 삭제할 수 있습니다. 이렇게 하면 성취와 관련된 모든 수여 및 회수된 인스턴스가 삭제됩니다.

전제 조건:

  • Namespace의 Maintainer 또는 Owner 역할이 있어야 합니다.

성취를 삭제하려면 achievementsDelete GraphQL 뮤테이션을 호출합니다.

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

업적 숨기기

프로필에 업적을 표시하고 싶지 않다면, 선택적으로 숨길 수 있습니다. 다음을 수행하세요:

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

업적 재정렬

기본적으로 프로필에 표시되는 업적은 수상 일자에 따라 오름차순으로 정렬됩니다.

업적의 순서를 변경하려면, 모든 우선순위가 지정된 업적의 정렬된 디렉터리과 함께 userAchievementPrioritiesUpdate GraphQL 뮤테이션을 호출하십시오.

mutation {
  userAchievementPrioritiesUpdate(input: {
    userAchievementIds: ["gid://gitlab/Achievements::UserAchievement/<첫 번째 사용자 업적 ID>", "gid://gitlab/Achievements::UserAchievement/<두 번째 사용자 업적 ID>"],
    }) {
    userAchievements {
      id
      priority
    }
    errors
  }
}