Publish V2 Emergency Unstakes (649.13620) #130
Workflow file for this run
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
name: Apply Unstakes V2 | |
on: | |
workflow_dispatch: | |
pull_request: | |
types: [closed] | |
branches: | |
- master | |
jobs: | |
late_unstake: | |
if: startsWith(github.event.pull_request.head.ref, 'unstakes') && github.event.pull_request.merged == true | |
runs-on: ubuntu-latest | |
steps: | |
- name: Checkout the repository | |
uses: actions/checkout@master | |
with: | |
fetch-depth: 20 | |
- name: Load scoring details | |
run: | | |
set -ex | |
unstake_hints_json=$(git log -1 --name-only --pretty=format: --grep 'emergency unstakes' | grep unstake-hints.json) | |
scoring_run_ui_id=$(git log -1 --name-only --pretty=format: --grep 'emergency unstakes' | grep scoring-v2 | head -3 | 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 <<EOF > /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: Late 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 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: Late unstake V2 | |
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 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 | tonumber] | add' -r) | |
message="Late 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 }} |