{"action":"created","comment":{"url":"https://api.github.com/repos/tootsuite/mastodon/pulls/comments/213014206","pull_request_review_id":149743660,"id":213014206,"node_id":"MDI0OlB1bGxSZXF1ZXN0UmV2aWV3Q29tbWVudDIxMzAxNDIwNg==","diff_hunk":"@@ -0,0 +1,699 @@\n+AWSTemplateFormatVersion: 2010-09-09\n+Description: Mastodon - Full AWS Stack - TESTED FOR v2.5.0rc1\n+Parameters: \n+    VPCStackName:\n+        Description: The VPC that the ECS cluster is deployed to\n+        Type: AWS::EC2::VPC::Id\n+        \n+    PublicSubnetA:\n+        Description: Choose which public subnets the Application Load Balancer should be deployed to\n+        Type: AWS::EC2::Subnet::Id\n+    \n+    PublicSubnetB:\n+        Description: Choose which public subnets the Application Load Balancer should be deployed to\n+        Type: AWS::EC2::Subnet::Id\n+\n+    RDSPostgreSQLMasterUsername:\n+      Description: 'PostgreSQL User'\n+      Type: String\n+      Default: Masotodon\n+      \n+    RDSPostgreSQLMasterPassword:\n+      Description: 'PostgreSQL Pass'\n+      Type: String\n+      NoEcho: true\n+\n+    UniqueID:\n+      Description: 'lower case'\n+      Default: mastodon1\n+      Type: String\n+\n+    Domain:\n+      Description: 'example.com'\n+      Type: String\n+      Default: 'darkarts.club'\n+\n+    DomainEmail:\n+      Description: 'admin@example.com - used to register certbot'\n+      Type: String\n+      Default: 'admin@darkarts.club'\n+\n+    R53Zone:\n+      Description: AWS KeyName\n+      Type: 'AWS::Route53::HostedZone::Id'\n+\n+    ReleaseVersion:\n+      Description: 'v2.4.4'\n+      Type: String\n+      Default: 'v2.4.4'\n+\n+    EC2PrivateIP:\n+      Description: 'Private IP for the EC2 Primary Instance'\n+      Type: String\n+      Default: '10.32.0.34'\n+\n+    MastodonLocalUserPassword:\n+      Description: 'mastodon local user password'\n+      Type: String\n+      NoEcho: true\n+\n+    KeyPairName:\n+      Description: AWS KeyName\n+      Type: 'AWS::EC2::KeyPair::KeyName'\n+\n+    ImageId:\n+      Description: Official Ubuntu 18.04 AMI\n+      Type: String\n+      Default: ami-0118debc71f4a5be3\n+\n+    MailgunLOGIN:\n+      Description: 'Mailgun username'\n+      Type: String\n+      Default: 'notifications@mail.example.com'\n+    MailgunPASSWORD:\n+      Description: 'Mailgun password'\n+      Type: String\n+      NoEcho: true\n+\n+Resources:\n+# ElastiCache - Redis\n+  RedisSecurityGroup:\n+    Type: 'AWS::EC2::SecurityGroup'\n+    Properties:\n+      VpcId: !Ref VPCStackName\n+      GroupDescription: !Sub 'Redis SecurityGroup - ${UniqueID}'\n+      SecurityGroupIngress:\n+        - IpProtocol: tcp\n+          FromPort: 6379\n+          ToPort: 6379\n+          CidrIp: !Sub '${EC2PrivateIP}/32'\n+\n+  RedisSubnetGroup:\n+    Type: 'AWS::ElastiCache::SubnetGroup'\n+    Properties:\n+      Description: !Sub 'Redis SubnetGroup - ${UniqueID}'\n+      SubnetIds:\n+        - !Ref PublicSubnetA\n+        - !Ref PublicSubnetB\n+\n+  RedisParameterGroup:\n+    Type: 'AWS::ElastiCache::ParameterGroup'\n+    Properties:\n+      Description: !Sub 'Redis ParameterGroup - ${UniqueID}'\n+      CacheParameterGroupFamily: redis4.0\n+\n+  ElastiCacheRedis:\n+    Type: 'AWS::ElastiCache::CacheCluster'\n+    Properties:\n+      ClusterName: !Sub 'Mastodon-${UniqueID}'\n+      CacheNodeType: cache.t2.micro\n+      Engine: redis\n+      EngineVersion: 4.0.10\n+      Port: 6379\n+      NumCacheNodes: '1'\n+      CacheSubnetGroupName: !Ref RedisSubnetGroup\n+      VpcSecurityGroupIds:\n+        - !Ref RedisSecurityGroup\n+      CacheParameterGroupName: !Ref RedisParameterGroup\n+\n+# RDS - PostgreSQL\n+  RDSPostgreSQLSecurityGroup:\n+    Type: 'AWS::EC2::SecurityGroup'\n+    Properties:\n+      VpcId: !Ref VPCStackName\n+      GroupDescription: !Sub 'PostgreSQL SecurityGroup - ${UniqueID}'\n+      SecurityGroupIngress:\n+        - IpProtocol: tcp\n+          FromPort: 5432\n+          ToPort: 5432\n+          CidrIp: !Sub '${EC2PrivateIP}/32'\n+\n+  RDSPostgreSQLSubnetGroup:\n+    Type: 'AWS::RDS::DBSubnetGroup'\n+    Properties:\n+      DBSubnetGroupDescription: !Sub 'PostgreSQL DBSubnetGroup - ${UniqueID}'\n+      SubnetIds:\n+        - !Ref PublicSubnetA\n+        - !Ref PublicSubnetB\n+\n+  RDSPostgreSQLInstance:\n+    Type: 'AWS::RDS::DBInstance'\n+    DeletionPolicy: Snapshot\n+    Properties:\n+      Engine: postgres\n+      Port: 5432\n+      PubliclyAccessible: false\n+      AllocatedStorage: 20\n+      DBInstanceClass: db.t2.micro\n+      DBInstanceIdentifier: !Sub 'Mastodon-${UniqueID}'\n+      DBName: 'mastodon_production'\n+      MasterUsername: !Ref RDSPostgreSQLMasterUsername\n+      MasterUserPassword: !Ref RDSPostgreSQLMasterPassword\n+\n+      DBParameterGroupName: !Ref RDSPostgreSQLParameterGroup\n+      DBSubnetGroupName: !Ref RDSPostgreSQLSubnetGroup\n+      VPCSecurityGroups:\n+        - !Ref RDSPostgreSQLSecurityGroup\n+\n+  RDSPostgreSQLParameterGroup:\n+    Type: 'AWS::RDS::DBParameterGroup'\n+    Properties:\n+      Description: RDSPostgreSQL\n+      Family: postgres9.6\n+\n+# S3 Storage Bucket - User/AccessKeys/Bucket\n+  MasotodonS3bucket:\n+    Type: 'AWS::S3::Bucket'\n+    Properties:\n+      BucketName: !Sub '${UniqueID}.files.${Domain}'\n+\n+  MasotodonS3buckerUser:\n+    Type: 'AWS::IAM::User'\n+    Properties:\n+      Policies:\n+        - PolicyName: S3\n+          PolicyDocument:\n+            Version: 2012-10-17\n+            Statement:\n+              - Effect: Allow\n+                Action: 's3:*'\n+                Resource: \n+                  - !Sub 'arn:aws:s3:::${MasotodonS3bucket}'\n+                  - !Sub 'arn:aws:s3:::${MasotodonS3bucket}/*'\n+      UserName: !Sub 'MasotodonS3buckerUser-${UniqueID}'\n+\n+  MasotodonS3bucketKey:\n+    Type: 'AWS::IAM::AccessKey'\n+    Properties:\n+      UserName: !Ref MasotodonS3buckerUser\n+\n+# EC2 Instance\n+  EC2InstancePrimary:\n+    Type: 'AWS::EC2::Instance'\n+    Properties:\n+      InstanceType: t2.small\n+      KeyName: !Ref KeyPairName\n+      ImageId: !Ref ImageId\n+      IamInstanceProfile: !Ref EC2InstanceProfile\n+      NetworkInterfaces:\n+        - DeleteOnTermination: 'true'\n+          DeviceIndex: 0\n+          SubnetId: !Ref PublicSubnetA\n+          AssociatePublicIpAddress: 'true'\n+          PrivateIpAddresses:\n+            - Primary: 'true'\n+              PrivateIpAddress: !Ref 'EC2PrivateIP'\n+          GroupSet:\n+            - !Ref EC2SecurityGroup\n+\n+      BlockDeviceMappings:\n+        - DeviceName: /dev/sda1\n+          Ebs:\n+            VolumeSize: 50\n+            VolumeType: gp2\n+\n+      UserData:\n+        Fn::Base64: !Sub |\n+            #!/bin/bash -ex\n+            touch /var/tmp/bootstrap.txt\n+            chmod 777 /var/tmp/bootstrap.txt\n+            sleep 60  # I've experienced multiple network related issues with the apt-get update below.\n+            \n+            echo \"stage 0 update\" >> /var/tmp/bootstrap.txt\n+            apt-get update\n+            echo \"$?\" >> /var/tmp/bootstrap.txt\n+\n+            echo \"stage 0 awscli\" >> /var/tmp/bootstrap.txt\n+            apt-get --yes install awscli\n+            echo \"$?\" >> /var/tmp/bootstrap.txt\n+\n+            echo \"stage 0 lang\" >> /var/tmp/bootstrap.txt\n+            apt-get --yes install language-pack-en\n+            echo \"$?\" >> /var/tmp/bootstrap.txt\n+\n+            echo \"stage 0 pip\" >> /var/tmp/bootstrap.txt\n+            apt-get --yes install python-pip\n+            echo \"$?\" >> /var/tmp/bootstrap.txt\n+\n+            echo \"stage 0 update pip\" >> /var/tmp/bootstrap.txt\n+            pip install --upgrade pip\n+            echo \"$?\" >> /var/tmp/bootstrap.txt\n+\n+            echo \"stage 0 install cfn tools\" >> /var/tmp/bootstrap.txt\n+            sudo pip install https://s3.amazonaws.com/cloudformation-examples/aws-cfn-bootstrap-latest.tar.gz\n+            # sudo required - otherwise crashes 'OSError: [Errno 13] Permission denied: '/usr/local/lib/python2.7/dist-packages/lockfile-0.12.2.dist-info'\n+            echo \"$?\" >> /var/tmp/bootstrap.txt\n+            \n+            echo \"stage 0 signal\" >> /var/tmp/bootstrap.txt\n+            echo \"-----\" >> /var/tmp/bootstrap.txt\n+            sudo /usr/local/bin/cfn-init --stack ${AWS::StackName} --resource EC2InstancePrimary --configsets bootstrap --region ${AWS::Region}\n+            # sudo seems to be required here\n+            ## SERVER REBOOTS VIA CFN-INIT\n+            \n+      Tags:\n+        - Key: Name\n+          Value: !Sub \"Frontend-${UniqueID}\"\n+\n+    Metadata:\n+      AWS::CloudFormation::Init:\n+        configSets:\n+          bootstrap:\n+            - \"create_files\"\n+            - \"run_bootstrap\"\n+\n+        run_bootstrap:\n+          commands:\n+            1_bootstrap_userdata:\n+              command: !Sub |\n+                #!/bin/bash -ex\n+\n+                echo \"stage 1 update\" >> /var/tmp/bootstrap.txt\n+                apt-get update\n+                echo \"$?\" >> /var/tmp/bootstrap.txt\n+\n+                echo \"stage 1 upgrade noninteractive\" >> /var/tmp/bootstrap.txt\n+                DEBIAN_FRONTEND=noninteractive apt-get -y -o Dpkg::Options::=\"--force-confdef\" -o Dpkg::Options::=\"--force-confnew\" upgrade\n+                echo \"$?\" >> /var/tmp/bootstrap.txt\n+\n+                echo \"signal trigger\" >> /var/tmp/bootstrap.txt\n+                /usr/local/bin/cfn-signal --success true --region ${AWS::Region} --stack ${AWS::StackName} --resource EC2InstancePrimary\n+                echo \"$?\" >> /var/tmp/bootstrap.txt\n+                #Warning: sudo cfn-signal seems to freeze/break the userdata.\n+\n+                echo \"waiting for stack-create-complete\" >> /var/tmp/bootstrap.txt\n+                aws cloudformation wait stack-create-complete --stack-name ${AWS::StackName} --region ${AWS::Region}\n+                echo \"$?\" >> /var/tmp/bootstrap.txt\n+                echo \"CFN Stack completed\" >> /var/tmp/bootstrap.txt\n+                echo \"-----\" >> /var/tmp/bootstrap.txt\n+\n+                echo \"script1\" >> /var/tmp/bootstrap.txt\n+                bash -ex /var/tmp/stage1.sh  # Mastodon User/Docker/Docker-Compose\n+                echo \"script 1 result $?\" >> /var/tmp/bootstrap.txt\n+                echo \"-----\" >> /var/tmp/bootstrap.txt\n+\n+                echo \"script2\" >> /var/tmp/bootstrap.txt\n+                sudo -u mastodon bash -ex /var/tmp/stage2.sh  # Mastodon\n+                echo \"script 2 result $?\" >> /var/tmp/bootstrap.txt\n+                echo \"-----\" >> /var/tmp/bootstrap.txt\n+\n+                echo \"script3\" >> /var/tmp/bootstrap.txt\n+                bash -ex /var/tmp/stage3.sh  # Nginx and Certbot\n+                echo \"script 3 result $?\" >> /var/tmp/bootstrap.txt\n+                echo \"-----\" >> /var/tmp/bootstrap.txt\n+\n+                echo \"script4\" >> /var/tmp/bootstrap.txt\n+                sudo -u mastodon bash -ex /var/tmp/stage4.sh  # Crontab/Maintenance Jobs\n+                echo \"script 2 result $?\" >> /var/tmp/bootstrap.txt\n+                echo \"-----\" >> /var/tmp/bootstrap.txt\n+\n+                echo \"Final reboot\" >> /var/tmp/bootstrap.txt\n+                systemctl reboot\n+\n+        create_files:\n+          files: \n+            /var/tmp/stage1.sh:\n+              content: !Sub |\n+                #!/bin/bash -ex\n+\n+                echo \"Create mastodon group\" >> /var/tmp/bootstrap.txt\n+                addgroup -gid 991 mastodon\n+                echo \"$?\" >> /var/tmp/bootstrap.txt\n+\n+                echo \"Create mastodon user\" >> /var/tmp/bootstrap.txt\n+                adduser --quiet --disabled-password --gid 991 --uid 991 mastodon --gecos GECOS\n+                echo \"$?\" >> /var/tmp/bootstrap.txt\n+\n+                echo \"Grant mastodon sudo\" >> /var/tmp/bootstrap.txt\n+                usermod -a -G sudo mastodon\n+                echo \"$?\" >> /var/tmp/bootstrap.txt\n+\n+                echo \"change mastodon password\" >> /var/tmp/bootstrap.txt\n+                echo \"mastodon:${MastodonLocalUserPassword}\" | sudo chpasswd\n+                echo \"$?\" >> /var/tmp/bootstrap.txt\n+\n+                echo \"Install Docker\" >> /var/tmp/bootstrap.txt\n+                apt --yes install apt-transport-https ca-certificates curl software-properties-common\n+                curl -fsSL https://download.docker.com/linux/ubuntu/gpg | apt-key add -\n+                add-apt-repository \"deb [arch=amd64] https://download.docker.com/linux/ubuntu bionic stable\"\n+                apt update\n+                apt-cache policy docker-ce\n+                apt --yes install docker-ce\n+                echo \"$?\" >> /var/tmp/bootstrap.txt\n+\n+                echo \"grant mastodon user docker\" >> /var/tmp/bootstrap.txt\n+                usermod -aG docker mastodon\n+                echo \"$?\" >> /var/tmp/bootstrap.txt\n+\n+                echo \"install docker-compose\" >> /var/tmp/bootstrap.txt\n+                curl -L https://github.com/docker/compose/releases/download/1.22.0/docker-compose-$(uname -s)-$(uname -m) -o /usr/local/bin/docker-compose\n+                chmod +x /usr/local/bin/docker-compose\n+                echo \"$?\" >> /var/tmp/bootstrap.txt\n+\n+                echo \"Activate Swap\" >> /var/tmp/bootstrap.txt\n+                fallocate -l 5G /swapfile\n+                chmod 600 /swapfile\n+                mkswap /swapfile\n+                swapon /swapfile\n+                echo '/swapfile       none    swap    sw      0       0' | tee -a /etc/fstab\n+\n+              mode: \"000777\"\n+              owner: \"ubuntu\"\n+              group: \"ubuntu\"\n+\n+            /var/tmp/stage2.sh:\n+              content: !Sub \n+                - |\n+                  #!/bin/bash -ex\n+\n+                  cd /home/mastodon\n+                  echo \"git clone\" >> /var/tmp/bootstrap.txt\n+                  git clone https://github.com/tootsuite/mastodon.git live\n+                  echo \"$?\" >> /var/tmp/bootstrap.txt\n+                  cd /home/mastodon/live\n+                  echo \"git checkout\" >> /var/tmp/bootstrap.txt\n+                  git checkout ${ReleaseVersion}\n+                  echo \"$?\" >> /var/tmp/bootstrap.txt\n+\n+                  echo \"copy AWS docker-compose.yml\" >> /var/tmp/bootstrap.txt\n+                  rm -f docker-compose.yml\n+                  cp /var/tmp/docker-compose.yml /home/mastodon/live/docker-compose.yml\n+\n+                  echo \"create .env.production\" >> /var/tmp/bootstrap.txt\n+                  cat >> /home/mastodon/live/.env.production << EOF\n+                  LOCAL_DOMAIN=${Domain}\n+                  SINGLE_USER_MODE=false\n+                  SECRET_KEY_BASE=fc6379db2af899b3c980c83fc725f06996e9c5994b8adf34ec3c346731b6964c7b850209e0edfbc594d26a95108b6fe344bd0c9d2deeee127b51184d75a90cce\n+                  OTP_SECRET=0ee36c5efb11cda1113ee59a3506003d4660fd1eeedc858391731baf9c6435dac572e0ec15474be64deeadd84df6f61c8b54070610f34f772c2e16e050587435\n+                  VAPID_PRIVATE_KEY=z2es43uf_5z1z1ZiJRK1bMAeWS02UO871NGAuhBpTSU=\n+                  VAPID_PUBLIC_KEY=BI_XIXxCKG1E_shNXhs_G5ehCYqml8alsUWkpTSUjNL8nDqZGcd-bUMfCKU70x5sUJxXqp7PtIGWkA6yQ6xNP00=\n+                  DB_HOST=${DB_ENDPOINT}\n+                  DB_PORT=${DB_PORT}\n+                  DB_NAME=mastodon_production\n+                  DB_USER=${RDSPostgreSQLMasterUsername}\n+                  DB_PASS=${RDSPostgreSQLMasterPassword}\n+                  REDIS_HOST=${REDIS_ENDPOINT}\n+                  REDIS_PORT=${REDIS_PORT}\n+                  REDIS_PASSWORD=\n+                  S3_ENABLED=true\n+                  S3_PROTOCOL=https\n+                  S3_BUCKET=${UniqueID}.files.${Domain}\n+                  S3_REGION=${AWS::Region}\n+                  S3_HOSTNAME=s3-${AWS::Region}.amazonaws.com\n+                  AWS_ACCESS_KEY_ID=${S3_ACCESSKEY}\n+                  AWS_SECRET_ACCESS_KEY=${S3_SECRETKEY}\n+                  SMTP_SERVER=smtp.mailgun.org\n+                  SMTP_PORT=587\n+                  SMTP_LOGIN=${MailgunLOGIN}\n+                  SMTP_PASSWORD=${MailgunPASSWORD}\n+                  SMTP_AUTH_METHOD=plain\n+                  SMTP_OPENSSL_VERIFY_MODE=none\n+                  SMTP_FROM_ADDRESS=${Domain} <${MailgunLOGIN}>\n+                  EOF\n+\n+                  cd /home/mastodon/live  # Just incase\n+\n+                  echo \"docker-compose build\" >> /var/tmp/bootstrap.txt\n+                  docker-compose build \n+                  echo \"$?\" >> /var/tmp/bootstrap.txt\n+\n+                  echo \"db:setup\" >> /var/tmp/bootstrap.txt\n+                  docker-compose run --rm web rails db:setup -e SAFETY_ASSURED=1 -e RAILS_ENV=production # Create DB tables <-- BORKED?\n+                  echo \"$?\" >> /var/tmp/bootstrap.txt","path":"aws/cloudformation.yml","position":421,"original_position":421,"commit_id":"ced592d8bf994a4b05962d81c91819e50f9db1fa","original_commit_id":"ced592d8bf994a4b05962d81c91819e50f9db1fa","user":{"login":"ojbr","id":1485473,"node_id":"MDQ6VXNlcjE0ODU0NzM=","avatar_url":"https://avatars2.githubusercontent.com/u/1485473?v=4","gravatar_id":"","url":"https://api.github.com/users/ojbr","html_url":"https://github.com/ojbr","followers_url":"https://api.github.com/users/ojbr/followers","following_url":"https://api.github.com/users/ojbr/following{/other_user}","gists_url":"https://api.github.com/users/ojbr/gists{/gist_id}","starred_url":"https://api.github.com/users/ojbr/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/ojbr/subscriptions","organizations_url":"https://api.github.com/users/ojbr/orgs","repos_url":"https://api.github.com/users/ojbr/repos","events_url":"https://api.github.com/users/ojbr/events{/privacy}","received_events_url":"https://api.github.com/users/ojbr/received_events","type":"User","site_admin":false},"body":"In a bundler context would be a good idea:\r\n```\r\ndocker-compose run --rm web bundle exec rails db:setup -e SAFETY_ASSURED=1 -e RAILS_ENV=production\r\n```","created_at":"2018-08-27T15:22:50Z","updated_at":"2018-08-27T15:37:56Z","html_url":"https://github.com/tootsuite/mastodon/pull/8477#discussion_r213014206","pull_request_url":"https://api.github.com/repos/tootsuite/mastodon/pulls/8477","author_association":"NONE","_links":{"self":{"href":"https://api.github.com/repos/tootsuite/mastodon/pulls/comments/213014206"},"html":{"href":"https://github.com/tootsuite/mastodon/pull/8477#discussion_r213014206"},"pull_request":{"href":"https://api.github.com/repos/tootsuite/mastodon/pulls/8477"}}},"pull_request":{"url":"https://api.github.com/repos/tootsuite/mastodon/pulls/8477","id":211009259,"node_id":"MDExOlB1bGxSZXF1ZXN0MjExMDA5MjU5","html_url":"https://github.com/tootsuite/mastodon/pull/8477","diff_url":"https://github.com/tootsuite/mastodon/pull/8477.diff","patch_url":"https://github.com/tootsuite/mastodon/pull/8477.patch","issue_url":"https://api.github.com/repos/tootsuite/mastodon/issues/8477","number":8477,"state":"open","locked":false,"title":"AWS Cloudformation deployment - Full end-to-end Mastodon Instance","user":{"login":"aus-social","id":42644106,"node_id":"MDQ6VXNlcjQyNjQ0MTA2","avatar_url":"https://avatars3.githubusercontent.com/u/42644106?v=4","gravatar_id":"","url":"https://api.github.com/users/aus-social","html_url":"https://github.com/aus-social","followers_url":"https://api.github.com/users/aus-social/followers","following_url":"https://api.github.com/users/aus-social/following{/other_user}","gists_url":"https://api.github.com/users/aus-social/gists{/gist_id}","starred_url":"https://api.github.com/users/aus-social/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/aus-social/subscriptions","organizations_url":"https://api.github.com/users/aus-social/orgs","repos_url":"https://api.github.com/users/aus-social/repos","events_url":"https://api.github.com/users/aus-social/events{/privacy}","received_events_url":"https://api.github.com/users/aus-social/received_events","type":"User","site_admin":false},"body":"Hey team...\r\n\r\nThis is my 0.1.0 release of my Cloudformation... there are a few things we need to improve but it's almost a completely hands off instance deployment.","created_at":"2018-08-27T05:33:20Z","updated_at":"2018-08-27T15:37:55Z","closed_at":null,"merged_at":null,"merge_commit_sha":"b5625b827ccd3c84a96ff84afeacb0345424b243","assignee":null,"assignees":[],"requested_reviewers":[],"requested_teams":[],"labels":[],"milestone":null,"commits_url":"https://api.github.com/repos/tootsuite/mastodon/pulls/8477/commits","review_comments_url":"https://api.github.com/repos/tootsuite/mastodon/pulls/8477/comments","review_comment_url":"https://api.github.com/repos/tootsuite/mastodon/pulls/comments{/number}","comments_url":"https://api.github.com/repos/tootsuite/mastodon/issues/8477/comments","statuses_url":"https://api.github.com/repos/tootsuite/mastodon/statuses/ced592d8bf994a4b05962d81c91819e50f9db1fa","head":{"label":"aus-social:master","ref":"master","sha":"ced592d8bf994a4b05962d81c91819e50f9db1fa","user":{"login":"aus-social","id":42644106,"node_id":"MDQ6VXNlcjQyNjQ0MTA2","avatar_url":"https://avatars3.githubusercontent.com/u/42644106?v=4","gravatar_id":"","url":"https://api.github.com/users/aus-social","html_url":"https://github.com/aus-social","followers_url":"https://api.github.com/users/aus-social/followers","following_url":"https://api.github.com/users/aus-social/following{/other_user}","gists_url":"https://api.github.com/users/aus-social/gists{/gist_id}","starred_url":"https://api.github.com/users/aus-social/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/aus-social/subscriptions","organizations_url":"https://api.github.com/users/aus-social/orgs","repos_url":"https://api.github.com/users/aus-social/repos","events_url":"https://api.github.com/users/aus-social/events{/privacy}","received_events_url":"https://api.github.com/users/aus-social/received_events","type":"User","site_admin":false},"repo":{"id":146249704,"node_id":"MDEwOlJlcG9zaXRvcnkxNDYyNDk3MDQ=","name":"mastodon","full_name":"aus-social/mastodon","owner":{"login":"aus-social","id":42644106,"node_id":"MDQ6VXNlcjQyNjQ0MTA2","avatar_url":"https://avatars3.githubusercontent.com/u/42644106?v=4","gravatar_id":"","url":"https://api.github.com/users/aus-social","html_url":"https://github.com/aus-social","followers_url":"https://api.github.com/users/aus-social/followers","following_url":"https://api.github.com/users/aus-social/following{/other_user}","gists_url":"https://api.github.com/users/aus-social/gists{/gist_id}","starred_url":"https://api.github.com/users/aus-social/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/aus-social/subscriptions","organizations_url":"https://api.github.com/users/aus-social/orgs","repos_url":"https://api.github.com/users/aus-social/repos","events_url":"https://api.github.com/users/aus-social/events{/privacy}","received_events_url":"https://api.github.com/users/aus-social/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/aus-social/mastodon","description":"Your self-hosted, globally interconnected microblogging community","fork":true,"url":"https://api.github.com/repos/aus-social/mastodon","forks_url":"https://api.github.com/repos/aus-social/mastodon/forks","keys_url":"https://api.github.com/repos/aus-social/mastodon/keys{/key_id}","collaborators_url":"https://api.github.com/repos/aus-social/mastodon/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/aus-social/mastodon/teams","hooks_url":"https://api.github.com/repos/aus-social/mastodon/hooks","issue_events_url":"https://api.github.com/repos/aus-social/mastodon/issues/events{/number}","events_url":"https://api.github.com/repos/aus-social/mastodon/events","assignees_url":"https://api.github.com/repos/aus-social/mastodon/assignees{/user}","branches_url":"https://api.github.com/repos/aus-social/mastodon/branches{/branch}","tags_url":"https://api.github.com/repos/aus-social/mastodon/tags","blobs_url":"https://api.github.com/repos/aus-social/mastodon/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/aus-social/mastodon/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/aus-social/mastodon/git/refs{/sha}","trees_url":"https://api.github.com/repos/aus-social/mastodon/git/trees{/sha}","statuses_url":"https://api.github.com/repos/aus-social/mastodon/statuses/{sha}","languages_url":"https://api.github.com/repos/aus-social/mastodon/languages","stargazers_url":"https://api.github.com/repos/aus-social/mastodon/stargazers","contributors_url":"https://api.github.com/repos/aus-social/mastodon/contributors","subscribers_url":"https://api.github.com/repos/aus-social/mastodon/subscribers","subscription_url":"https://api.github.com/repos/aus-social/mastodon/subscription","commits_url":"https://api.github.com/repos/aus-social/mastodon/commits{/sha}","git_commits_url":"https://api.github.com/repos/aus-social/mastodon/git/commits{/sha}","comments_url":"https://api.github.com/repos/aus-social/mastodon/comments{/number}","issue_comment_url":"https://api.github.com/repos/aus-social/mastodon/issues/comments{/number}","contents_url":"https://api.github.com/repos/aus-social/mastodon/contents/{+path}","compare_url":"https://api.github.com/repos/aus-social/mastodon/compare/{base}...{head}","merges_url":"https://api.github.com/repos/aus-social/mastodon/merges","archive_url":"https://api.github.com/repos/aus-social/mastodon/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/aus-social/mastodon/downloads","issues_url":"https://api.github.com/repos/aus-social/mastodon/issues{/number}","pulls_url":"https://api.github.com/repos/aus-social/mastodon/pulls{/number}","milestones_url":"https://api.github.com/repos/aus-social/mastodon/milestones{/number}","notifications_url":"https://api.github.com/repos/aus-social/mastodon/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/aus-social/mastodon/labels{/name}","releases_url":"https://api.github.com/repos/aus-social/mastodon/releases{/id}","deployments_url":"https://api.github.com/repos/aus-social/mastodon/deployments","created_at":"2018-08-27T05:13:58Z","updated_at":"2018-08-27T06:27:35Z","pushed_at":"2018-08-27T06:27:34Z","git_url":"git://github.com/aus-social/mastodon.git","ssh_url":"git@github.com:aus-social/mastodon.git","clone_url":"https://github.com/aus-social/mastodon.git","svn_url":"https://github.com/aus-social/mastodon","homepage":"https://joinmastodon.org","size":63008,"stargazers_count":0,"watchers_count":0,"language":"Ruby","has_issues":false,"has_projects":true,"has_downloads":true,"has_wiki":false,"has_pages":false,"forks_count":0,"mirror_url":null,"archived":false,"open_issues_count":0,"license":{"key":"agpl-3.0","name":"GNU Affero General Public License v3.0","spdx_id":"AGPL-3.0","url":"https://api.github.com/licenses/agpl-3.0","node_id":"MDc6TGljZW5zZTE="},"forks":0,"open_issues":0,"watchers":0,"default_branch":"master"}},"base":{"label":"tootsuite:master","ref":"master","sha":"b31449cd778f9a8639427929f060dee44646bc7d","user":{"login":"tootsuite","id":24979032,"node_id":"MDEyOk9yZ2FuaXphdGlvbjI0OTc5MDMy","avatar_url":"https://avatars3.githubusercontent.com/u/24979032?v=4","gravatar_id":"","url":"https://api.github.com/users/tootsuite","html_url":"https://github.com/tootsuite","followers_url":"https://api.github.com/users/tootsuite/followers","following_url":"https://api.github.com/users/tootsuite/following{/other_user}","gists_url":"https://api.github.com/users/tootsuite/gists{/gist_id}","starred_url":"https://api.github.com/users/tootsuite/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/tootsuite/subscriptions","organizations_url":"https://api.github.com/users/tootsuite/orgs","repos_url":"https://api.github.com/users/tootsuite/repos","events_url":"https://api.github.com/users/tootsuite/events{/privacy}","received_events_url":"https://api.github.com/users/tootsuite/received_events","type":"Organization","site_admin":false},"repo":{"id":52281283,"node_id":"MDEwOlJlcG9zaXRvcnk1MjI4MTI4Mw==","name":"mastodon","full_name":"tootsuite/mastodon","owner":{"login":"tootsuite","id":24979032,"node_id":"MDEyOk9yZ2FuaXphdGlvbjI0OTc5MDMy","avatar_url":"https://avatars3.githubusercontent.com/u/24979032?v=4","gravatar_id":"","url":"https://api.github.com/users/tootsuite","html_url":"https://github.com/tootsuite","followers_url":"https://api.github.com/users/tootsuite/followers","following_url":"https://api.github.com/users/tootsuite/following{/other_user}","gists_url":"https://api.github.com/users/tootsuite/gists{/gist_id}","starred_url":"https://api.github.com/users/tootsuite/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/tootsuite/subscriptions","organizations_url":"https://api.github.com/users/tootsuite/orgs","repos_url":"https://api.github.com/users/tootsuite/repos","events_url":"https://api.github.com/users/tootsuite/events{/privacy}","received_events_url":"https://api.github.com/users/tootsuite/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/tootsuite/mastodon","description":"Your self-hosted, globally interconnected microblogging community","fork":false,"url":"https://api.github.com/repos/tootsuite/mastodon","forks_url":"https://api.github.com/repos/tootsuite/mastodon/forks","keys_url":"https://api.github.com/repos/tootsuite/mastodon/keys{/key_id}","collaborators_url":"https://api.github.com/repos/tootsuite/mastodon/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/tootsuite/mastodon/teams","hooks_url":"https://api.github.com/repos/tootsuite/mastodon/hooks","issue_events_url":"https://api.github.com/repos/tootsuite/mastodon/issues/events{/number}","events_url":"https://api.github.com/repos/tootsuite/mastodon/events","assignees_url":"https://api.github.com/repos/tootsuite/mastodon/assignees{/user}","branches_url":"https://api.github.com/repos/tootsuite/mastodon/branches{/branch}","tags_url":"https://api.github.com/repos/tootsuite/mastodon/tags","blobs_url":"https://api.github.com/repos/tootsuite/mastodon/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/tootsuite/mastodon/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/tootsuite/mastodon/git/refs{/sha}","trees_url":"https://api.github.com/repos/tootsuite/mastodon/git/trees{/sha}","statuses_url":"https://api.github.com/repos/tootsuite/mastodon/statuses/{sha}","languages_url":"https://api.github.com/repos/tootsuite/mastodon/languages","stargazers_url":"https://api.github.com/repos/tootsuite/mastodon/stargazers","contributors_url":"https://api.github.com/repos/tootsuite/mastodon/contributors","subscribers_url":"https://api.github.com/repos/tootsuite/mastodon/subscribers","subscription_url":"https://api.github.com/repos/tootsuite/mastodon/subscription","commits_url":"https://api.github.com/repos/tootsuite/mastodon/commits{/sha}","git_commits_url":"https://api.github.com/repos/tootsuite/mastodon/git/commits{/sha}","comments_url":"https://api.github.com/repos/tootsuite/mastodon/comments{/number}","issue_comment_url":"https://api.github.com/repos/tootsuite/mastodon/issues/comments{/number}","contents_url":"https://api.github.com/repos/tootsuite/mastodon/contents/{+path}","compare_url":"https://api.github.com/repos/tootsuite/mastodon/compare/{base}...{head}","merges_url":"https://api.github.com/repos/tootsuite/mastodon/merges","archive_url":"https://api.github.com/repos/tootsuite/mastodon/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/tootsuite/mastodon/downloads","issues_url":"https://api.github.com/repos/tootsuite/mastodon/issues{/number}","pulls_url":"https://api.github.com/repos/tootsuite/mastodon/pulls{/number}","milestones_url":"https://api.github.com/repos/tootsuite/mastodon/milestones{/number}","notifications_url":"https://api.github.com/repos/tootsuite/mastodon/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/tootsuite/mastodon/labels{/name}","releases_url":"https://api.github.com/repos/tootsuite/mastodon/releases{/id}","deployments_url":"https://api.github.com/repos/tootsuite/mastodon/deployments","created_at":"2016-02-22T15:01:25Z","updated_at":"2018-08-27T15:33:27Z","pushed_at":"2018-08-27T14:04:05Z","git_url":"git://github.com/tootsuite/mastodon.git","ssh_url":"git@github.com:tootsuite/mastodon.git","clone_url":"https://github.com/tootsuite/mastodon.git","svn_url":"https://github.com/tootsuite/mastodon","homepage":"https://joinmastodon.org","size":62984,"stargazers_count":14800,"watchers_count":14800,"language":"Ruby","has_issues":true,"has_projects":true,"has_downloads":true,"has_wiki":false,"has_pages":false,"forks_count":2619,"mirror_url":null,"archived":false,"open_issues_count":997,"license":{"key":"agpl-3.0","name":"GNU Affero General Public License v3.0","spdx_id":"AGPL-3.0","url":"https://api.github.com/licenses/agpl-3.0","node_id":"MDc6TGljZW5zZTE="},"forks":2619,"open_issues":997,"watchers":14800,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/tootsuite/mastodon/pulls/8477"},"html":{"href":"https://github.com/tootsuite/mastodon/pull/8477"},"issue":{"href":"https://api.github.com/repos/tootsuite/mastodon/issues/8477"},"comments":{"href":"https://api.github.com/repos/tootsuite/mastodon/issues/8477/comments"},"review_comments":{"href":"https://api.github.com/repos/tootsuite/mastodon/pulls/8477/comments"},"review_comment":{"href":"https://api.github.com/repos/tootsuite/mastodon/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/tootsuite/mastodon/pulls/8477/commits"},"statuses":{"href":"https://api.github.com/repos/tootsuite/mastodon/statuses/ced592d8bf994a4b05962d81c91819e50f9db1fa"}},"author_association":"NONE"}}
{"actor":{"display_login":"ojbr"}}