성과

Tier: Free, Premium, Ultimate Offering: GitLab.com, Self-managed
Status: Experiment

자체 관리형 GitLab에서는 기본적으로 이 기능을 사용할 수 없습니다. 사용 가능하게 하려면,
관리자가 기능 플래그를 활성화할 수 있습니다 이름 achievements.
이 기능은 생산 환경에서 사용할 준비가 되어 있지 않습니다.

성과는 GitLab에서의 사용자 활동에 대한 보상 방법입니다.
네임스페이스 유지 관리자인 경우 특정 기여에 대한 사용자 정의 성과를 생성할 수 있습니다.
이러한 성과를 사용자에게 수여하거나 정의된 기준에 따라 취소할 수 있습니다.

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

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

성과는 사용자 소유로 간주됩니다. 성과를 생성한 네임스페이스의 가시성 설정과 상관없이 볼 수 있습니다.

이 기능은 실험입니다.
계획된 작업에 대한 자세한 내용은 epic 9429를 참조하세요.
에픽에 댓글을 남겨 사용 사례를 알려주세요.

성과의 유형

프로그래밍적으로 성과를 생성, 수여, 취소 또는 삭제하는 방법은 하나뿐입니다.

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

  • 한 번 수여되고 취소 불가능한 성과. 예: “첫 기여 병합” 성과.
  • 한 번 수여되고 취소 가능한 성과. 예: “핵심 팀원” 성과.
  • 여러 번 수여 가능한 성과. 예: “이달의 기여자” 성과.

그룹 성과 보기

그룹의 사용 가능한 모든 성과 및 수여된 성과를 보려면:

  • https://gitlab.com/groups/<group-path>/-/achievements로 이동하세요.

페이지는 성과 목록과 성과를 수여받은 멤버를 표시합니다.

사용자의 성과 보기

사용자의 성과는 프로필 페이지에서 확인할 수 있습니다.

전제 조건:

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

사용자의 성과를 보려면:

  1. 사용자의 프로필 페이지로 이동합니다.
  2. 사용자 아바타 아래에서 그들의 성과를 확인합니다.
  3. 성과에 대한 세부정보를 보려면 그 위에 마우스를 올립니다.
    다음 정보를 표시합니다:

    • 성과 이름
    • 성과 설명
    • 사용자가 성과를 수여받은 날짜
    • 사용자가 네임스페이스의 멤버이거나 네임스페이스가 공개일 경우 성과를 수여한 네임스페이스

사용자의 성과 목록을 가져오려면 user GraphQL 타입을 쿼리합니다.

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

성과 생성

특정 기여에 대한 보상을 위한 사용자 정의 성과를 생성할 수 있습니다.

전제 조건:

  • 네임스페이스에 대한 유지 관리자인 경우 또는 소유자 역할을 해야 합니다.

성과를 생성하려면:

  • UI에서:
    1. 성과 페이지에서 새 성과를 선택합니다.
    2. 성과 이름을 입력합니다.
    3. 선택 사항. 성과의 설명을 입력하고 아바타를 업로드합니다.
    4. 변경 사항 저장을 선택합니다.
  • GraphQL API를 사용하여 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"}}}}  
    

성과 업데이트

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

선행 조건:

  • 네임스페이스에 대해 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
    }
  }
}

성과 부여

사용자에게 성과를 부여하여 그들의 기여를 인정할 수 있습니다.
사용자는 성과를 부여받을 때 이메일 알림을 받습니다.

선행 조건:

  • 네임스페이스에 대해 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
  }
}

성과 회수

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

선행 조건:

  • 네임스페이스에 대해 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
  }
}