@@ -113,7 +113,8 @@ jobs:
113113
114114 - name : Build local adapter image
115115 run : |
116- printf 'FROM scratch\nCOPY lambda-adapter /lambda-adapter\n' | \
116+ chmod +x /tmp/layer-x86_64/lambda-adapter
117+ printf 'FROM scratch\nCOPY --chmod=755 lambda-adapter /lambda-adapter\n' | \
117118 docker build -t public.ecr.aws/awsguru/aws-lambda-adapter:1.0.0-rc1 -f- /tmp/layer-x86_64
118119
119120 - name : Build
@@ -188,27 +189,53 @@ jobs:
188189 use-installer : true
189190 token : ${{ secrets.GITHUB_TOKEN }}
190191
192+ - uses : denoland/setup-deno@v2
193+ if : matrix.example == 'deno-zip'
194+ with :
195+ deno-version : v2.x
196+
191197 - uses : actions/download-artifact@v4
192198 with :
193199 name : layer-x86_64
194200 path : /tmp/layer-x86_64
195201
196- - name : Prepare local layer
202+ - name : Build
203+ working-directory : examples/${{ matrix.example }}
204+ run : sam build
205+
206+ - name : Inject local layer into build output
207+ working-directory : examples/${{ matrix.example }}
197208 run : |
198- LAYER_DIR="/tmp/local-layers/LambdaAdapterLayerX86"
209+ # Prepare local layer directory with correct structure
210+ LAYER_DIR=".aws-sam/build/LocalAdapterLayer"
199211 mkdir -p "$LAYER_DIR/extensions"
200212 cp /tmp/layer-x86_64/bootstrap "$LAYER_DIR/"
201213 cp /tmp/layer-x86_64/lambda-adapter "$LAYER_DIR/extensions/"
202- chmod +x "$LAYER_DIR/extensions/lambda-adapter" "$LAYER_DIR/bootstrap"
203-
204- - name : Patch template to use local layer
205- working-directory : examples/${{ matrix.example }}
206- run : |
207- sed -i 's|!Sub arn:aws:lambda:${AWS::Region}:753240598075:layer:LambdaAdapterLayerX86:[0-9]*|/tmp/local-layers/LambdaAdapterLayerX86|' template.yaml
208-
209- - name : Build
210- working-directory : examples/${{ matrix.example }}
211- run : sam build
214+ chmod +x "$LAYER_DIR/bootstrap" "$LAYER_DIR/extensions/lambda-adapter"
215+ # Add local layer resource and replace remote layer ARN refs
216+ python3 -c "
217+ import yaml
218+ with open('.aws-sam/build/template.yaml') as f :
219+ t = yaml.safe_load(f)
220+ t['Resources']['LocalAdapterLayer'] = {
221+ ' Type ' : ' AWS::Lambda::LayerVersion' ,
222+ ' Properties ' : {
223+ ' Content ' : ' LocalAdapterLayer' ,
224+ ' LayerName ' : ' local-adapter'
225+ }
226+ }
227+ for r in t.get('Resources', {}).values() :
228+ layers = r.get('Properties', {}).get('Layers', [])
229+ for i, l in enumerate(layers) :
230+ if isinstance(l, dict) :
231+ v = l.get('Fn::Sub', '')
232+ else :
233+ v = l
234+ if 'LambdaAdapterLayerX86' in str(v) :
235+ layers[i] = {'Ref' : ' LocalAdapterLayer' }
236+ with open('.aws-sam/build/template.yaml', 'w') as f :
237+ yaml.dump(t, f)
238+ "
212239
213240 - name: Start local API and verify
214241 working-directory: examples/${{ matrix.example }}
0 commit comments