├── .github └── workflows │ └── build.yaml ├── .gitignore ├── .npmrc ├── package.json ├── readme.md ├── scripts ├── publish-layers.js ├── supported-regions.js └── update-readme.js ├── src ├── bootstrap └── runtime.ts └── test └── dedupe-test.js /.github/workflows/build.yaml: -------------------------------------------------------------------------------- 1 | name: Deno Runtime Lambda Layer 2 | 3 | on: 4 | push: 5 | paths-ignore: 6 | - '**/readme.md' # ignore changes to readme so this action can update the readme! 7 | 8 | env: 9 | version: "1.36.2" 10 | 11 | jobs: 12 | build: 13 | runs-on: ubuntu-latest 14 | container: docker://public.ecr.aws/lambda/provided 15 | steps: 16 | - name: Install necessary packages 17 | run: yum install gzip tar unzip zip -y 18 | 19 | - name: Check out repo 20 | uses: actions/checkout@v3 21 | 22 | - name: Download Deno 23 | run: curl -fsSL https://deno.land/x/install/install.sh | sh -s v${{ env.version }} 24 | 25 | - name: Verify the build 26 | run: /github/home/.deno/bin/deno --version 27 | 28 | - name: Build the Lambda Layer 29 | run: | 30 | mkdir -p src/bin 31 | cp /github/home/.deno/bin/deno src/bin/deno 32 | cd src 33 | zip -r ../deno-${{ env.version }}-x86.zip . 34 | 35 | - name: Persist layer artifact 36 | uses: actions/upload-artifact@v3 37 | with: 38 | name: layer 39 | path: deno-${{ env.version }}-x86.zip 40 | 41 | publish: 42 | needs: build 43 | runs-on: ubuntu-latest 44 | steps: 45 | - name: Check out repo 46 | uses: actions/checkout@v3 47 | 48 | # these secrets are set up at the org level 49 | - name: Configure AWS credentials 50 | uses: aws-actions/configure-aws-credentials@v1 51 | with: 52 | aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }} 53 | aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }} 54 | aws-region: us-west-2 55 | 56 | # uses node for interacting w the aws-sdk and github apis 57 | - name: Setup Node 58 | uses: actions/setup-node@v3 59 | with: 60 | node-version: '18' 61 | 62 | - name: Get layer artifact 63 | uses: actions/download-artifact@v3 64 | with: 65 | name: layer 66 | 67 | # this is just backups for debugging purposes 68 | - name: Upload to S3 69 | run: | 70 | aws s3 cp deno-${{ env.version }}-x86.zip s3://begin-deno-runtime/deno-${{ env.version }}-x86.zip 71 | 72 | # iterates through regions adding layers to each 73 | - name: Publish layer to all AWS regions 74 | run: | 75 | npm install 76 | node scripts/publish-layers.js 77 | 78 | # update the repo readme with deno version -> arn list organized by region 79 | - name: Update readme.md 80 | run: | 81 | GITHUB_TOKEN=${{ github.token }} node scripts/update-readme.js 82 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | deno* 2 | node_modules 3 | -------------------------------------------------------------------------------- /.npmrc: -------------------------------------------------------------------------------- 1 | package-lock=false 2 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "scripts": { 3 | "test": "tape test/*-test.js | tap-spec" 4 | }, 5 | "dependencies": { 6 | "aws-sdk": "2.1364.0", 7 | "semver": "^7.5.4", 8 | "tap-spec": "^5.0.0", 9 | "tape": "^5.6.6", 10 | "tiny-json-http": "^7.5.1" 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /readme.md: -------------------------------------------------------------------------------- 1 | # DenoRuntime Lambda Layer 2 | 3 | > this readme was generated by scripts/update-readme.js 4 | 5 | ## us-east-1 6 | - 1.36.2-x86 arn:aws:lambda:us-east-1:455488262213:layer:DenoRuntime:42 7 | - 1.35.0-x86 arn:aws:lambda:us-east-1:455488262213:layer:DenoRuntime:41 8 | - 1.30.0-x86 arn:aws:lambda:us-east-1:455488262213:layer:DenoRuntime:40 9 | - 1.28.0-x86 arn:aws:lambda:us-east-1:455488262213:layer:DenoRuntime:39 10 | - 1.24.3-x86 arn:aws:lambda:us-east-1:455488262213:layer:DenoRuntime:38 11 | - 1.22.0-x86 arn:aws:lambda:us-east-1:455488262213:layer:DenoRuntime:37 12 | - 1.21.0-x86 arn:aws:lambda:us-east-1:455488262213:layer:DenoRuntime:36 13 | - 1.20.6-x86 arn:aws:lambda:us-east-1:455488262213:layer:DenoRuntime:35 14 | - 1.20.3-x86 arn:aws:lambda:us-east-1:455488262213:layer:DenoRuntime:34 15 | - 1.20.2-x86 arn:aws:lambda:us-east-1:455488262213:layer:DenoRuntime:33 16 | - 1.19.3-x86 arn:aws:lambda:us-east-1:455488262213:layer:DenoRuntime:32 17 | - 1.19.2-x86 arn:aws:lambda:us-east-1:455488262213:layer:DenoRuntime:31 18 | - 1.19.1-x86 arn:aws:lambda:us-east-1:455488262213:layer:DenoRuntime:30 19 | - 1.3.0 arn:aws:lambda:us-east-1:455488262213:layer:DenoRuntime:19 20 | - 1.1.0 arn:aws:lambda:us-east-1:455488262213:layer:DenoRuntime:17 21 | - 1.0.5 arn:aws:lambda:us-east-1:455488262213:layer:DenoRuntime:16 22 | 23 | ## us-east-2 24 | - 1.36.2-x86 arn:aws:lambda:us-east-2:455488262213:layer:DenoRuntime:33 25 | - 1.35.0-x86 arn:aws:lambda:us-east-2:455488262213:layer:DenoRuntime:32 26 | - 1.30.0-x86 arn:aws:lambda:us-east-2:455488262213:layer:DenoRuntime:31 27 | - 1.28.0-x86 arn:aws:lambda:us-east-2:455488262213:layer:DenoRuntime:30 28 | - 1.24.3-x86 arn:aws:lambda:us-east-2:455488262213:layer:DenoRuntime:29 29 | - 1.22.0-x86 arn:aws:lambda:us-east-2:455488262213:layer:DenoRuntime:28 30 | - 1.21.0-x86 arn:aws:lambda:us-east-2:455488262213:layer:DenoRuntime:27 31 | - 1.20.6-x86 arn:aws:lambda:us-east-2:455488262213:layer:DenoRuntime:26 32 | - 1.20.3-x86 arn:aws:lambda:us-east-2:455488262213:layer:DenoRuntime:25 33 | - 1.20.2-x86 arn:aws:lambda:us-east-2:455488262213:layer:DenoRuntime:24 34 | - 1.19.3-x86 arn:aws:lambda:us-east-2:455488262213:layer:DenoRuntime:23 35 | - 1.19.2-x86 arn:aws:lambda:us-east-2:455488262213:layer:DenoRuntime:22 36 | - 1.19.1-x86 arn:aws:lambda:us-east-2:455488262213:layer:DenoRuntime:21 37 | - 1.3.0 arn:aws:lambda:us-east-2:455488262213:layer:DenoRuntime:10 38 | - 1.1.0 arn:aws:lambda:us-east-2:455488262213:layer:DenoRuntime:8 39 | - 1.0.5 arn:aws:lambda:us-east-2:455488262213:layer:DenoRuntime:7 40 | 41 | ## us-west-1 42 | - 1.36.2-x86 arn:aws:lambda:us-west-1:455488262213:layer:DenoRuntime:33 43 | - 1.35.0-x86 arn:aws:lambda:us-west-1:455488262213:layer:DenoRuntime:32 44 | - 1.30.0-x86 arn:aws:lambda:us-west-1:455488262213:layer:DenoRuntime:31 45 | - 1.28.0-x86 arn:aws:lambda:us-west-1:455488262213:layer:DenoRuntime:30 46 | - 1.24.3-x86 arn:aws:lambda:us-west-1:455488262213:layer:DenoRuntime:29 47 | - 1.22.0-x86 arn:aws:lambda:us-west-1:455488262213:layer:DenoRuntime:28 48 | - 1.21.0-x86 arn:aws:lambda:us-west-1:455488262213:layer:DenoRuntime:27 49 | - 1.20.6-x86 arn:aws:lambda:us-west-1:455488262213:layer:DenoRuntime:26 50 | - 1.20.3-x86 arn:aws:lambda:us-west-1:455488262213:layer:DenoRuntime:25 51 | - 1.20.2-x86 arn:aws:lambda:us-west-1:455488262213:layer:DenoRuntime:24 52 | - 1.19.3-x86 arn:aws:lambda:us-west-1:455488262213:layer:DenoRuntime:23 53 | - 1.19.2-x86 arn:aws:lambda:us-west-1:455488262213:layer:DenoRuntime:22 54 | - 1.19.1-x86 arn:aws:lambda:us-west-1:455488262213:layer:DenoRuntime:21 55 | - 1.3.0 arn:aws:lambda:us-west-1:455488262213:layer:DenoRuntime:11 56 | - 1.1.0 arn:aws:lambda:us-west-1:455488262213:layer:DenoRuntime:9 57 | - 1.0.5 arn:aws:lambda:us-west-1:455488262213:layer:DenoRuntime:8 58 | 59 | ## us-west-2 60 | - 1.36.2-x86 arn:aws:lambda:us-west-2:455488262213:layer:DenoRuntime:36 61 | - 1.35.0-x86 arn:aws:lambda:us-west-2:455488262213:layer:DenoRuntime:35 62 | - 1.30.0-x86 arn:aws:lambda:us-west-2:455488262213:layer:DenoRuntime:34 63 | - 1.28.0-x86 arn:aws:lambda:us-west-2:455488262213:layer:DenoRuntime:33 64 | - 1.24.3-x86 arn:aws:lambda:us-west-2:455488262213:layer:DenoRuntime:32 65 | - 1.22.0-x86 arn:aws:lambda:us-west-2:455488262213:layer:DenoRuntime:31 66 | - 1.21.0-x86 arn:aws:lambda:us-west-2:455488262213:layer:DenoRuntime:30 67 | - 1.20.6-x86 arn:aws:lambda:us-west-2:455488262213:layer:DenoRuntime:29 68 | - 1.20.3-x86 arn:aws:lambda:us-west-2:455488262213:layer:DenoRuntime:28 69 | - 1.20.2-x86 arn:aws:lambda:us-west-2:455488262213:layer:DenoRuntime:27 70 | - 1.19.3-x86 arn:aws:lambda:us-west-2:455488262213:layer:DenoRuntime:26 71 | - 1.19.2-x86 arn:aws:lambda:us-west-2:455488262213:layer:DenoRuntime:25 72 | - 1.19.1-x86 arn:aws:lambda:us-west-2:455488262213:layer:DenoRuntime:24 73 | - 1.18.0-x86 arn:aws:lambda:us-west-2:455488262213:layer:DenoRuntime:14 74 | - 1.19.0-x86 arn:aws:lambda:us-west-2:455488262213:layer:DenoRuntime:13 75 | - 1.3.0 arn:aws:lambda:us-west-2:455488262213:layer:DenoRuntime:10 76 | - 1.1.0 arn:aws:lambda:us-west-2:455488262213:layer:DenoRuntime:8 77 | - 1.0.5 arn:aws:lambda:us-west-2:455488262213:layer:DenoRuntime:7 78 | 79 | ## ca-central-1 80 | - 1.36.2-x86 arn:aws:lambda:ca-central-1:455488262213:layer:DenoRuntime:79 81 | - 1.35.0-x86 arn:aws:lambda:ca-central-1:455488262213:layer:DenoRuntime:78 82 | - 1.30.0-x86 arn:aws:lambda:ca-central-1:455488262213:layer:DenoRuntime:77 83 | - 1.28.0-x86 arn:aws:lambda:ca-central-1:455488262213:layer:DenoRuntime:76 84 | - 1.24.3-x86 arn:aws:lambda:ca-central-1:455488262213:layer:DenoRuntime:75 85 | - 1.22.0-x86 arn:aws:lambda:ca-central-1:455488262213:layer:DenoRuntime:74 86 | - 1.21.0-x86 arn:aws:lambda:ca-central-1:455488262213:layer:DenoRuntime:73 87 | - 1.20.6-x86 arn:aws:lambda:ca-central-1:455488262213:layer:DenoRuntime:72 88 | - 1.20.3-x86 arn:aws:lambda:ca-central-1:455488262213:layer:DenoRuntime:71 89 | - 1.20.2-x86 arn:aws:lambda:ca-central-1:455488262213:layer:DenoRuntime:70 90 | - 1.19.3-x86 arn:aws:lambda:ca-central-1:455488262213:layer:DenoRuntime:69 91 | - 1.19.2-x86 arn:aws:lambda:ca-central-1:455488262213:layer:DenoRuntime:68 92 | - 1.19.1-x86 arn:aws:lambda:ca-central-1:455488262213:layer:DenoRuntime:67 93 | - 1.18.0-x86 arn:aws:lambda:ca-central-1:455488262213:layer:DenoRuntime:55 94 | - 1.19.0-x86 arn:aws:lambda:ca-central-1:455488262213:layer:DenoRuntime:49 95 | - 1.15.0-x86 arn:aws:lambda:ca-central-1:455488262213:layer:DenoRuntime:47 96 | - 1.16.0-x86 arn:aws:lambda:ca-central-1:455488262213:layer:DenoRuntime:45 97 | - 1.17.0-x86 arn:aws:lambda:ca-central-1:455488262213:layer:DenoRuntime:43 98 | - 1.1.0 arn:aws:lambda:ca-central-1:455488262213:layer:DenoRuntime:35 99 | - 1.0.5 arn:aws:lambda:ca-central-1:455488262213:layer:DenoRuntime:34 100 | - 1.0.4-rc2 arn:aws:lambda:ca-central-1:455488262213:layer:DenoRuntime:33 101 | - 1.0.4-rc1 arn:aws:lambda:ca-central-1:455488262213:layer:DenoRuntime:32 102 | - 1.0.4 arn:aws:lambda:ca-central-1:455488262213:layer:DenoRuntime:31 103 | 104 | ## ap-south-1 105 | - 1.36.2-x86 arn:aws:lambda:ap-south-1:455488262213:layer:DenoRuntime:16 106 | - 1.35.0-x86 arn:aws:lambda:ap-south-1:455488262213:layer:DenoRuntime:15 107 | - 1.30.0-x86 arn:aws:lambda:ap-south-1:455488262213:layer:DenoRuntime:14 108 | - 1.28.0-x86 arn:aws:lambda:ap-south-1:455488262213:layer:DenoRuntime:13 109 | - 1.24.3-x86 arn:aws:lambda:ap-south-1:455488262213:layer:DenoRuntime:12 110 | - 1.22.0-x86 arn:aws:lambda:ap-south-1:455488262213:layer:DenoRuntime:11 111 | - 1.21.0-x86 arn:aws:lambda:ap-south-1:455488262213:layer:DenoRuntime:10 112 | - 1.20.6-x86 arn:aws:lambda:ap-south-1:455488262213:layer:DenoRuntime:9 113 | - 1.20.3-x86 arn:aws:lambda:ap-south-1:455488262213:layer:DenoRuntime:8 114 | - 1.20.2-x86 arn:aws:lambda:ap-south-1:455488262213:layer:DenoRuntime:7 115 | - 1.19.3-x86 arn:aws:lambda:ap-south-1:455488262213:layer:DenoRuntime:6 116 | - 1.19.2-x86 arn:aws:lambda:ap-south-1:455488262213:layer:DenoRuntime:5 117 | - 1.19.1-x86 arn:aws:lambda:ap-south-1:455488262213:layer:DenoRuntime:4 118 | 119 | ## ap-northeast-3 120 | - 1.36.2-x86 arn:aws:lambda:ap-northeast-3:455488262213:layer:DenoRuntime:15 121 | - 1.35.0-x86 arn:aws:lambda:ap-northeast-3:455488262213:layer:DenoRuntime:14 122 | - 1.30.0-x86 arn:aws:lambda:ap-northeast-3:455488262213:layer:DenoRuntime:13 123 | - 1.28.0-x86 arn:aws:lambda:ap-northeast-3:455488262213:layer:DenoRuntime:12 124 | - 1.24.3-x86 arn:aws:lambda:ap-northeast-3:455488262213:layer:DenoRuntime:11 125 | - 1.22.0-x86 arn:aws:lambda:ap-northeast-3:455488262213:layer:DenoRuntime:10 126 | - 1.21.0-x86 arn:aws:lambda:ap-northeast-3:455488262213:layer:DenoRuntime:9 127 | - 1.20.6-x86 arn:aws:lambda:ap-northeast-3:455488262213:layer:DenoRuntime:8 128 | - 1.20.3-x86 arn:aws:lambda:ap-northeast-3:455488262213:layer:DenoRuntime:7 129 | - 1.20.2-x86 arn:aws:lambda:ap-northeast-3:455488262213:layer:DenoRuntime:6 130 | - 1.19.3-x86 arn:aws:lambda:ap-northeast-3:455488262213:layer:DenoRuntime:5 131 | - 1.19.2-x86 arn:aws:lambda:ap-northeast-3:455488262213:layer:DenoRuntime:4 132 | - 1.19.1-x86 arn:aws:lambda:ap-northeast-3:455488262213:layer:DenoRuntime:3 133 | 134 | ## ap-northeast-2 135 | - 1.36.2-x86 arn:aws:lambda:ap-northeast-2:455488262213:layer:DenoRuntime:15 136 | - 1.35.0-x86 arn:aws:lambda:ap-northeast-2:455488262213:layer:DenoRuntime:14 137 | - 1.30.0-x86 arn:aws:lambda:ap-northeast-2:455488262213:layer:DenoRuntime:13 138 | - 1.28.0-x86 arn:aws:lambda:ap-northeast-2:455488262213:layer:DenoRuntime:12 139 | - 1.24.3-x86 arn:aws:lambda:ap-northeast-2:455488262213:layer:DenoRuntime:11 140 | - 1.22.0-x86 arn:aws:lambda:ap-northeast-2:455488262213:layer:DenoRuntime:10 141 | - 1.21.0-x86 arn:aws:lambda:ap-northeast-2:455488262213:layer:DenoRuntime:9 142 | - 1.20.6-x86 arn:aws:lambda:ap-northeast-2:455488262213:layer:DenoRuntime:8 143 | - 1.20.3-x86 arn:aws:lambda:ap-northeast-2:455488262213:layer:DenoRuntime:7 144 | - 1.20.2-x86 arn:aws:lambda:ap-northeast-2:455488262213:layer:DenoRuntime:6 145 | - 1.19.3-x86 arn:aws:lambda:ap-northeast-2:455488262213:layer:DenoRuntime:5 146 | - 1.19.2-x86 arn:aws:lambda:ap-northeast-2:455488262213:layer:DenoRuntime:4 147 | - 1.19.1-x86 arn:aws:lambda:ap-northeast-2:455488262213:layer:DenoRuntime:3 148 | 149 | ## ap-southeast-1 150 | - 1.36.2-x86 arn:aws:lambda:ap-southeast-1:455488262213:layer:DenoRuntime:16 151 | - 1.35.0-x86 arn:aws:lambda:ap-southeast-1:455488262213:layer:DenoRuntime:15 152 | - 1.30.0-x86 arn:aws:lambda:ap-southeast-1:455488262213:layer:DenoRuntime:14 153 | - 1.28.0-x86 arn:aws:lambda:ap-southeast-1:455488262213:layer:DenoRuntime:13 154 | - 1.24.3-x86 arn:aws:lambda:ap-southeast-1:455488262213:layer:DenoRuntime:12 155 | - 1.22.0-x86 arn:aws:lambda:ap-southeast-1:455488262213:layer:DenoRuntime:11 156 | - 1.21.0-x86 arn:aws:lambda:ap-southeast-1:455488262213:layer:DenoRuntime:10 157 | - 1.20.6-x86 arn:aws:lambda:ap-southeast-1:455488262213:layer:DenoRuntime:9 158 | - 1.20.3-x86 arn:aws:lambda:ap-southeast-1:455488262213:layer:DenoRuntime:8 159 | - 1.20.2-x86 arn:aws:lambda:ap-southeast-1:455488262213:layer:DenoRuntime:7 160 | - 1.19.3-x86 arn:aws:lambda:ap-southeast-1:455488262213:layer:DenoRuntime:6 161 | - 1.19.2-x86 arn:aws:lambda:ap-southeast-1:455488262213:layer:DenoRuntime:5 162 | - 1.19.1-x86 arn:aws:lambda:ap-southeast-1:455488262213:layer:DenoRuntime:4 163 | 164 | ## ap-southeast-2 165 | - 1.36.2-x86 arn:aws:lambda:ap-southeast-2:455488262213:layer:DenoRuntime:16 166 | - 1.35.0-x86 arn:aws:lambda:ap-southeast-2:455488262213:layer:DenoRuntime:15 167 | - 1.30.0-x86 arn:aws:lambda:ap-southeast-2:455488262213:layer:DenoRuntime:14 168 | - 1.28.0-x86 arn:aws:lambda:ap-southeast-2:455488262213:layer:DenoRuntime:13 169 | - 1.24.3-x86 arn:aws:lambda:ap-southeast-2:455488262213:layer:DenoRuntime:12 170 | - 1.22.0-x86 arn:aws:lambda:ap-southeast-2:455488262213:layer:DenoRuntime:11 171 | - 1.21.0-x86 arn:aws:lambda:ap-southeast-2:455488262213:layer:DenoRuntime:10 172 | - 1.20.6-x86 arn:aws:lambda:ap-southeast-2:455488262213:layer:DenoRuntime:9 173 | - 1.20.3-x86 arn:aws:lambda:ap-southeast-2:455488262213:layer:DenoRuntime:8 174 | - 1.20.2-x86 arn:aws:lambda:ap-southeast-2:455488262213:layer:DenoRuntime:7 175 | - 1.19.3-x86 arn:aws:lambda:ap-southeast-2:455488262213:layer:DenoRuntime:6 176 | - 1.19.2-x86 arn:aws:lambda:ap-southeast-2:455488262213:layer:DenoRuntime:5 177 | - 1.19.1-x86 arn:aws:lambda:ap-southeast-2:455488262213:layer:DenoRuntime:4 178 | 179 | ## ap-northeast-1 180 | - 1.36.2-x86 arn:aws:lambda:ap-northeast-1:455488262213:layer:DenoRuntime:16 181 | - 1.35.0-x86 arn:aws:lambda:ap-northeast-1:455488262213:layer:DenoRuntime:15 182 | - 1.30.0-x86 arn:aws:lambda:ap-northeast-1:455488262213:layer:DenoRuntime:14 183 | - 1.28.0-x86 arn:aws:lambda:ap-northeast-1:455488262213:layer:DenoRuntime:13 184 | - 1.24.3-x86 arn:aws:lambda:ap-northeast-1:455488262213:layer:DenoRuntime:12 185 | - 1.22.0-x86 arn:aws:lambda:ap-northeast-1:455488262213:layer:DenoRuntime:11 186 | - 1.21.0-x86 arn:aws:lambda:ap-northeast-1:455488262213:layer:DenoRuntime:10 187 | - 1.20.6-x86 arn:aws:lambda:ap-northeast-1:455488262213:layer:DenoRuntime:9 188 | - 1.20.3-x86 arn:aws:lambda:ap-northeast-1:455488262213:layer:DenoRuntime:8 189 | - 1.20.2-x86 arn:aws:lambda:ap-northeast-1:455488262213:layer:DenoRuntime:7 190 | - 1.19.3-x86 arn:aws:lambda:ap-northeast-1:455488262213:layer:DenoRuntime:6 191 | - 1.19.2-x86 arn:aws:lambda:ap-northeast-1:455488262213:layer:DenoRuntime:5 192 | - 1.19.1-x86 arn:aws:lambda:ap-northeast-1:455488262213:layer:DenoRuntime:4 193 | 194 | ## eu-central-1 195 | - 1.36.2-x86 arn:aws:lambda:eu-central-1:455488262213:layer:DenoRuntime:16 196 | - 1.35.0-x86 arn:aws:lambda:eu-central-1:455488262213:layer:DenoRuntime:15 197 | - 1.30.0-x86 arn:aws:lambda:eu-central-1:455488262213:layer:DenoRuntime:14 198 | - 1.28.0-x86 arn:aws:lambda:eu-central-1:455488262213:layer:DenoRuntime:13 199 | - 1.24.3-x86 arn:aws:lambda:eu-central-1:455488262213:layer:DenoRuntime:12 200 | - 1.22.0-x86 arn:aws:lambda:eu-central-1:455488262213:layer:DenoRuntime:11 201 | - 1.21.0-x86 arn:aws:lambda:eu-central-1:455488262213:layer:DenoRuntime:10 202 | - 1.20.6-x86 arn:aws:lambda:eu-central-1:455488262213:layer:DenoRuntime:9 203 | - 1.20.3-x86 arn:aws:lambda:eu-central-1:455488262213:layer:DenoRuntime:8 204 | - 1.20.2-x86 arn:aws:lambda:eu-central-1:455488262213:layer:DenoRuntime:7 205 | - 1.19.3-x86 arn:aws:lambda:eu-central-1:455488262213:layer:DenoRuntime:6 206 | - 1.19.2-x86 arn:aws:lambda:eu-central-1:455488262213:layer:DenoRuntime:5 207 | - 1.19.1-x86 arn:aws:lambda:eu-central-1:455488262213:layer:DenoRuntime:4 208 | 209 | ## eu-west-1 210 | - 1.36.2-x86 arn:aws:lambda:eu-west-1:455488262213:layer:DenoRuntime:16 211 | - 1.35.0-x86 arn:aws:lambda:eu-west-1:455488262213:layer:DenoRuntime:15 212 | - 1.30.0-x86 arn:aws:lambda:eu-west-1:455488262213:layer:DenoRuntime:14 213 | - 1.28.0-x86 arn:aws:lambda:eu-west-1:455488262213:layer:DenoRuntime:13 214 | - 1.24.3-x86 arn:aws:lambda:eu-west-1:455488262213:layer:DenoRuntime:12 215 | - 1.22.0-x86 arn:aws:lambda:eu-west-1:455488262213:layer:DenoRuntime:11 216 | - 1.21.0-x86 arn:aws:lambda:eu-west-1:455488262213:layer:DenoRuntime:10 217 | - 1.20.6-x86 arn:aws:lambda:eu-west-1:455488262213:layer:DenoRuntime:9 218 | - 1.20.3-x86 arn:aws:lambda:eu-west-1:455488262213:layer:DenoRuntime:8 219 | - 1.20.2-x86 arn:aws:lambda:eu-west-1:455488262213:layer:DenoRuntime:7 220 | - 1.19.3-x86 arn:aws:lambda:eu-west-1:455488262213:layer:DenoRuntime:6 221 | - 1.19.2-x86 arn:aws:lambda:eu-west-1:455488262213:layer:DenoRuntime:5 222 | - 1.19.1-x86 arn:aws:lambda:eu-west-1:455488262213:layer:DenoRuntime:4 223 | 224 | ## eu-west-2 225 | - 1.36.2-x86 arn:aws:lambda:eu-west-2:455488262213:layer:DenoRuntime:16 226 | - 1.35.0-x86 arn:aws:lambda:eu-west-2:455488262213:layer:DenoRuntime:15 227 | - 1.30.0-x86 arn:aws:lambda:eu-west-2:455488262213:layer:DenoRuntime:14 228 | - 1.28.0-x86 arn:aws:lambda:eu-west-2:455488262213:layer:DenoRuntime:13 229 | - 1.24.3-x86 arn:aws:lambda:eu-west-2:455488262213:layer:DenoRuntime:12 230 | - 1.22.0-x86 arn:aws:lambda:eu-west-2:455488262213:layer:DenoRuntime:11 231 | - 1.21.0-x86 arn:aws:lambda:eu-west-2:455488262213:layer:DenoRuntime:10 232 | - 1.20.6-x86 arn:aws:lambda:eu-west-2:455488262213:layer:DenoRuntime:9 233 | - 1.20.3-x86 arn:aws:lambda:eu-west-2:455488262213:layer:DenoRuntime:8 234 | - 1.20.2-x86 arn:aws:lambda:eu-west-2:455488262213:layer:DenoRuntime:7 235 | - 1.19.3-x86 arn:aws:lambda:eu-west-2:455488262213:layer:DenoRuntime:6 236 | - 1.19.2-x86 arn:aws:lambda:eu-west-2:455488262213:layer:DenoRuntime:5 237 | - 1.19.1-x86 arn:aws:lambda:eu-west-2:455488262213:layer:DenoRuntime:4 238 | 239 | ## eu-north-1 240 | - 1.36.2-x86 arn:aws:lambda:eu-north-1:455488262213:layer:DenoRuntime:15 241 | - 1.35.0-x86 arn:aws:lambda:eu-north-1:455488262213:layer:DenoRuntime:14 242 | - 1.30.0-x86 arn:aws:lambda:eu-north-1:455488262213:layer:DenoRuntime:13 243 | - 1.28.0-x86 arn:aws:lambda:eu-north-1:455488262213:layer:DenoRuntime:12 244 | - 1.24.3-x86 arn:aws:lambda:eu-north-1:455488262213:layer:DenoRuntime:11 245 | - 1.22.0-x86 arn:aws:lambda:eu-north-1:455488262213:layer:DenoRuntime:10 246 | - 1.21.0-x86 arn:aws:lambda:eu-north-1:455488262213:layer:DenoRuntime:9 247 | - 1.20.6-x86 arn:aws:lambda:eu-north-1:455488262213:layer:DenoRuntime:8 248 | - 1.20.3-x86 arn:aws:lambda:eu-north-1:455488262213:layer:DenoRuntime:7 249 | - 1.20.2-x86 arn:aws:lambda:eu-north-1:455488262213:layer:DenoRuntime:6 250 | - 1.19.3-x86 arn:aws:lambda:eu-north-1:455488262213:layer:DenoRuntime:5 251 | - 1.19.2-x86 arn:aws:lambda:eu-north-1:455488262213:layer:DenoRuntime:4 252 | - 1.19.1-x86 arn:aws:lambda:eu-north-1:455488262213:layer:DenoRuntime:3 253 | 254 | ## eu-west-3 255 | - 1.36.2-x86 arn:aws:lambda:eu-west-3:455488262213:layer:DenoRuntime:15 256 | - 1.35.0-x86 arn:aws:lambda:eu-west-3:455488262213:layer:DenoRuntime:14 257 | - 1.30.0-x86 arn:aws:lambda:eu-west-3:455488262213:layer:DenoRuntime:13 258 | - 1.28.0-x86 arn:aws:lambda:eu-west-3:455488262213:layer:DenoRuntime:12 259 | - 1.24.3-x86 arn:aws:lambda:eu-west-3:455488262213:layer:DenoRuntime:11 260 | - 1.22.0-x86 arn:aws:lambda:eu-west-3:455488262213:layer:DenoRuntime:10 261 | - 1.21.0-x86 arn:aws:lambda:eu-west-3:455488262213:layer:DenoRuntime:9 262 | - 1.20.6-x86 arn:aws:lambda:eu-west-3:455488262213:layer:DenoRuntime:8 263 | - 1.20.3-x86 arn:aws:lambda:eu-west-3:455488262213:layer:DenoRuntime:7 264 | - 1.20.2-x86 arn:aws:lambda:eu-west-3:455488262213:layer:DenoRuntime:6 265 | - 1.19.3-x86 arn:aws:lambda:eu-west-3:455488262213:layer:DenoRuntime:5 266 | - 1.19.2-x86 arn:aws:lambda:eu-west-3:455488262213:layer:DenoRuntime:4 267 | - 1.19.1-x86 arn:aws:lambda:eu-west-3:455488262213:layer:DenoRuntime:3 268 | 269 | ## sa-east-1 270 | - 1.36.2-x86 arn:aws:lambda:sa-east-1:455488262213:layer:DenoRuntime:15 271 | - 1.35.0-x86 arn:aws:lambda:sa-east-1:455488262213:layer:DenoRuntime:14 272 | - 1.30.0-x86 arn:aws:lambda:sa-east-1:455488262213:layer:DenoRuntime:13 273 | - 1.28.0-x86 arn:aws:lambda:sa-east-1:455488262213:layer:DenoRuntime:12 274 | - 1.24.3-x86 arn:aws:lambda:sa-east-1:455488262213:layer:DenoRuntime:11 275 | - 1.22.0-x86 arn:aws:lambda:sa-east-1:455488262213:layer:DenoRuntime:10 276 | - 1.21.0-x86 arn:aws:lambda:sa-east-1:455488262213:layer:DenoRuntime:9 277 | - 1.20.6-x86 arn:aws:lambda:sa-east-1:455488262213:layer:DenoRuntime:8 278 | - 1.20.3-x86 arn:aws:lambda:sa-east-1:455488262213:layer:DenoRuntime:7 279 | - 1.20.2-x86 arn:aws:lambda:sa-east-1:455488262213:layer:DenoRuntime:6 280 | - 1.19.3-x86 arn:aws:lambda:sa-east-1:455488262213:layer:DenoRuntime:5 281 | - 1.19.2-x86 arn:aws:lambda:sa-east-1:455488262213:layer:DenoRuntime:4 282 | - 1.19.1-x86 arn:aws:lambda:sa-east-1:455488262213:layer:DenoRuntime:3 283 | 284 | -------------------------------------------------------------------------------- /scripts/publish-layers.js: -------------------------------------------------------------------------------- 1 | let aws = require('aws-sdk') 2 | let fs = require('fs') 3 | let path = require('path') 4 | let regions = require('./supported-regions') 5 | let pathToFile = path.join(__dirname, '..', `deno-${process.env.version}-x86.zip`) 6 | let layer = fs.readFileSync(pathToFile) 7 | 8 | ;(async function () { 9 | for (let region of regions) { 10 | let result = await publish(region) 11 | console.log(result) 12 | } 13 | })(); 14 | 15 | /** helper to publish layer code and blow open the permissions so anyone can use it */ 16 | async function publish (region) { 17 | console.log('publish to layer to', region) 18 | try { 19 | let lambda = new aws.Lambda({ region }) 20 | 21 | // publish the zip 22 | let { Version } = await lambda.publishLayerVersion({ 23 | LayerName: `DenoRuntime`, 24 | Description: `${ process.env.version }-x86`, 25 | Content: { ZipFile: layer }, 26 | LicenseInfo: 'Apache-2.0' 27 | // CompatibleArchitectures: ['x86_64'], this is not yet supported in all regions! 28 | }).promise() 29 | 30 | return lambda.addLayerVersionPermission({ 31 | Action: 'lambda:GetLayerVersion', 32 | LayerName: `DenoRuntime`, 33 | Principal: '*', 34 | StatementId: `allow-${ Date.now() }`, 35 | VersionNumber: Version, 36 | }).promise() 37 | } 38 | catch (e) { 39 | return e 40 | } 41 | } 42 | -------------------------------------------------------------------------------- /scripts/supported-regions.js: -------------------------------------------------------------------------------- 1 | module.exports = [ 2 | 'us-east-1', 3 | 'us-east-2', 4 | 'us-west-1', 5 | 'us-west-2', 6 | 'ca-central-1', 7 | 'ap-south-1', 8 | 'ap-northeast-3', 9 | 'ap-northeast-2', 10 | 'ap-southeast-1', 11 | 'ap-southeast-2', 12 | 'ap-northeast-1', 13 | 'eu-central-1', 14 | 'eu-west-1', 15 | 'eu-west-2', 16 | 'eu-north-1', 17 | 'eu-west-3', 18 | 'sa-east-1', 19 | ] 20 | -------------------------------------------------------------------------------- /scripts/update-readme.js: -------------------------------------------------------------------------------- 1 | let aws = require('aws-sdk') 2 | let semver = require('semver') 3 | let tiny = require('tiny-json-http') 4 | let regions = require('./supported-regions') 5 | 6 | // run if directly invoked 7 | if (require.main === module) { 8 | ;(async function() { 9 | let md = '# DenoRuntime Lambda Layer\n\n' 10 | md += `> this readme was generated by scripts/update-readme.js\n\n` 11 | for (let region of regions) { 12 | let values = await getAllVersions(region) 13 | if (values.length) { 14 | md += `## ${ region }\n` 15 | for (let layer of values) { 16 | md += `- ${layer.version} ` 17 | md += `${layer.arn}\n` 18 | } 19 | md += `\n` 20 | } 21 | } 22 | await write(md) 23 | })(); 24 | } 25 | 26 | // export helpers for testing 27 | module.exports = { 28 | dedupe, write, getAllVersions 29 | } 30 | 31 | /** get all the DenoRuntime layer versions for given region */ 32 | async function getAllVersions(region) { 33 | let results = [] 34 | let lambda = new aws.Lambda({ region }) 35 | let params = {LayerName: 'DenoRuntime'} 36 | async function getPage(params) { 37 | // get the raw versions result 38 | let result = await lambda.listLayerVersions(params).promise() 39 | // helper to format to {arn, version} 40 | let fmt = v=> ({arn: v.LayerVersionArn, version: v.Description}) 41 | // helper to filter to good versions 42 | let ok = v=> semver.valid(v.version) 43 | // map/filter results 44 | results = results.concat(result.LayerVersions.map(fmt).filter(ok)) 45 | if (result.NextMarker) { 46 | params.Marker = result.NextMarker 47 | await getPage(params) 48 | } 49 | } 50 | // kick off read 51 | await getPage(params) 52 | // clean up duplicates in results 53 | return dedupe(results) 54 | } 55 | 56 | /** helper to write the readme using the github api */ 57 | async function write(md) { 58 | 59 | let headers = { 60 | authorization: `token ${ process.env.GITHUB_TOKEN }`, 61 | accept: 'application/vnd.github.v3+json' 62 | } 63 | 64 | // get the sha of the readme 65 | let { body } = await tiny.get({ 66 | url: `https://api.github.com/repos/beginner-corp/begin-deno-runtime/readme`, 67 | headers, 68 | }) 69 | 70 | // write the readme 71 | return tiny.put({ 72 | url: `https://api.github.com/repos/beginner-corp/begin-deno-runtime/contents/readme.md`, 73 | headers, 74 | data: { 75 | sha: body.sha, 76 | message: `update readme`, 77 | content: Buffer.from(md).toString('base64') 78 | } 79 | }) 80 | } 81 | 82 | /** helper to dedupe results */ 83 | function dedupe(values) { 84 | let obj = values.slice(0).reduce(function fold (a, v) { 85 | let region = v.arn.split(':')[3] 86 | let denoVersion = v.version 87 | let layerVersion = v.arn.split(':').pop() 88 | if (!a[denoVersion]) 89 | a[denoVersion] = v.arn 90 | return a 91 | }, {}) 92 | let result = [] 93 | for (let version of Object.keys(obj)) 94 | result.push({ arn: obj[version], version: version }) 95 | return result 96 | } 97 | -------------------------------------------------------------------------------- /src/bootstrap: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | set -euo pipefail 3 | DENO_DIR=/tmp/deno_dir deno run -A --unstable /opt/runtime.ts 4 | -------------------------------------------------------------------------------- /src/runtime.ts: -------------------------------------------------------------------------------- 1 | // coldstart here 2 | let env = Deno.env.toObject(); 3 | let api = env.AWS_LAMBDA_RUNTIME_API; 4 | let name = env._HANDLER.split(".")[0]; 5 | let method = env._HANDLER.split(".")[1]; 6 | let invoke = `http://${api}/2018-06-01/runtime/invocation`; 7 | let error = `http://${api}/2018-06-01/runtime/init/error`; 8 | 9 | // look for index.{js,ts,tsx} and fallback to mod.{js,ts,tsx} 10 | let paths = [ 11 | `${env.LAMBDA_TASK_ROOT}/index.js`, 12 | `${env.LAMBDA_TASK_ROOT}/mod.js`, 13 | `${env.LAMBDA_TASK_ROOT}/index.ts`, 14 | `${env.LAMBDA_TASK_ROOT}/mod.ts`, 15 | `${env.LAMBDA_TASK_ROOT}/index.tsx`, 16 | `${env.LAMBDA_TASK_ROOT}/mod.tsx`, 17 | ]; 18 | 19 | // get the handler entry file 20 | let found = false; 21 | let handler; 22 | 23 | for (let path of paths) { 24 | found = await exists(path); 25 | if (found) { 26 | let mod = await import(path); 27 | handler = mod[method]; 28 | if (typeof handler != "function") { 29 | found = false; 30 | } else { 31 | break; 32 | } 33 | } 34 | } 35 | 36 | // if entry file is missing or invalid bail hard with a meaningful error 37 | if (found === false) { 38 | await post(error, { 39 | errorType: "HandlerNotFound", 40 | errorMessage: 41 | `expected one of mod.js, mod.ts, mod.tsx, index.js, index.ts, or index.tsx to export a function named "${method}"`, 42 | }); 43 | Deno.exit(1); 44 | } 45 | 46 | // all good! start the event loop 47 | while (true) { 48 | let { event, context } = await next(`${invoke}/next`); 49 | try { 50 | // invoke the handler 51 | const payload = await handler(event, context); 52 | await post(`${invoke}/${context.awsRequestId}/response`, payload); 53 | } catch (err) { 54 | // ensure errors bubble 55 | await post(`${invoke}/${context.awsRequestId}/error`, { 56 | errorType: err.name, 57 | errorMessage: err.message, 58 | stackTrace: err.stack, 59 | }); 60 | } 61 | } 62 | 63 | /** helper to get next invocation */ 64 | async function next(url: string) { 65 | let env = Deno.env.toObject(); 66 | let req = await fetch(url); 67 | let reqID = req.headers.get("Lambda-Runtime-Aws-Request-Id"); 68 | let arn = req.headers.get("lambda-runtime-invoked-function-arn"); 69 | let event = await req.json(); 70 | let context = { 71 | awsRequestId: reqID, 72 | invokedFunctionArn: arn, 73 | logGroupName: env.AWS_LAMBDA_LOG_GROUP_NAME, 74 | logStreamName: env.AWS_LAMBDA_LOG_STREAM_NAME, 75 | functionName: env.AWS_LAMBDA_FUNCTION_NAME, 76 | functionVersion: env.AWS_LAMBDA_FUNCTION_VERSION, 77 | memoryLimitInMB: env.AWS_LAMBDA_FUNCTION_MEMORY_SIZE, 78 | }; 79 | return { event, context }; 80 | } 81 | 82 | /** helper to post message to lambda */ 83 | async function post(url: string, payload: object) { 84 | let result = await fetch(url, { 85 | method: "POST", 86 | body: JSON.stringify(payload), 87 | }); 88 | await result.blob(); 89 | } 90 | 91 | /** helper to check for the entry file */ 92 | async function exists(filename: string): Promise { 93 | try { 94 | await Deno.stat(filename); 95 | return true; 96 | } catch (error) { 97 | if (error instanceof Deno.errors.NotFound) { 98 | return false; 99 | } else { 100 | throw error; 101 | } 102 | } 103 | } 104 | -------------------------------------------------------------------------------- /test/dedupe-test.js: -------------------------------------------------------------------------------- 1 | let test = require('tape') 2 | let { dedupe } = require('../scripts/update-readme') 3 | 4 | test('dedupes', t=> { 5 | t.plan(1) 6 | let raw = [ 7 | {version: '1.19.1-x86', arn: 'arn:aws:lambda:us-east-1:555:layer:DenoRuntime:29'}, 8 | {version: '1.19.1-x86', arn: 'arn:aws:lambda:us-east-1:555:layer:DenoRuntime:27'}, 9 | {version: '1.19.1-x86', arn: 'arn:aws:lambda:us-east-1:555:layer:DenoRuntime:26'}, 10 | {version: '1.0.0-x86', arn: 'arn:aws:lambda:us-east-1:555:layer:DenoRuntime:0'}, 11 | ] 12 | let desired = [ 13 | {version: '1.19.1-x86', arn: 'arn:aws:lambda:us-east-1:555:layer:DenoRuntime:29'}, 14 | {version: '1.0.0-x86', arn: 'arn:aws:lambda:us-east-1:555:layer:DenoRuntime:0'} 15 | ] 16 | let result = dedupe(raw) 17 | t.deepEqual(result, desired) 18 | }) 19 | --------------------------------------------------------------------------------