diff --git a/.github/workflows/v2-apply-scoring.yml b/.github/workflows/v2-apply-scoring.yml index c012705..005e454 100644 --- a/.github/workflows/v2-apply-scoring.yml +++ b/.github/workflows/v2-apply-scoring.yml @@ -109,113 +109,142 @@ jobs: SCORES_CSV: ${{ env.scores_csv }} IMAGE_TAG: ${{ env.latest }} - - name: Publish scoring results - run: | - curl -sLfS "https://scoring-dev.marinade.finance/api/v1/scores/upload?epoch=${{ env.epoch }}&components=${{ env.components }}&component_weights=${{ env.components_weights }}&ui_id=${{ env.scoring_run_ui_id }}" -X POST \ - -H "Authorization: Bearer ${{ secrets.VALIDATORS_API_ADMIN_TOKEN }}" \ - -F "scores=@${{ env.scores_csv }}" - - early_unstake: - needs: apply_scoring_v2 - runs-on: ubuntu-latest - steps: - - name: Checkout the repository - uses: actions/checkout@master - with: - ref: scoring-v2 - fetch-depth: 20 - - - name: Load scoring details + - name: Run scoring run: | - set -ex - unstake_hints_json=$(git log -1 --name-only --pretty=format: --grep 'scoring run' | grep unstake-hints.json) - scoring_run_ui_id=$(git log -1 origin/scoring-v2 --name-only --pretty=format: --grep 'scoring run' | grep scoring-v2 | head -6 | tail -1 | awk -F / '{print $2}') - epoch=$(<<<"$scoring_run_ui_id" awk -F . '{print $1}') - - if [[ -z $unstake_hints_json ]] - then - echo "Failed to find JSON with unstake hints in the PR!" - exit 1 - fi - - if [[ -z $epoch ]] - then - echo "Failed to detect epoch from the UI ID!" - exit 1 - fi - - echo "unstake_hints_json=$unstake_hints_json" >> $GITHUB_ENV - echo "epoch=$epoch" >> $GITHUB_ENV - - - name: Configure AWS credentials - uses: aws-actions/configure-aws-credentials@v1 - with: - aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }} - aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }} - aws-region: ${{ secrets.AWS_DEFAULT_REGION }} - - - name: Login to Amazon ECR - id: login-ecr - uses: aws-actions/amazon-ecr-login@v1 - - - name: Prepare solana config - run: | - cat < /tmp/solana-config.yml - json_rpc_url: "$RPC_URL" - websocket_url: "" - keypair_path: /.config/solana/id.json - address_labels: - "11111111111111111111111111111111": System Program - commitment: confirmed - EOF - echo "$KEYPAIR" > /tmp/id.json - - env: - RPC_URL: ${{ secrets.RPC_URL }} - KEYPAIR: ${{ secrets.VALIDATOR_MANAGEMENT_KEYPAIR }} - - - name: Configure image - run: | - images=$(aws ecr describe-images --repository-name marinade.finance/validator-manager) - latest=$(<<<"$images" jq '.imageDetails[] | .imagePushedAt + " " + .imageTags[0]' -r | sort | tail -1 | cut -d' ' -f2) - echo "latest=$latest" >> $GITHUB_ENV - - - name: Early unstake V2 - simulation - run: | - <"$UNSTAKE_HINTS_JSON" jq '.unstake_hints[].vote_account' -r | xargs -I{} \ - docker run --rm --user "$(id -u):$(id -g)" \ - -v /tmp/solana-config.yml:/.config/solana/cli/config.yml \ - -v /tmp/id.json:/.config/solana/id.json \ - "$ECR_REGISTRY/$ECR_REPOSITORY:$IMAGE_TAG" \ - ./validator-manager -s --print-only emergency-unstake {} + docker run --rm --user "$(id -u):$(id -g)" \ + -v /tmp/solana-config.yml:/.config/solana/cli/config.yml \ + -v /tmp/id.json:/.config/solana/id.json \ + -v "$(realpath "$SCORES_CSV"):/scores.csv" \ + "$ECR_REGISTRY/$ECR_REPOSITORY:$IMAGE_TAG" \ + ./validator-manager update-scores2 --scores-file /scores.csv env: ECR_REGISTRY: ${{ steps.login-ecr.outputs.registry }} ECR_REPOSITORY: marinade.finance/validator-manager - UNSTAKE_HINTS_JSON: ${{ env.unstake_hints_json }} + SCORES_CSV: ${{ env.scores_csv }} IMAGE_TAG: ${{ env.latest }} - - name: Send Discord Notification + - name: Publish scoring results run: | - validators_count=$(<"$UNSTAKE_HINTS_JSON" jq '[.unstake_hints[].marinade_stake] | length' -r) - unstaked_sol=$(<"$UNSTAKE_HINTS_JSON" jq '[.unstake_hints[].marinade_stake] | add' -r) - - message="Early unstake successfully applied. ($validators_count validators, $unstaked_sol SOL)" - - if (( $validators_count == 0 )) - then - message="No emergency unstakes needed this time." - fi + curl -sLfS "https://scoring.marinade.finance/api/v1/scores/upload?epoch=${{ env.epoch }}&components=${{ env.components }}&component_weights=${{ env.components_weights }}&ui_id=${{ env.scoring_run_ui_id }}" -X POST \ + -H "Authorization: Bearer ${{ secrets.VALIDATORS_API_ADMIN_TOKEN }}" \ + -F "scores=@${{ env.scores_csv }}" + - name: Send Discord Notification + run: | curl "$DISCORD_WEBHOOK" -H "Content-Type: application/json" -d '{ - "username": "Delegation Strategy - Early Unstake V2", - "avatar_url": "https://public.marinade.finance/ds-emergency-bot.png", + "username": "DS Scoring", + "avatar_url": "https://public.marinade.finance/ds-scoring-bot.png", "embeds": [ { - "title": "'"$message"'", + "title": "Scoring successfully applied.", "color": "52224" } ] }' env: - DISCORD_WEBHOOK: ${{ secrets.DISCORD_WEBHOOK }} - UNSTAKE_HINTS_JSON: ${{ env.unstake_hints_json }} + DISCORD_WEBHOOK: ${{ secrets.DISCORD_WEBHOOK }} + # Temporary disable and apply them manually + # early_unstake: + # needs: apply_scoring_v2 + # runs-on: ubuntu-latest + # steps: + # - name: Checkout the repository + # uses: actions/checkout@master + # with: + # ref: scoring-v2 + # fetch-depth: 20 + + # - name: Load scoring details + # run: | + # set -ex + # unstake_hints_json=$(git log -1 --name-only --pretty=format: --grep 'scoring run' | grep unstake-hints.json) + # scoring_run_ui_id=$(git log -1 origin/scoring-v2 --name-only --pretty=format: --grep 'scoring run' | grep scoring-v2 | head -6 | tail -1 | awk -F / '{print $2}') + # epoch=$(<<<"$scoring_run_ui_id" awk -F . '{print $1}') + + # if [[ -z $unstake_hints_json ]] + # then + # echo "Failed to find JSON with unstake hints in the PR!" + # exit 1 + # fi + + # if [[ -z $epoch ]] + # then + # echo "Failed to detect epoch from the UI ID!" + # exit 1 + # fi + + # echo "unstake_hints_json=$unstake_hints_json" >> $GITHUB_ENV + # echo "epoch=$epoch" >> $GITHUB_ENV + + # - name: Configure AWS credentials + # uses: aws-actions/configure-aws-credentials@v1 + # with: + # aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }} + # aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }} + # aws-region: ${{ secrets.AWS_DEFAULT_REGION }} + + # - name: Login to Amazon ECR + # id: login-ecr + # uses: aws-actions/amazon-ecr-login@v1 + + # - name: Prepare solana config + # run: | + # cat < /tmp/solana-config.yml + # json_rpc_url: "$RPC_URL" + # websocket_url: "" + # keypair_path: /.config/solana/id.json + # address_labels: + # "11111111111111111111111111111111": System Program + # commitment: confirmed + # EOF + # echo "$KEYPAIR" > /tmp/id.json + + # env: + # RPC_URL: ${{ secrets.RPC_URL }} + # KEYPAIR: ${{ secrets.VALIDATOR_MANAGEMENT_KEYPAIR }} + + # - name: Configure image + # run: | + # images=$(aws ecr describe-images --repository-name marinade.finance/validator-manager) + # latest=$(<<<"$images" jq '.imageDetails[] | .imagePushedAt + " " + .imageTags[0]' -r | sort | tail -1 | cut -d' ' -f2) + # echo "latest=$latest" >> $GITHUB_ENV + + # - name: Early unstake V2 - simulation + # run: | + # <"$UNSTAKE_HINTS_JSON" jq '.unstake_hints[].vote_account' -r | xargs -I{} \ + # docker run --rm --user "$(id -u):$(id -g)" \ + # -v /tmp/solana-config.yml:/.config/solana/cli/config.yml \ + # -v /tmp/id.json:/.config/solana/id.json \ + # "$ECR_REGISTRY/$ECR_REPOSITORY:$IMAGE_TAG" \ + # ./validator-manager -s --print-only emergency-unstake {} + # env: + # ECR_REGISTRY: ${{ steps.login-ecr.outputs.registry }} + # ECR_REPOSITORY: marinade.finance/validator-manager + # UNSTAKE_HINTS_JSON: ${{ env.unstake_hints_json }} + # IMAGE_TAG: ${{ env.latest }} + + # - name: Send Discord Notification + # run: | + # validators_count=$(<"$UNSTAKE_HINTS_JSON" jq '[.unstake_hints[].marinade_stake] | length' -r) + # unstaked_sol=$(<"$UNSTAKE_HINTS_JSON" jq '[.unstake_hints[].marinade_stake] | add' -r) + + # message="Early unstake successfully applied. ($validators_count validators, $unstaked_sol SOL)" + + # if (( $validators_count == 0 )) + # then + # message="No emergency unstakes needed this time." + # fi + + # curl "$DISCORD_WEBHOOK" -H "Content-Type: application/json" -d '{ + # "username": "Delegation Strategy - Early Unstake V2", + # "avatar_url": "https://public.marinade.finance/ds-emergency-bot.png", + # "embeds": [ + # { + # "title": "'"$message"'", + # "color": "52224" + # } + # ] + # }' + # env: + # DISCORD_WEBHOOK: ${{ secrets.DISCORD_WEBHOOK }} + # UNSTAKE_HINTS_JSON: ${{ env.unstake_hints_json }}