From 363b0ef69c3a0ec73413277721d173bfe3bf36fe Mon Sep 17 00:00:00 2001 From: Alexander Zaitsev Date: Wed, 18 Aug 2021 06:52:00 +0300 Subject: [PATCH 001/111] feat: initial changes after the fork - update README with proper links - refactor a little bit ignore files - update changelog (add missing newer Rust versions) - update Makefile defaults - add me to the license file Tested: - Local tests --- .dockerignore | 2 +- .github/workflows/main.yml | 2 +- CHANGELOG.md | 4 ++++ Dockerfile | 4 ++-- LICENSE | 2 +- Makefile | 19 ++++++++++--------- README.md | 14 +++++++------- 7 files changed, 26 insertions(+), 21 deletions(-) diff --git a/.dockerignore b/.dockerignore index 1d3ec08..10ac9a8 100644 --- a/.dockerignore +++ b/.dockerignore @@ -1,2 +1,2 @@ tests -.git \ No newline at end of file +.git diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 958edc1..3873015 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -42,4 +42,4 @@ jobs: shell: bash run: | echo "${{ secrets.DOCKER_PASSWORD }}" | docker login -u "${{ secrets.DOCKER_USERNAME }}" --password-stdin - make publish \ No newline at end of file + make publish diff --git a/CHANGELOG.md b/CHANGELOG.md index 50e1327..88f9e78 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,7 @@ +# 0.4.0-rust-1.54.0 + +* Upgrade to Rust [`1.54.0`](https://blog.rust-lang.org/2021/07/29/Rust-1.54.0.html) + # 0.4.0-rust-1.45.2 * **Breaking change** in avoid mixed user permissions when volume mounting cargo cache directories. This docker images now configures a cargo installation to `/cargo` directory rather than `/home/root/.cargo`. You'll also want to ensure diff --git a/Dockerfile b/Dockerfile index e5ba94a..1ba03c6 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,7 +1,7 @@ # https://github.com/lambci/docker-lambda#documentation -FROM lambci/lambda:build-provided.al2 +FROM docker.io/lambci/lambda:build-provided.al2 -ARG RUST_VERSION=1.51.0 +ARG RUST_VERSION=1.54.0 RUN yum install -y jq openssl-devel RUN curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs \ | CARGO_HOME=/cargo RUSTUP_HOME=/rustup sh -s -- -y --profile minimal --default-toolchain $RUST_VERSION diff --git a/LICENSE b/LICENSE index a28713d..4c8837e 100644 --- a/LICENSE +++ b/LICENSE @@ -1,4 +1,4 @@ -Copyright (c) 2020 Doug Tangren +Copyright (c) 2020 Doug Tangren, 2021 Alexander Zaitsev Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the diff --git a/Makefile b/Makefile index 483adf9..721da5e 100644 --- a/Makefile +++ b/Makefile @@ -1,23 +1,24 @@ +DOCKER ?= docker VERSION ?= 0.4.0 -RUST_VERSION ?= 1.51.0 -REPO ?= softprops/lambda-rust +RUST_VERSION ?= 1.54.0 +REPO ?= rustserverless/lambda-rust TAG ?= "$(REPO):$(VERSION)-rust-$(RUST_VERSION)" publish: build - @docker push $(TAG) - @docker push $(REPO):latest + $(DOCKER) push $(TAG) + $(DOCKER) push $(REPO):latest build: - @docker build --build-arg RUST_VERSION=$(RUST_VERSION) -t $(TAG) . - @docker tag $(TAG) $(REPO):latest + $(DOCKER) build --build-arg RUST_VERSION=$(RUST_VERSION) -t $(TAG) . + $(DOCKER) tag $(TAG) $(REPO):latest -test: build +test: @tests/test.sh debug: build - @docker run --rm -it \ + $(DOCKER) run --rm -it \ -u $(id -u):$(id -g) \ - -v ${PWD}:/code \ + -v ${PWD}:/code:Z \ -v ${HOME}/.cargo/registry:/cargo/registry \ -v ${HOME}/.cargo/git:/cargo/git \ --entrypoint=/bin/bash \ diff --git a/README.md b/README.md index bbf8016..76a5323 100644 --- a/README.md +++ b/README.md @@ -15,9 +15,9 @@ where `{rust-stable-version}` is a stable version of rust. You can find a list of available docker tags [here](https://hub.docker.com/r/softprops/lambda-rust/tags) -> 💡 If you don't find the version you're looking for, please [open a new github issue](https://github.com/softprops/lambda-rust/issues/new?title=I%27m%20looking%20for%20version%20xxx) to publish one +> 💡 If you don't find the version you're looking for, please [open a new github issue](https://github.com/rust-serverless/lambda-rust/issues/new?title=I%27m%20looking%20for%20version%20xxx) to publish one -You can also depend directly on `softprops/lambda-rust:latest` for the most recently published version. +You can also depend directly on `rustserverless/lambda-rust:latest` for the most recently published version. ## 🤸 usage @@ -45,7 +45,7 @@ $ docker run --rm \ -v ${PWD}:/code \ -v ${HOME}/.cargo/registry:/cargo/registry \ -v ${HOME}/.cargo/git:/cargo/git \ - softprops/lambda-rust + rustserverless/lambda-rust ``` > 💡 The -v (volume mount) flags for `/cargo/{registry,git}` are optional but when supplied, provides a much faster turn around when doing iterative development @@ -68,7 +68,7 @@ $ docker run --rm \ -v ${PWD}:/code \ -v ${HOME}/.cargo/registry:/cargo/registry \ -v ${HOME}/.cargo/git:/cargo/git \ - softprops/lambda-rust + rustserverless/lambda-rust ``` For more custom codebases, the '-w' argument can be used to override the working directory. @@ -82,7 +82,7 @@ $ docker run --rm \ -v ${HOME}/.cargo/registry:/cargo/registry \ -v ${HOME}/.cargo/git:/cargo/git \ -w /code/lambdas/mylambda \ - softprops/lambda-rust + rustserverless/lambda-rust ``` ## ⚓ using hooks @@ -120,7 +120,7 @@ docker run \ -v ${PWD}:/code \ -v ${HOME}/.cargo/registry:/cargo/registry \ -v ${HOME}/.cargo/git:/cargo/git \ - softprops/lambda-rust + rustserverless/lambda-rust # start a one-off docker container replicating the "provided.al2" lambda runtime # awaiting an event to be provided via stdin @@ -197,4 +197,4 @@ $ cargo aws-lambda --help More instructions can be found [here](https://github.com/vvilhonen/cargo-aws-lambda). -Doug Tangren (softprops) 2020 +Doug Tangren (softprops) 2020, Alexander Zaitsev (zamazan4ik) 2021 From 3a81d04e7ad4ef67a4108aa4c4293e44bef31ccc Mon Sep 17 00:00:00 2001 From: Alexander Zaitsev Date: Wed, 18 Aug 2021 18:44:03 +0300 Subject: [PATCH 002/111] doc: update README - fix wrong links to old softprops repos --- README.md | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index 76a5323..9d8a02c 100644 --- a/README.md +++ b/README.md @@ -1,4 +1,4 @@ -# AWS Lambda [Rust](https://www.rust-lang.org/) docker builder 🐑 🦀 🐳 [![Build Status](https://github.com/softprops/lambda-rust/workflows/Main/badge.svg)](https://github.com/softprops/lambda-rust/actions) +# AWS Lambda [Rust](https://www.rust-lang.org/) docker builder 🐑 🦀 🐳 [![Build Status](https://github.com/rust-serverless/lambda-rust/workflows/Main/badge.svg)](https://github.com/rust-serverless/lambda-rust/actions) ## 🤔 about @@ -10,10 +10,10 @@ This provides a build environment, consistent with your target execution environ ## 📦 install -Tags for this docker image follow the naming convention `softprops/lambda-rust:{version}-rust-{rust-stable-version}` +Tags for this docker image follow the naming convention `rustserverless/lambda-rust:{version}-rust-{rust-stable-version}` where `{rust-stable-version}` is a stable version of rust. -You can find a list of available docker tags [here](https://hub.docker.com/r/softprops/lambda-rust/tags) +You can find a list of available docker tags [here](https://hub.docker.com/r/rustserverless/lambda-rust/tags) > 💡 If you don't find the version you're looking for, please [open a new github issue](https://github.com/rust-serverless/lambda-rust/issues/new?title=I%27m%20looking%20for%20version%20xxx) to publish one @@ -197,4 +197,5 @@ $ cargo aws-lambda --help More instructions can be found [here](https://github.com/vvilhonen/cargo-aws-lambda). -Doug Tangren (softprops) 2020, Alexander Zaitsev (zamazan4ik) 2021 +Doug Tangren ([softprops](https://github.com/softprops)) 2020, Alexander Zaitsev ([zamazan4ik](https://github.com/zamazan4ik)) 2021 + From 979a9837a6c20cbeb8ccf4416f521d74e190c049 Mon Sep 17 00:00:00 2001 From: Michael Torres Date: Sun, 22 Aug 2021 11:36:44 -0700 Subject: [PATCH 003/111] Fix test image reference --- tests/test.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/test.sh b/tests/test.sh index 51c9f6f..b200bff 100755 --- a/tests/test.sh +++ b/tests/test.sh @@ -4,7 +4,7 @@ HERE="$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null 2>&1 && pwd )" # Root directory of the repository DIST=$(cd "$HERE"/..; pwd) -IMAGE=${1:-softprops/lambda-rust} +IMAGE=${1:-rustserverless/lambda-rust} source "${HERE}"/bashtest.sh From e7e54b80e17786bf1d265ce58f2bba3d154ceca3 Mon Sep 17 00:00:00 2001 From: Michael Torres Date: Sun, 22 Aug 2021 12:13:57 -0700 Subject: [PATCH 004/111] Rework GH actions to CD latest, tag on release --- .github/workflows/main.yml | 20 +------------------- .github/workflows/release.yml | 33 +++++++++++++++++++++++++++++++++ .github/workflows/untrusted.yml | 14 ++++++++++++++ Makefile | 10 +++++----- 4 files changed, 53 insertions(+), 24 deletions(-) create mode 100644 .github/workflows/release.yml create mode 100644 .github/workflows/untrusted.yml diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 3873015..4597602 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -4,11 +4,6 @@ on: push: branches: - master - tags: - - 'v**' - pull_request: - branches: - - master jobs: test: @@ -17,18 +12,6 @@ jobs: - uses: actions/checkout@v1 - name: Test run: make test - publish-docs: - needs: [test] - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v1 - - name: Update Docker hub metadata - uses: docker://mpepping/docker-hub-metadata-github-action - env: - IMAGE: ${{ github.repository }} - DOCKER_USERNAME: ${{ secrets.DOCKER_USERNAME }} - DOCKER_PASSWORD: ${{ secrets.DOCKER_PASSWORD }} - continue-on-error: true publish: needs: [test] runs-on: ubuntu-latest @@ -37,8 +20,7 @@ jobs: - name: Build shell: bash run: make build - - name: Publish - if: startsWith(github.ref, 'refs/tags/') + - name: Publish Latest shell: bash run: | echo "${{ secrets.DOCKER_PASSWORD }}" | docker login -u "${{ secrets.DOCKER_USERNAME }}" --password-stdin diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml new file mode 100644 index 0000000..ef4fa4b --- /dev/null +++ b/.github/workflows/release.yml @@ -0,0 +1,33 @@ +name: Release publishing + +on: + release: + types: + - published + +jobs: + publish-docs: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v1 + - name: Update Docker hub metadata + uses: docker://mpepping/docker-hub-metadata-github-action + env: + IMAGE: rustserverless/lambda-rust + DOCKER_USERNAME: ${{ secrets.DOCKER_USERNAME }} + DOCKER_PASSWORD: ${{ secrets.DOCKER_PASSWORD }} + continue-on-error: true + publish: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v1 + - name: Build + shell: bash + run: make build + - name: Publish + shell: bash + with: + release_tag: ${{ github.event.release.tag_name }} + run: | + echo "${{ secrets.DOCKER_PASSWORD }}" | docker login -u "${{ secrets.DOCKER_USERNAME }}" --password-stdin + make publish-tag diff --git a/.github/workflows/untrusted.yml b/.github/workflows/untrusted.yml new file mode 100644 index 0000000..b611376 --- /dev/null +++ b/.github/workflows/untrusted.yml @@ -0,0 +1,14 @@ +name: Untrusted workflows (PRs) + +on: + pull_request: + branches: + - master + +jobs: + test: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v1 + - name: Test + run: make test \ No newline at end of file diff --git a/Makefile b/Makefile index 721da5e..5181911 100644 --- a/Makefile +++ b/Makefile @@ -1,16 +1,16 @@ DOCKER ?= docker -VERSION ?= 0.4.0 RUST_VERSION ?= 1.54.0 REPO ?= rustserverless/lambda-rust -TAG ?= "$(REPO):$(VERSION)-rust-$(RUST_VERSION)" publish: build - $(DOCKER) push $(TAG) $(DOCKER) push $(REPO):latest +publish-tag: build publish + $(DOCKER) tag $(REPO):latest "$(REPO):$(INPUT_RELEASE_VERSION)-rust-$(RUST_VERSION)" + $(DOCKER) push "$(REPO):$(INPUT_RELEASE_VERSION)-rust-$(RUST_VERSION)" + build: - $(DOCKER) build --build-arg RUST_VERSION=$(RUST_VERSION) -t $(TAG) . - $(DOCKER) tag $(TAG) $(REPO):latest + $(DOCKER) build --build-arg RUST_VERSION=$(RUST_VERSION) -t $(REPO):latest . test: @tests/test.sh From 4aef9db4358771de1e25feaac732de5c62042ad4 Mon Sep 17 00:00:00 2001 From: Jeremiah Russell Date: Thu, 9 Sep 2021 17:25:26 +0100 Subject: [PATCH 005/111] Makefile updated to use Rust 1.55.0 as the default version --- Makefile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Makefile b/Makefile index 5181911..1a6585c 100644 --- a/Makefile +++ b/Makefile @@ -1,5 +1,5 @@ DOCKER ?= docker -RUST_VERSION ?= 1.54.0 +RUST_VERSION ?= 1.55.0 REPO ?= rustserverless/lambda-rust publish: build From 049a8b755edb45d4dc47ceb0e127942dd33d9bdf Mon Sep 17 00:00:00 2001 From: Jeremiah Russell Date: Fri, 10 Sep 2021 09:49:14 +0100 Subject: [PATCH 006/111] Update change log for Rust version 1.55.0 --- CHANGELOG.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 88f9e78..5c7e724 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,7 @@ +# 0.4.0-rust-1.55.0 + +* Upgrade to Rust [`1.55.0`](https://blog.rust-lang.org/2021/09/09/Rust-1.55.0.html) + # 0.4.0-rust-1.54.0 * Upgrade to Rust [`1.54.0`](https://blog.rust-lang.org/2021/07/29/Rust-1.54.0.html) From 2cf247b04008dbdfe4496c7d7f61ab370ea2078a Mon Sep 17 00:00:00 2001 From: Alexander Zaitsev Date: Fri, 10 Sep 2021 15:17:14 +0300 Subject: [PATCH 007/111] fix: fix publishing releases - add new parameter to Makefile - delete wrong 'with' clause from Github Actions file Tested: - No --- .github/workflows/release.yml | 2 -- Makefile | 1 + 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index ef4fa4b..fbe6d4c 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -26,8 +26,6 @@ jobs: run: make build - name: Publish shell: bash - with: - release_tag: ${{ github.event.release.tag_name }} run: | echo "${{ secrets.DOCKER_PASSWORD }}" | docker login -u "${{ secrets.DOCKER_USERNAME }}" --password-stdin make publish-tag diff --git a/Makefile b/Makefile index 1a6585c..6388a68 100644 --- a/Makefile +++ b/Makefile @@ -1,4 +1,5 @@ DOCKER ?= docker +INPUT_RELEASE_VERSION ?= 0.4.0 RUST_VERSION ?= 1.55.0 REPO ?= rustserverless/lambda-rust From b31e262b84c895551d103b907a10d625dd6d5514 Mon Sep 17 00:00:00 2001 From: Jeremiah Russell Date: Mon, 13 Sep 2021 07:14:54 +0100 Subject: [PATCH 008/111] Add .vscode to ignored files --- .gitignore | 1 + 1 file changed, 1 insertion(+) diff --git a/.gitignore b/.gitignore index 0c5b82d..08851c5 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,4 @@ tests/test-*/test-out.log target .DS_Store +.vscode \ No newline at end of file From 7f0e12e34685a06a2ec71d75a760e81c48769d99 Mon Sep 17 00:00:00 2001 From: Jeremiah Russell Date: Mon, 13 Sep 2021 07:22:59 +0100 Subject: [PATCH 009/111] Script to check cersion Problem Rust releases a new version approximatly every six weeks. We need to detect a new release Solution * install the current stable toolchain * extract the version of the stable toolchain from rustup check * extract the version of the installed toolchain from rustup default * compare and return an error if they do not match Note Docker containers are built with a specific version (not stable). --- latest.sh | 15 +++++++++++++++ 1 file changed, 15 insertions(+) create mode 100755 latest.sh diff --git a/latest.sh b/latest.sh new file mode 100755 index 0000000..cf60355 --- /dev/null +++ b/latest.sh @@ -0,0 +1,15 @@ +#!/bin/bash -eux + +export CARGO_HOME="/cargo" +export RUSTUP_HOME="/rustup" + +# shellcheck disable=SC1091 +source /cargo/env + +rustup toolchain install stable --profile=minimal +STABLE=$(rustup check | grep stable | grep -E "[0-9]+\.[0-9]+\.[0-9]+" -o) +DEFAULT=$(rustup show | grep -m 1 default | grep -E "[0-9]+\.[0-9]+\.[0-9]+" -o) + +if [ "${STABLE}" == "${DEFAULT}" ]; then exit 0 + else exit 1 +fi \ No newline at end of file From 18f24aced8c70c0b64a4440e3e17e305a28b813c Mon Sep 17 00:00:00 2001 From: Jeremiah Russell Date: Mon, 13 Sep 2021 07:25:01 +0100 Subject: [PATCH 010/111] Check the latest R build Problem Script to check must be installed in the build Solution * Add the latest.sh script to container Note --- Dockerfile | 1 + 1 file changed, 1 insertion(+) diff --git a/Dockerfile b/Dockerfile index 1ba03c6..e4df896 100644 --- a/Dockerfile +++ b/Dockerfile @@ -6,6 +6,7 @@ RUN yum install -y jq openssl-devel RUN curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs \ | CARGO_HOME=/cargo RUSTUP_HOME=/rustup sh -s -- -y --profile minimal --default-toolchain $RUST_VERSION ADD build.sh /usr/local/bin/ +ADD latest.sh /usr/local/bin/ VOLUME ["/code"] WORKDIR /code ENTRYPOINT ["/usr/local/bin/build.sh"] From 2c5cec83e152dcc47c2e2a51c2fc34a1e9ff1a9e Mon Sep 17 00:00:00 2001 From: Jeremiah Russell Date: Mon, 13 Sep 2021 07:29:53 +0100 Subject: [PATCH 011/111] Check the Rust version Problem Exceute the latest.sh script Solution * make command to run the latest.sh script entrypoint Note --- Makefile | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/Makefile b/Makefile index 6388a68..b762d3e 100644 --- a/Makefile +++ b/Makefile @@ -24,3 +24,8 @@ debug: build -v ${HOME}/.cargo/git:/cargo/git \ --entrypoint=/bin/bash \ $(REPO) + +check: + $(DOCKER) run --rm \ + --entrypoint=/usr/local/bin/latest.sh \ + $(REPO) From b45f57154e30800f8c2903143a9505b414819be8 Mon Sep 17 00:00:00 2001 From: Jeremiah Russell Date: Mon, 13 Sep 2021 07:35:39 +0100 Subject: [PATCH 012/111] Schedule Github Actions Version Check Problem Version check should be executed routinely Solution * Use scheduled github action to run check * Load unix and checkout source * Make check to run script Note * docker on host will download latest conainer --- .github/workflows/check.yml | 13 +++++++++++++ 1 file changed, 13 insertions(+) create mode 100644 .github/workflows/check.yml diff --git a/.github/workflows/check.yml b/.github/workflows/check.yml new file mode 100644 index 0000000..d5a0b16 --- /dev/null +++ b/.github/workflows/check.yml @@ -0,0 +1,13 @@ +name: Main + +on: + schedule: + - cron "0 4 * * 3" + +jobs: + check: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v1 + - name: Check Rust Version + run: make check From 1cb9025b38d820ec8a2c27c1397bb94d2ebea9be Mon Sep 17 00:00:00 2001 From: Jeremiah Russell Date: Mon, 13 Sep 2021 08:59:43 +0100 Subject: [PATCH 013/111] FIX: On speficication --- .github/workflows/check.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/check.yml b/.github/workflows/check.yml index d5a0b16..7eccda3 100644 --- a/.github/workflows/check.yml +++ b/.github/workflows/check.yml @@ -1,8 +1,8 @@ -name: Main +name: Check on: schedule: - - cron "0 4 * * 3" + - cron "0 4 * * 3" jobs: check: From 54b76fb6d95e1f655e004b441be416708d846872 Mon Sep 17 00:00:00 2001 From: Jeremiah Russell <47631109+jerusdp@users.noreply.github.com> Date: Mon, 13 Sep 2021 09:10:44 +0100 Subject: [PATCH 014/111] Update check.yml FIX: missing colon on cron --- .github/workflows/check.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/check.yml b/.github/workflows/check.yml index 7eccda3..cebb61b 100644 --- a/.github/workflows/check.yml +++ b/.github/workflows/check.yml @@ -2,7 +2,7 @@ name: Check on: schedule: - - cron "0 4 * * 3" + - cron: '0 4 * * 3' jobs: check: From b511fbd6b8c195ff177c554997ed4b7ca426d6b3 Mon Sep 17 00:00:00 2001 From: Jeremiah Russell Date: Mon, 13 Sep 2021 09:40:41 +0100 Subject: [PATCH 015/111] Test using my docker --- Makefile | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Makefile b/Makefile index b762d3e..b73c750 100644 --- a/Makefile +++ b/Makefile @@ -1,7 +1,7 @@ DOCKER ?= docker INPUT_RELEASE_VERSION ?= 0.4.0 -RUST_VERSION ?= 1.55.0 -REPO ?= rustserverless/lambda-rust +RUST_VERSION ?= 1.54.0 +REPO ?= jerusdp/lambda-rust publish: build $(DOCKER) push $(REPO):latest From a8a2778282c34097332f45630df2693327682d8a Mon Sep 17 00:00:00 2001 From: Jeremiah Russell Date: Mon, 13 Sep 2021 09:44:49 +0100 Subject: [PATCH 016/111] Scheduled test for top of next hour --- .github/workflows/check.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/check.yml b/.github/workflows/check.yml index cebb61b..93f56f3 100644 --- a/.github/workflows/check.yml +++ b/.github/workflows/check.yml @@ -2,7 +2,7 @@ name: Check on: schedule: - - cron: '0 4 * * 3' + - cron: '0 10 * * 2' jobs: check: From 5788290e68969121e63fd058946e4cc140f6540f Mon Sep 17 00:00:00 2001 From: Jeremiah Russell Date: Mon, 13 Sep 2021 10:37:32 +0100 Subject: [PATCH 017/111] manual trigger option --- .github/workflows/check.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/check.yml b/.github/workflows/check.yml index 93f56f3..9434541 100644 --- a/.github/workflows/check.yml +++ b/.github/workflows/check.yml @@ -1,6 +1,7 @@ name: Check on: + workflow_dispatch schedule: - cron: '0 10 * * 2' From 7980f14fde5d9f1e463fd67921d054aedb746228 Mon Sep 17 00:00:00 2001 From: Jeremiah Russell <47631109+jerusdp@users.noreply.github.com> Date: Mon, 13 Sep 2021 10:48:39 +0100 Subject: [PATCH 018/111] Update check.yml FIX: yaml error --- .github/workflows/check.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/check.yml b/.github/workflows/check.yml index 9434541..eafdb3f 100644 --- a/.github/workflows/check.yml +++ b/.github/workflows/check.yml @@ -1,7 +1,7 @@ name: Check on: - workflow_dispatch + workflow_dispatch: schedule: - cron: '0 10 * * 2' From 031cf8d3cb1815b3565640c98becd06b72bd64d1 Mon Sep 17 00:00:00 2001 From: Jeremiah Russell Date: Mon, 13 Sep 2021 12:09:23 +0100 Subject: [PATCH 019/111] Create an issue --- .github/workflows/check.yml | 12 ++++++++++++ latest.sh | 7 +++++-- 2 files changed, 17 insertions(+), 2 deletions(-) diff --git a/.github/workflows/check.yml b/.github/workflows/check.yml index 9434541..c0997f0 100644 --- a/.github/workflows/check.yml +++ b/.github/workflows/check.yml @@ -12,3 +12,15 @@ jobs: - uses: actions/checkout@v1 - name: Check Rust Version run: make check + create_issue: + runs-on: ubuntu-latest + needs: check + if: needs.check.result == 'failure' + steps: + - uses: nashmaniac/create-issue-action@v1.1 + name: Create Issue Action + with: + title: Build Failed + token: ${{secrets.GITHUB_TOKEN}} + labels: rust-check-failed + body: Update to rust stable version ${{ check.output.stable }} diff --git a/latest.sh b/latest.sh index cf60355..5bf9601 100755 --- a/latest.sh +++ b/latest.sh @@ -9,7 +9,10 @@ source /cargo/env rustup toolchain install stable --profile=minimal STABLE=$(rustup check | grep stable | grep -E "[0-9]+\.[0-9]+\.[0-9]+" -o) DEFAULT=$(rustup show | grep -m 1 default | grep -E "[0-9]+\.[0-9]+\.[0-9]+" -o) +echo "::set-output name=stable_rust::$STABLE" -if [ "${STABLE}" == "${DEFAULT}" ]; then exit 0 - else exit 1 +if [ "${STABLE}" == "${DEFAULT}" ]; then + exit 0 +else + exit 1 fi \ No newline at end of file From 07d006bafdc2806ab7e7197b7f56332b9c290204 Mon Sep 17 00:00:00 2001 From: Jeremiah Russell <47631109+jerusdp@users.noreply.github.com> Date: Mon, 13 Sep 2021 12:21:32 +0100 Subject: [PATCH 020/111] Update check.yml --- .github/workflows/check.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/check.yml b/.github/workflows/check.yml index bd5ffc0..edaba32 100644 --- a/.github/workflows/check.yml +++ b/.github/workflows/check.yml @@ -23,4 +23,4 @@ jobs: title: Build Failed token: ${{secrets.GITHUB_TOKEN}} labels: rust-check-failed - body: Update to rust stable version ${{ check.output.stable }} + body: Update to rust stable version ${{ need.check.output.stable }} From b2b6e2402b0cadff3821593ff0aed48d51cd9c28 Mon Sep 17 00:00:00 2001 From: Jeremiah Russell <47631109+jerusdp@users.noreply.github.com> Date: Mon, 13 Sep 2021 12:25:45 +0100 Subject: [PATCH 021/111] Update check.yml --- .github/workflows/check.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/check.yml b/.github/workflows/check.yml index edaba32..82a5f4c 100644 --- a/.github/workflows/check.yml +++ b/.github/workflows/check.yml @@ -23,4 +23,4 @@ jobs: title: Build Failed token: ${{secrets.GITHUB_TOKEN}} labels: rust-check-failed - body: Update to rust stable version ${{ need.check.output.stable }} + body: Update to rust stable version need.check.output.stable From c29d947f367342a93903b24e7b61c9d426bef268 Mon Sep 17 00:00:00 2001 From: Jeremiah Russell <47631109+jerusdp@users.noreply.github.com> Date: Mon, 13 Sep 2021 12:39:32 +0100 Subject: [PATCH 022/111] Update check.yml --- .github/workflows/check.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/check.yml b/.github/workflows/check.yml index 82a5f4c..c9c1a56 100644 --- a/.github/workflows/check.yml +++ b/.github/workflows/check.yml @@ -15,7 +15,7 @@ jobs: create_issue: runs-on: ubuntu-latest needs: check - if: needs.check.result == 'failure' + if: always() && (needs.check.result == 'failure') steps: - uses: nashmaniac/create-issue-action@v1.1 name: Create Issue Action From 25f1118ff29e4ee94bc686154b74cdaf566d2103 Mon Sep 17 00:00:00 2001 From: Jeremiah Russell <47631109+jerusdp@users.noreply.github.com> Date: Mon, 13 Sep 2021 13:55:51 +0100 Subject: [PATCH 023/111] Update check.yml --- .github/workflows/check.yml | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/.github/workflows/check.yml b/.github/workflows/check.yml index c9c1a56..71d8c14 100644 --- a/.github/workflows/check.yml +++ b/.github/workflows/check.yml @@ -8,8 +8,11 @@ on: jobs: check: runs-on: ubuntu-latest + outputs: + stable_rust: ${{ steps.check-rust.outputs.stable }} steps: - uses: actions/checkout@v1 + - id: check-rust - name: Check Rust Version run: make check create_issue: @@ -23,4 +26,4 @@ jobs: title: Build Failed token: ${{secrets.GITHUB_TOKEN}} labels: rust-check-failed - body: Update to rust stable version need.check.output.stable + body: Update to rust stable version {{needs.check.output.stable_rust}} From 25009e17cb0ffbbf9762293bdf3ea5b1fdb124e0 Mon Sep 17 00:00:00 2001 From: Jeremiah Russell <47631109+jerusdp@users.noreply.github.com> Date: Mon, 13 Sep 2021 15:02:37 +0100 Subject: [PATCH 024/111] Update check.yml added checkout --- .github/workflows/check.yml | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/.github/workflows/check.yml b/.github/workflows/check.yml index 71d8c14..da9ba3e 100644 --- a/.github/workflows/check.yml +++ b/.github/workflows/check.yml @@ -9,10 +9,10 @@ jobs: check: runs-on: ubuntu-latest outputs: - stable_rust: ${{ steps.check-rust.outputs.stable }} + stable: ${{ steps.rust.outputs.stable }} steps: - uses: actions/checkout@v1 - - id: check-rust + - id: rust - name: Check Rust Version run: make check create_issue: @@ -20,10 +20,11 @@ jobs: needs: check if: always() && (needs.check.result == 'failure') steps: + - uses: actions/checkout@master - uses: nashmaniac/create-issue-action@v1.1 name: Create Issue Action with: title: Build Failed token: ${{secrets.GITHUB_TOKEN}} labels: rust-check-failed - body: Update to rust stable version {{needs.check.output.stable_rust}} + body: Update to rust stable version {{needs.check.output.stable}} From 28970f97ab6ec38e12c0353d5317022541ab72dc Mon Sep 17 00:00:00 2001 From: Jeremiah Russell <47631109+jerusdp@users.noreply.github.com> Date: Mon, 13 Sep 2021 15:05:13 +0100 Subject: [PATCH 025/111] Update check.yml checkout version2 --- .github/workflows/check.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/check.yml b/.github/workflows/check.yml index da9ba3e..b89cf0e 100644 --- a/.github/workflows/check.yml +++ b/.github/workflows/check.yml @@ -11,7 +11,7 @@ jobs: outputs: stable: ${{ steps.rust.outputs.stable }} steps: - - uses: actions/checkout@v1 + - uses: actions/checkout@v2 - id: rust - name: Check Rust Version run: make check @@ -20,7 +20,7 @@ jobs: needs: check if: always() && (needs.check.result == 'failure') steps: - - uses: actions/checkout@master + - uses: actions/checkout@v2 - uses: nashmaniac/create-issue-action@v1.1 name: Create Issue Action with: From f94da9e8fc93a23f35234b9c8e95689a9bc0e374 Mon Sep 17 00:00:00 2001 From: Jeremiah Russell <47631109+jerusdp@users.noreply.github.com> Date: Mon, 13 Sep 2021 15:09:05 +0100 Subject: [PATCH 026/111] Update check.yml FIX: ID created new step --- .github/workflows/check.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/check.yml b/.github/workflows/check.yml index b89cf0e..2d0fd80 100644 --- a/.github/workflows/check.yml +++ b/.github/workflows/check.yml @@ -13,7 +13,7 @@ jobs: steps: - uses: actions/checkout@v2 - id: rust - - name: Check Rust Version + name: Check Rust Version run: make check create_issue: runs-on: ubuntu-latest From 82e5485476d4346a9af64620b04eb562bc2c22ba Mon Sep 17 00:00:00 2001 From: Jeremiah Russell <47631109+jerusdp@users.noreply.github.com> Date: Mon, 13 Sep 2021 15:18:58 +0100 Subject: [PATCH 027/111] Update check.yml Use different create issue action --- .github/workflows/check.yml | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/.github/workflows/check.yml b/.github/workflows/check.yml index 2d0fd80..697e5bd 100644 --- a/.github/workflows/check.yml +++ b/.github/workflows/check.yml @@ -21,10 +21,12 @@ jobs: if: always() && (needs.check.result == 'failure') steps: - uses: actions/checkout@v2 - - uses: nashmaniac/create-issue-action@v1.1 - name: Create Issue Action - with: - title: Build Failed - token: ${{secrets.GITHUB_TOKEN}} - labels: rust-check-failed - body: Update to rust stable version {{needs.check.output.stable}} + - name: Create Issue + uses: bryannice/gitactions-git-issue-creation@master + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + GITHUB_COMMIT_SHA: ${{ github.sha }} + GITHUB_REPO_OWNER: 'bryan-nice' + GITHUB_REPO_NAME: 'github-issue-creation' + GITHUB_ISSUE_TITLE: 'Demo''ing Git Issue Creation' + GITHUB_ISSUE_BODY: 'Demo''ing Git Issue Creation' From 4cbb4ceb604db4bff9a7ec947fedee5ffb470476 Mon Sep 17 00:00:00 2001 From: Jeremiah Russell <47631109+jerusdp@users.noreply.github.com> Date: Mon, 13 Sep 2021 15:27:44 +0100 Subject: [PATCH 028/111] Update check.yml --- .github/workflows/check.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/check.yml b/.github/workflows/check.yml index 697e5bd..473a258 100644 --- a/.github/workflows/check.yml +++ b/.github/workflows/check.yml @@ -26,7 +26,7 @@ jobs: env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} GITHUB_COMMIT_SHA: ${{ github.sha }} - GITHUB_REPO_OWNER: 'bryan-nice' - GITHUB_REPO_NAME: 'github-issue-creation' + GITHUB_REPO_OWNER: 'jerusdp' + GITHUB_REPO_NAME: 'lambda-rust' GITHUB_ISSUE_TITLE: 'Demo''ing Git Issue Creation' GITHUB_ISSUE_BODY: 'Demo''ing Git Issue Creation' From 2ef0d9315d7c3ff959a4ce31e8b787478bf64c6c Mon Sep 17 00:00:00 2001 From: Jeremiah Russell Date: Mon, 13 Sep 2021 16:33:49 +0100 Subject: [PATCH 029/111] FIX: Update to write issue on failure --- .github/workflows/check.yml | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/.github/workflows/check.yml b/.github/workflows/check.yml index bd5ffc0..0e96ccc 100644 --- a/.github/workflows/check.yml +++ b/.github/workflows/check.yml @@ -12,10 +12,17 @@ jobs: - uses: actions/checkout@v1 - name: Check Rust Version run: make check + outputs: + stable: ${{ steps.rust.outputs.stable }} + steps: + - uses: actions/checkout@v2 + - id: rust + name: Check Rust Version + run: make check create_issue: runs-on: ubuntu-latest needs: check - if: needs.check.result == 'failure' + if: always() && (needs.check.result == 'failure') steps: - uses: nashmaniac/create-issue-action@v1.1 name: Create Issue Action @@ -23,4 +30,4 @@ jobs: title: Build Failed token: ${{secrets.GITHUB_TOKEN}} labels: rust-check-failed - body: Update to rust stable version ${{ check.output.stable }} + body: Update to rust stable version ${{ needs.check.output.stable }} From c45e592e48953609f6ac5066947b86a2f52ab48e Mon Sep 17 00:00:00 2001 From: Jeremiah Russell Date: Mon, 13 Sep 2021 16:40:01 +0100 Subject: [PATCH 030/111] FIX - too much copying :( --- .github/workflows/check.yml | 7 ------- 1 file changed, 7 deletions(-) diff --git a/.github/workflows/check.yml b/.github/workflows/check.yml index 4d54674..64da43c 100644 --- a/.github/workflows/check.yml +++ b/.github/workflows/check.yml @@ -15,13 +15,6 @@ jobs: - id: rust name: Check Rust Version run: make check - outputs: - stable: ${{ steps.rust.outputs.stable }} - steps: - - uses: actions/checkout@v2 - - id: rust - name: Check Rust Version - run: make check create_issue: runs-on: ubuntu-latest needs: check From 78e507d8b27d57940df73bfa997c1ed3f6db86a1 Mon Sep 17 00:00:00 2001 From: Jeremiah Russell Date: Mon, 13 Sep 2021 17:05:05 +0100 Subject: [PATCH 031/111] echo stable --- latest.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/latest.sh b/latest.sh index 5bf9601..6ba9e08 100755 --- a/latest.sh +++ b/latest.sh @@ -9,8 +9,8 @@ source /cargo/env rustup toolchain install stable --profile=minimal STABLE=$(rustup check | grep stable | grep -E "[0-9]+\.[0-9]+\.[0-9]+" -o) DEFAULT=$(rustup show | grep -m 1 default | grep -E "[0-9]+\.[0-9]+\.[0-9]+" -o) -echo "::set-output name=stable_rust::$STABLE" - +echo "::set-output name=stable_rust::${STABLE}" +echo "${STABLE}" if [ "${STABLE}" == "${DEFAULT}" ]; then exit 0 else From 41a8ce5965e67cad8d1eee039b3b3b7572351cc3 Mon Sep 17 00:00:00 2001 From: Jeremiah Russell Date: Mon, 13 Sep 2021 17:09:12 +0100 Subject: [PATCH 032/111] attempt to use gh to create the issue within the shell script ] --- .github/workflows/check.yml | 2 +- latest.sh | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/.github/workflows/check.yml b/.github/workflows/check.yml index 64da43c..bb02011 100644 --- a/.github/workflows/check.yml +++ b/.github/workflows/check.yml @@ -23,7 +23,7 @@ jobs: - uses: nashmaniac/create-issue-action@v1.1 name: Create Issue Action with: - title: Build Failed + title: Time to update to Rust v${{ needs.check.output.stable }} token: ${{secrets.GITHUB_TOKEN}} labels: rust-check-failed body: Update to rust stable version ${{ needs.check.output.stable }} diff --git a/latest.sh b/latest.sh index 6ba9e08..58b1c04 100755 --- a/latest.sh +++ b/latest.sh @@ -14,5 +14,6 @@ echo "${STABLE}" if [ "${STABLE}" == "${DEFAULT}" ]; then exit 0 else + gh issue create --title "Time to update to Rust ${STABLE}" --body "Build update for Rust ${STABLE}" exit 1 fi \ No newline at end of file From 2abdf53d9cad9f82935816fda9eaf2dae70d3272 Mon Sep 17 00:00:00 2001 From: Jeremiah Russell Date: Mon, 13 Sep 2021 19:12:08 +0100 Subject: [PATCH 033/111] Wrong variable being transferred --- .github/workflows/check.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/check.yml b/.github/workflows/check.yml index bb02011..910802a 100644 --- a/.github/workflows/check.yml +++ b/.github/workflows/check.yml @@ -9,7 +9,7 @@ jobs: check: runs-on: ubuntu-latest outputs: - stable: ${{ steps.rust.outputs.stable }} + stable: ${{ steps.rust.outputs.stable_rust }} steps: - uses: actions/checkout@v2 - id: rust From 10a671d1cbae4ca236edbebc1f1c946f3df3749f Mon Sep 17 00:00:00 2001 From: Jeremiah Russell Date: Mon, 13 Sep 2021 19:28:17 +0100 Subject: [PATCH 034/111] Use gh instead of action --- .github/workflows/check.yml | 11 +---------- latest.sh | 10 +++------- 2 files changed, 4 insertions(+), 17 deletions(-) diff --git a/.github/workflows/check.yml b/.github/workflows/check.yml index 910802a..fc83210 100644 --- a/.github/workflows/check.yml +++ b/.github/workflows/check.yml @@ -8,11 +8,8 @@ on: jobs: check: runs-on: ubuntu-latest - outputs: - stable: ${{ steps.rust.outputs.stable_rust }} steps: - uses: actions/checkout@v2 - - id: rust name: Check Rust Version run: make check create_issue: @@ -20,10 +17,4 @@ jobs: needs: check if: always() && (needs.check.result == 'failure') steps: - - uses: nashmaniac/create-issue-action@v1.1 - name: Create Issue Action - with: - title: Time to update to Rust v${{ needs.check.output.stable }} - token: ${{secrets.GITHUB_TOKEN}} - labels: rust-check-failed - body: Update to rust stable version ${{ needs.check.output.stable }} + - run: gh issue create --title "Time to update to Rust" --body "Build update for next version of Rust" diff --git a/latest.sh b/latest.sh index 58b1c04..cf60355 100755 --- a/latest.sh +++ b/latest.sh @@ -9,11 +9,7 @@ source /cargo/env rustup toolchain install stable --profile=minimal STABLE=$(rustup check | grep stable | grep -E "[0-9]+\.[0-9]+\.[0-9]+" -o) DEFAULT=$(rustup show | grep -m 1 default | grep -E "[0-9]+\.[0-9]+\.[0-9]+" -o) -echo "::set-output name=stable_rust::${STABLE}" -echo "${STABLE}" -if [ "${STABLE}" == "${DEFAULT}" ]; then - exit 0 -else - gh issue create --title "Time to update to Rust ${STABLE}" --body "Build update for Rust ${STABLE}" - exit 1 + +if [ "${STABLE}" == "${DEFAULT}" ]; then exit 0 + else exit 1 fi \ No newline at end of file From ba1cdf07836dc790ffe45bc59b1622151da4df8d Mon Sep 17 00:00:00 2001 From: Jeremiah Russell Date: Mon, 13 Sep 2021 19:34:36 +0100 Subject: [PATCH 035/111] Use gh instead of action --- .github/workflows/check.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/check.yml b/.github/workflows/check.yml index fc83210..a746619 100644 --- a/.github/workflows/check.yml +++ b/.github/workflows/check.yml @@ -17,4 +17,4 @@ jobs: needs: check if: always() && (needs.check.result == 'failure') steps: - - run: gh issue create --title "Time to update to Rust" --body "Build update for next version of Rust" + - run: gh issue create --title "Time to update to Rust" --body "Build update for next version of Rust" \ No newline at end of file From 6f55fa851b0dec6de6142506615d90bc6bfb7c34 Mon Sep 17 00:00:00 2001 From: Jeremiah Russell Date: Mon, 13 Sep 2021 19:41:52 +0100 Subject: [PATCH 036/111] FIX missing step indicator --- .github/workflows/check.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/check.yml b/.github/workflows/check.yml index a746619..f807600 100644 --- a/.github/workflows/check.yml +++ b/.github/workflows/check.yml @@ -11,7 +11,7 @@ jobs: steps: - uses: actions/checkout@v2 name: Check Rust Version - run: make check + - run: make check create_issue: runs-on: ubuntu-latest needs: check From a9f159f54b2641fbc38b9fd5023e2cbb7f1f7170 Mon Sep 17 00:00:00 2001 From: Jeremiah Russell Date: Mon, 13 Sep 2021 19:45:24 +0100 Subject: [PATCH 037/111] FIXadd checkout to get auth? --- .github/workflows/check.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/check.yml b/.github/workflows/check.yml index f807600..d061e9f 100644 --- a/.github/workflows/check.yml +++ b/.github/workflows/check.yml @@ -17,4 +17,5 @@ jobs: needs: check if: always() && (needs.check.result == 'failure') steps: + - uses: actions/checkout@v2 - run: gh issue create --title "Time to update to Rust" --body "Build update for next version of Rust" \ No newline at end of file From 98f58eeffad360e4d7468094bd26027390a99853 Mon Sep 17 00:00:00 2001 From: Jeremiah Russell Date: Mon, 13 Sep 2021 19:55:01 +0100 Subject: [PATCH 038/111] FIX: Add environment with GITHUB_TOKEN --- .github/workflows/check.yml | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/.github/workflows/check.yml b/.github/workflows/check.yml index d061e9f..a193a64 100644 --- a/.github/workflows/check.yml +++ b/.github/workflows/check.yml @@ -17,5 +17,6 @@ jobs: needs: check if: always() && (needs.check.result == 'failure') steps: - - uses: actions/checkout@v2 - - run: gh issue create --title "Time to update to Rust" --body "Build update for next version of Rust" \ No newline at end of file + - run: gh issue create --title "Time to update to Rust" --body "Build update for next version of Rust" + env: + GITHUB_TOKEN: ${{secrets.GITHUB_TOKEN}} \ No newline at end of file From c9d8ee0e8cba1e8969ceb57ae8440cbc3cc82976 Mon Sep 17 00:00:00 2001 From: Jeremiah Russell Date: Mon, 13 Sep 2021 20:06:47 +0100 Subject: [PATCH 039/111] FIX: Use gh to clone instead of checkout --- .github/workflows/check.yml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/.github/workflows/check.yml b/.github/workflows/check.yml index a193a64..1646b3a 100644 --- a/.github/workflows/check.yml +++ b/.github/workflows/check.yml @@ -17,6 +17,9 @@ jobs: needs: check if: always() && (needs.check.result == 'failure') steps: + - run: gh repo clone lambda-rust + env: + GITHUB_TOKEN: ${{secrets.GITHUB_TOKEN}} - run: gh issue create --title "Time to update to Rust" --body "Build update for next version of Rust" env: GITHUB_TOKEN: ${{secrets.GITHUB_TOKEN}} \ No newline at end of file From a78ce53c5017cf3d767807e911c16c7d00d9a756 Mon Sep 17 00:00:00 2001 From: Jeremiah Russell Date: Mon, 13 Sep 2021 20:11:13 +0100 Subject: [PATCH 040/111] FIX Use checkout --- .github/workflows/check.yml | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/.github/workflows/check.yml b/.github/workflows/check.yml index 1646b3a..12077b2 100644 --- a/.github/workflows/check.yml +++ b/.github/workflows/check.yml @@ -17,9 +17,7 @@ jobs: needs: check if: always() && (needs.check.result == 'failure') steps: - - run: gh repo clone lambda-rust - env: - GITHUB_TOKEN: ${{secrets.GITHUB_TOKEN}} + - uses: actions/checkout@v2 - run: gh issue create --title "Time to update to Rust" --body "Build update for next version of Rust" env: GITHUB_TOKEN: ${{secrets.GITHUB_TOKEN}} \ No newline at end of file From 340b481da6cfa55ebe29cf627e7bae43fd3dfa62 Mon Sep 17 00:00:00 2001 From: Jeremiah Russell Date: Mon, 13 Sep 2021 20:14:30 +0100 Subject: [PATCH 041/111] Add label to issue --- .github/workflows/check.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/check.yml b/.github/workflows/check.yml index 12077b2..ee9291e 100644 --- a/.github/workflows/check.yml +++ b/.github/workflows/check.yml @@ -18,6 +18,6 @@ jobs: if: always() && (needs.check.result == 'failure') steps: - uses: actions/checkout@v2 - - run: gh issue create --title "Time to update to Rust" --body "Build update for next version of Rust" + - run: gh issue create --title "Time to update to Rust" --body "Build update for next version of Rust" --label update-rust-version env: GITHUB_TOKEN: ${{secrets.GITHUB_TOKEN}} \ No newline at end of file From dc545df873ff99dda9bcfc21ddb9dfa53ee1f8b2 Mon Sep 17 00:00:00 2001 From: Jeremiah Russell Date: Tue, 14 Sep 2021 08:49:46 +0100 Subject: [PATCH 042/111] Change label to existing lable --- .github/workflows/check.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/check.yml b/.github/workflows/check.yml index ee9291e..3a7b45d 100644 --- a/.github/workflows/check.yml +++ b/.github/workflows/check.yml @@ -18,6 +18,6 @@ jobs: if: always() && (needs.check.result == 'failure') steps: - uses: actions/checkout@v2 - - run: gh issue create --title "Time to update to Rust" --body "Build update for next version of Rust" --label update-rust-version + - run: gh issue create --title "Time to update to Rust" --body "Build update for next version of Rust" --label enhancement env: GITHUB_TOKEN: ${{secrets.GITHUB_TOKEN}} \ No newline at end of file From 2c86d65e248bc707f03982911d120a680083199a Mon Sep 17 00:00:00 2001 From: Jeremiah Russell Date: Tue, 14 Sep 2021 09:51:33 +0100 Subject: [PATCH 043/111] Create issue on the repository without checking out by using -R flag --- .github/workflows/check.yml | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/.github/workflows/check.yml b/.github/workflows/check.yml index cebb61b..5676bfe 100644 --- a/.github/workflows/check.yml +++ b/.github/workflows/check.yml @@ -1,6 +1,7 @@ name: Check on: + workflow-dispatch: schedule: - cron: '0 4 * * 3' @@ -8,6 +9,14 @@ jobs: check: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v1 - - name: Check Rust Version - run: make check + - uses: actions/checkout@v2 + name: Check Rust Version + - run: make check + create_issue: + runs-on: ubuntu-latest + needs: check + if: always() && (needs.check.result == 'failure') + steps: + - run: gh issue create --title "Time to update to Rust" --body "Build update for next version of Rust" --label "enhancement" - R $GITHUB_REPOSITORY + env: + GITHUB_TOKEN: ${{secrets.GITHUB_TOKEN}} \ No newline at end of file From 9c19ad7fdcc68af15797f0a82a88238fb9cebcac Mon Sep 17 00:00:00 2001 From: Jeremiah Russell Date: Tue, 14 Sep 2021 09:54:53 +0100 Subject: [PATCH 044/111] FIX spelling of workflow_dispatch --- .github/workflows/check.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/check.yml b/.github/workflows/check.yml index 5676bfe..0f9386c 100644 --- a/.github/workflows/check.yml +++ b/.github/workflows/check.yml @@ -1,7 +1,7 @@ name: Check on: - workflow-dispatch: + workflow_dispatch: schedule: - cron: '0 4 * * 3' From e615839dccfbbf6d683caa2eeec9b299942cb48a Mon Sep 17 00:00:00 2001 From: Jeremiah Russell Date: Tue, 14 Sep 2021 10:40:46 +0100 Subject: [PATCH 045/111] FIX wayward space in -R --- .github/workflows/check.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/check.yml b/.github/workflows/check.yml index 0f9386c..1aaae66 100644 --- a/.github/workflows/check.yml +++ b/.github/workflows/check.yml @@ -17,6 +17,6 @@ jobs: needs: check if: always() && (needs.check.result == 'failure') steps: - - run: gh issue create --title "Time to update to Rust" --body "Build update for next version of Rust" --label "enhancement" - R $GITHUB_REPOSITORY + - run: gh issue create --title "Time to update to Rust" --body "Build update for next version of Rust" --label "enhancement" -R $GITHUB_REPOSITORY env: GITHUB_TOKEN: ${{secrets.GITHUB_TOKEN}} \ No newline at end of file From 59d3085b9b2c02647abfae3d6dd33a26c5ad81fa Mon Sep 17 00:00:00 2001 From: Jeremiah Russell Date: Tue, 14 Sep 2021 10:43:26 +0100 Subject: [PATCH 046/111] Update cron schedule to run early Tuesday morning --- .github/workflows/check.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/check.yml b/.github/workflows/check.yml index 44619ef..1aaae66 100644 --- a/.github/workflows/check.yml +++ b/.github/workflows/check.yml @@ -3,7 +3,7 @@ name: Check on: workflow_dispatch: schedule: - - cron: '0 10 * * 2' + - cron: '0 4 * * 3' jobs: check: From c54e3a39ac6f5e4b3badda3f42d87653534907f0 Mon Sep 17 00:00:00 2001 From: Jeremiah Russell Date: Tue, 14 Sep 2021 11:03:37 +0100 Subject: [PATCH 047/111] Restore Makefile after testing --- Makefile | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/Makefile b/Makefile index b73c750..96d4e55 100644 --- a/Makefile +++ b/Makefile @@ -1,7 +1,7 @@ DOCKER ?= docker INPUT_RELEASE_VERSION ?= 0.4.0 -RUST_VERSION ?= 1.54.0 -REPO ?= jerusdp/lambda-rust +RUST_VERSION ?= 1.55.0 +REPO ?= rustserverless/lambda-rust publish: build $(DOCKER) push $(REPO):latest @@ -28,4 +28,4 @@ debug: build check: $(DOCKER) run --rm \ --entrypoint=/usr/local/bin/latest.sh \ - $(REPO) + $(REPO) \ No newline at end of file From 4640e2dd7421a386fb89e43f4368761edbc23311 Mon Sep 17 00:00:00 2001 From: Jeremiah Russell Date: Fri, 17 Sep 2021 13:02:48 +0100 Subject: [PATCH 048/111] Conditional execution of publish on the correct public repository --- .github/workflows/main.yml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 4597602..abf97f2 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -13,7 +13,8 @@ jobs: - name: Test run: make test publish: - needs: [test] + needs: [scan, test] + if: github.repository == 'rustserverless/lambda-rust' runs-on: ubuntu-latest steps: - uses: actions/checkout@v1 From a37f5653c8fbd1348f2d132471908e500fe367e3 Mon Sep 17 00:00:00 2001 From: Jeremiah Russell Date: Fri, 17 Sep 2021 12:40:52 +0100 Subject: [PATCH 049/111] Use github.repository to set REPO --- .github/workflows/main.yml | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index abf97f2..5c1d868 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -6,6 +6,26 @@ on: - master jobs: + scan: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v1 + - name: Build + env: + REPO: ${{ github.repository }} + shell: bash + run: | + echo "docker_repo=${{ env.REPO }}" >> $GITHUB_ENV + make build + - name: Trivy vulnerability scanner + uses: aquasecurity/trivy-action@0.0.20 + with: + image-ref: '${{ env.docker_repo }}:latest' + format: 'table' + exit-code: '1' + ignore-unfixed: true + vuln-type: 'os,library' + severity: 'CRITICAL,HIGH' test: runs-on: ubuntu-latest steps: From 67cc806ad4b193c8e1bf2119fb74369e55930d3d Mon Sep 17 00:00:00 2001 From: Jeremiah Russell Date: Fri, 17 Sep 2021 11:40:11 +0100 Subject: [PATCH 050/111] Update main to include security scan and address issue #6 --- .github/workflows/main.yml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 5c1d868..3893e13 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -30,6 +30,9 @@ jobs: runs-on: ubuntu-latest steps: - uses: actions/checkout@v1 + - name: Build + shell: bash + run: make build - name: Test run: make test publish: From 81ac9b03b4d85ecaac0deceb9c875578f407c618 Mon Sep 17 00:00:00 2001 From: Jeremiah Russell Date: Fri, 17 Sep 2021 11:10:36 +0100 Subject: [PATCH 051/111] Remove original version of kernel-devel as its not updated by yum and instead a second version is installed --- Dockerfile | 2 ++ 1 file changed, 2 insertions(+) diff --git a/Dockerfile b/Dockerfile index 1ba03c6..b84c683 100644 --- a/Dockerfile +++ b/Dockerfile @@ -2,6 +2,8 @@ FROM docker.io/lambci/lambda:build-provided.al2 ARG RUST_VERSION=1.54.0 +RUN yum -y update +RUN yum -y remove kernel-devel-4.14.203-156.332.amzn2 RUN yum install -y jq openssl-devel RUN curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs \ | CARGO_HOME=/cargo RUSTUP_HOME=/rustup sh -s -- -y --profile minimal --default-toolchain $RUST_VERSION From 2b9e5e8feb4fa86ebb9e1637c10afda4a787247a Mon Sep 17 00:00:00 2001 From: Jeremiah Russell Date: Fri, 17 Sep 2021 07:15:32 +0100 Subject: [PATCH 052/111] Update environent variable setting --- .github/workflows/security.yml | 32 ++++++++++++++++++++++++++++++++ 1 file changed, 32 insertions(+) create mode 100644 .github/workflows/security.yml diff --git a/.github/workflows/security.yml b/.github/workflows/security.yml new file mode 100644 index 0000000..f55f327 --- /dev/null +++ b/.github/workflows/security.yml @@ -0,0 +1,32 @@ +name: Security + +on: + push: + branches: + - master + +jobs: + test: + name: Security Test + runs-on: ubuntu-latest + steps: + - name: Checkout the repo + uses: actions/checkout@v1 + + - name: Build my Image + env: + REPO: 'jerusdp/lambda-rust' + run: | + echo "docker_repo=${{ env.REPO }}" >> $GITHUB_ENV + make build + + - name: Run Trivy vulnerability scanner + uses: aquasecurity/trivy-action@0.0.20 + with: + image-ref: '${{ env.docker_repo }}:latest' + format: 'table' + exit-code: '1' + ignore-unfixed: true + vuln-type: 'os,library' + severity: 'CRITICAL,HIGH' + From 8494333cc38dc3fa3380945c04810bc6a33c096f Mon Sep 17 00:00:00 2001 From: Jeremiah Russell Date: Fri, 17 Sep 2021 15:46:02 +0100 Subject: [PATCH 053/111] Add .vscode to gitignore and delete seurity.yml working file --- .github/workflows/security.yml | 32 -------------------------------- .gitignore | 1 + 2 files changed, 1 insertion(+), 32 deletions(-) delete mode 100644 .github/workflows/security.yml diff --git a/.github/workflows/security.yml b/.github/workflows/security.yml deleted file mode 100644 index f55f327..0000000 --- a/.github/workflows/security.yml +++ /dev/null @@ -1,32 +0,0 @@ -name: Security - -on: - push: - branches: - - master - -jobs: - test: - name: Security Test - runs-on: ubuntu-latest - steps: - - name: Checkout the repo - uses: actions/checkout@v1 - - - name: Build my Image - env: - REPO: 'jerusdp/lambda-rust' - run: | - echo "docker_repo=${{ env.REPO }}" >> $GITHUB_ENV - make build - - - name: Run Trivy vulnerability scanner - uses: aquasecurity/trivy-action@0.0.20 - with: - image-ref: '${{ env.docker_repo }}:latest' - format: 'table' - exit-code: '1' - ignore-unfixed: true - vuln-type: 'os,library' - severity: 'CRITICAL,HIGH' - diff --git a/.gitignore b/.gitignore index 0c5b82d..08851c5 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,4 @@ tests/test-*/test-out.log target .DS_Store +.vscode \ No newline at end of file From 571527080fc6961cac3c794725aa64c2bd9f0b2e Mon Sep 17 00:00:00 2001 From: Jeremiah Russell Date: Fri, 17 Sep 2021 15:57:24 +0100 Subject: [PATCH 054/111] FIX: Correct the name of the master repository to rust-serverless/lambda-rust --- .github/workflows/main.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 3893e13..a8f7d7f 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -37,7 +37,7 @@ jobs: run: make test publish: needs: [scan, test] - if: github.repository == 'rustserverless/lambda-rust' + if: github.repository == 'rust-serverless/lambda-rust' runs-on: ubuntu-latest steps: - uses: actions/checkout@v1 From 9c22b3d4134e76bb7bbcceb08ec23a26a4f1a3eb Mon Sep 17 00:00:00 2001 From: Jeremiah Russell Date: Sun, 19 Sep 2021 09:12:08 +0100 Subject: [PATCH 055/111] Added workflow to build nightly Rust each night at 0200 --- .github/workflows/nightly.yml | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) create mode 100644 .github/workflows/nightly.yml diff --git a/.github/workflows/nightly.yml b/.github/workflows/nightly.yml new file mode 100644 index 0000000..10ff4cc --- /dev/null +++ b/.github/workflows/nightly.yml @@ -0,0 +1,22 @@ +name: Build Nightly Rust + +on: + workflow_dispatch: + schedule: + - cron: '0 2 * * 3' + +jobs: + publish: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v2 + name: Build Nightly Rust + - run: make nightly + create_issue: + runs-on: ubuntu-latest + needs: check + if: always() && (needs.publish.result == 'failure') + steps: + - run: gh issue create --title "Nightly publication failed" --body "Nightly publication failed" --label "bug" -R $GITHUB_REPOSITORY + env: + GITHUB_TOKEN: ${{secrets.GITHUB_TOKEN}} \ No newline at end of file From fe4b20170b7cfca2d03e877be6cd7425f330b50a Mon Sep 17 00:00:00 2001 From: Jeremiah Russell Date: Sun, 19 Sep 2021 09:22:02 +0100 Subject: [PATCH 056/111] Nigthly make script to build and push nightly Rust --- Makefile | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/Makefile b/Makefile index 6388a68..8f2d2fd 100644 --- a/Makefile +++ b/Makefile @@ -24,3 +24,7 @@ debug: build -v ${HOME}/.cargo/git:/cargo/git \ --entrypoint=/bin/bash \ $(REPO) + +nightly: + $(DOCKER) build --build-arg RUST_VERSION=nightly -t $(REPO):nightly . + $(DOCKER) push $(REPO):nightly \ No newline at end of file From dc9cce05de84c6e26b60d4a7763ff919b207d43b Mon Sep 17 00:00:00 2001 From: Jeremiah Russell Date: Mon, 20 Sep 2021 07:24:45 +0100 Subject: [PATCH 057/111] Set IMAGE based on enirvonment or default --- tests/test.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/test.sh b/tests/test.sh index b200bff..0a2f1ba 100755 --- a/tests/test.sh +++ b/tests/test.sh @@ -4,7 +4,7 @@ HERE="$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null 2>&1 && pwd )" # Root directory of the repository DIST=$(cd "$HERE"/..; pwd) -IMAGE=${1:-rustserverless/lambda-rust} +: "${IMAGE:=rustserverless/lambda-rust}" source "${HERE}"/bashtest.sh From b934a750da8ea2117254e0dc84a194348a6daf3a Mon Sep 17 00:00:00 2001 From: Jeremiah Russell Date: Mon, 20 Sep 2021 08:07:17 +0100 Subject: [PATCH 058/111] Add Tag to Makefile Problem Makefile only makes latest and tags with Rust version Solution - variable TAG to set the tag with default latest - tag the debug build to allows debugging non-latest builds Note --- Makefile | 13 +++++-------- 1 file changed, 5 insertions(+), 8 deletions(-) diff --git a/Makefile b/Makefile index 8f2d2fd..3b101c4 100644 --- a/Makefile +++ b/Makefile @@ -2,16 +2,17 @@ DOCKER ?= docker INPUT_RELEASE_VERSION ?= 0.4.0 RUST_VERSION ?= 1.55.0 REPO ?= rustserverless/lambda-rust +TAG ?= latest publish: build - $(DOCKER) push $(REPO):latest + $(DOCKER) push $(REPO):${TAG} publish-tag: build publish - $(DOCKER) tag $(REPO):latest "$(REPO):$(INPUT_RELEASE_VERSION)-rust-$(RUST_VERSION)" + $(DOCKER) tag $(REPO):${TAG} "$(REPO):$(INPUT_RELEASE_VERSION)-rust-$(RUST_VERSION)" $(DOCKER) push "$(REPO):$(INPUT_RELEASE_VERSION)-rust-$(RUST_VERSION)" build: - $(DOCKER) build --build-arg RUST_VERSION=$(RUST_VERSION) -t $(REPO):latest . + $(DOCKER) build --build-arg RUST_VERSION=$(RUST_VERSION) -t $(REPO):${TAG} . test: @tests/test.sh @@ -23,8 +24,4 @@ debug: build -v ${HOME}/.cargo/registry:/cargo/registry \ -v ${HOME}/.cargo/git:/cargo/git \ --entrypoint=/bin/bash \ - $(REPO) - -nightly: - $(DOCKER) build --build-arg RUST_VERSION=nightly -t $(REPO):nightly . - $(DOCKER) push $(REPO):nightly \ No newline at end of file + $(REPO):$(TAG) From 507fdc77397448e0a36b1b6be0995e9d4fee2164 Mon Sep 17 00:00:00 2001 From: Jeremiah Russell Date: Mon, 20 Sep 2021 08:35:15 +0100 Subject: [PATCH 059/111] Build and Publish Nightly Rust Problem Nighlty Rust is updated every night! Solution - Action runs each night at 0200 UTC - Action can be dispatched from console - Run test job and make with environment set to use and tag nigthly - Run publsh job on successful test with nightly - Only run publish on rust-serverless repo - Publish issue if publication fails Note Not configured to run security scan (part of seperate PR). --- .github/workflows/nightly.yml | 18 +++++++++++++++--- 1 file changed, 15 insertions(+), 3 deletions(-) diff --git a/.github/workflows/nightly.yml b/.github/workflows/nightly.yml index 10ff4cc..3e8f5ac 100644 --- a/.github/workflows/nightly.yml +++ b/.github/workflows/nightly.yml @@ -6,15 +6,27 @@ on: - cron: '0 2 * * 3' jobs: + test: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v2 + - run: make test + env: + RUST_VERSION: nightly + TAG: nightly publish: + needs: [test] + if: github.repository == "rust-serverless/lambda-rust" runs-on: ubuntu-latest steps: - uses: actions/checkout@v2 - name: Build Nightly Rust - - run: make nightly + - run: make publish + env: + RUST_VERSION: nightly + TAG: nightly create_issue: runs-on: ubuntu-latest - needs: check + needs: [publish] if: always() && (needs.publish.result == 'failure') steps: - run: gh issue create --title "Nightly publication failed" --body "Nightly publication failed" --label "bug" -R $GITHUB_REPOSITORY From 800f52fcd4b6b38af76a2286029a1568b92c6516 Mon Sep 17 00:00:00 2001 From: Jeremiah Russell Date: Mon, 20 Sep 2021 08:58:53 +0100 Subject: [PATCH 060/111] FIX: double quotes to single quotes --- .github/workflows/nightly.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/nightly.yml b/.github/workflows/nightly.yml index 3e8f5ac..eb7cc76 100644 --- a/.github/workflows/nightly.yml +++ b/.github/workflows/nightly.yml @@ -16,7 +16,7 @@ jobs: TAG: nightly publish: needs: [test] - if: github.repository == "rust-serverless/lambda-rust" + if: github.repository == 'rust-serverless/lambda-rust' runs-on: ubuntu-latest steps: - uses: actions/checkout@v2 From b9ac56a0d93af9358ce1a5fd3048b06e3f80fd64 Mon Sep 17 00:00:00 2001 From: Jeremiah Russell Date: Mon, 20 Sep 2021 09:31:03 +0100 Subject: [PATCH 061/111] FIX: test needs to use the nigthly container image --- .github/workflows/nightly.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/nightly.yml b/.github/workflows/nightly.yml index eb7cc76..57f661f 100644 --- a/.github/workflows/nightly.yml +++ b/.github/workflows/nightly.yml @@ -14,6 +14,7 @@ jobs: env: RUST_VERSION: nightly TAG: nightly + IMAGE: 'rustserverless/lambda-rust:nightly' publish: needs: [test] if: github.repository == 'rust-serverless/lambda-rust' From 15367fa2d3746a597f6898ecab25aa4d2ea4599e Mon Sep 17 00:00:00 2001 From: Jeremiah Russell Date: Mon, 20 Sep 2021 09:35:52 +0100 Subject: [PATCH 062/111] FIX: need to build before test --- .github/workflows/nightly.yml | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/.github/workflows/nightly.yml b/.github/workflows/nightly.yml index 57f661f..a579b63 100644 --- a/.github/workflows/nightly.yml +++ b/.github/workflows/nightly.yml @@ -10,7 +10,9 @@ jobs: runs-on: ubuntu-latest steps: - uses: actions/checkout@v2 - - run: make test + - run: | + make build + make test env: RUST_VERSION: nightly TAG: nightly From 02beee0109aaff61c36bfab3161effbdaaf28d76 Mon Sep 17 00:00:00 2001 From: Jeremiah Russell Date: Thu, 30 Sep 2021 11:37:05 +0100 Subject: [PATCH 063/111] Added newline to nightly.yml --- .github/workflows/nightly.yml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.github/workflows/nightly.yml b/.github/workflows/nightly.yml index a579b63..079166e 100644 --- a/.github/workflows/nightly.yml +++ b/.github/workflows/nightly.yml @@ -34,4 +34,5 @@ jobs: steps: - run: gh issue create --title "Nightly publication failed" --body "Nightly publication failed" --label "bug" -R $GITHUB_REPOSITORY env: - GITHUB_TOKEN: ${{secrets.GITHUB_TOKEN}} \ No newline at end of file + GITHUB_TOKEN: ${{secrets.GITHUB_TOKEN}} + \ No newline at end of file From 438171c2bb7eadc4fd57b700a4eaf5768b9a1f17 Mon Sep 17 00:00:00 2001 From: Jeremiah Russell Date: Thu, 30 Sep 2021 12:24:34 +0100 Subject: [PATCH 064/111] Added missing newlines --- .github/workflows/check.yml | 3 ++- .gitignore | 2 +- latest.sh | 2 +- 3 files changed, 4 insertions(+), 3 deletions(-) diff --git a/.github/workflows/check.yml b/.github/workflows/check.yml index 1aaae66..2b0faf5 100644 --- a/.github/workflows/check.yml +++ b/.github/workflows/check.yml @@ -19,4 +19,5 @@ jobs: steps: - run: gh issue create --title "Time to update to Rust" --body "Build update for next version of Rust" --label "enhancement" -R $GITHUB_REPOSITORY env: - GITHUB_TOKEN: ${{secrets.GITHUB_TOKEN}} \ No newline at end of file + GITHUB_TOKEN: ${{secrets.GITHUB_TOKEN}} + \ No newline at end of file diff --git a/.gitignore b/.gitignore index 08851c5..cb01b5b 100644 --- a/.gitignore +++ b/.gitignore @@ -1,4 +1,4 @@ tests/test-*/test-out.log target .DS_Store -.vscode \ No newline at end of file +.vscode diff --git a/latest.sh b/latest.sh index cf60355..f39f922 100755 --- a/latest.sh +++ b/latest.sh @@ -12,4 +12,4 @@ DEFAULT=$(rustup show | grep -m 1 default | grep -E "[0-9]+\.[0-9]+\.[0-9]+" -o) if [ "${STABLE}" == "${DEFAULT}" ]; then exit 0 else exit 1 -fi \ No newline at end of file +fi From 680fa57a7bce49930ce66017415ed32eba4f012e Mon Sep 17 00:00:00 2001 From: Jeremiah Russell Date: Thu, 30 Sep 2021 12:25:19 +0100 Subject: [PATCH 065/111] Added missing newlines --- Makefile | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/Makefile b/Makefile index 96d4e55..c774be3 100644 --- a/Makefile +++ b/Makefile @@ -28,4 +28,5 @@ debug: build check: $(DOCKER) run --rm \ --entrypoint=/usr/local/bin/latest.sh \ - $(REPO) \ No newline at end of file + $(REPO) + \ No newline at end of file From 5bc6605c8e390b86d929399f5e10f673e8365aef Mon Sep 17 00:00:00 2001 From: Jeremiah Russell Date: Thu, 30 Sep 2021 12:30:49 +0100 Subject: [PATCH 066/111] Resolve conflict with Makefile updated by nightly --- Makefile | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/Makefile b/Makefile index c774be3..77005cf 100644 --- a/Makefile +++ b/Makefile @@ -2,16 +2,17 @@ DOCKER ?= docker INPUT_RELEASE_VERSION ?= 0.4.0 RUST_VERSION ?= 1.55.0 REPO ?= rustserverless/lambda-rust +TAG ?= latest publish: build - $(DOCKER) push $(REPO):latest + $(DOCKER) push $(REPO):${TAG} publish-tag: build publish - $(DOCKER) tag $(REPO):latest "$(REPO):$(INPUT_RELEASE_VERSION)-rust-$(RUST_VERSION)" + $(DOCKER) tag $(REPO):${TAG} "$(REPO):$(INPUT_RELEASE_VERSION)-rust-$(RUST_VERSION)" $(DOCKER) push "$(REPO):$(INPUT_RELEASE_VERSION)-rust-$(RUST_VERSION)" build: - $(DOCKER) build --build-arg RUST_VERSION=$(RUST_VERSION) -t $(REPO):latest . + $(DOCKER) build --build-arg RUST_VERSION=$(RUST_VERSION) -t $(REPO):${TAG} . test: @tests/test.sh @@ -23,7 +24,7 @@ debug: build -v ${HOME}/.cargo/registry:/cargo/registry \ -v ${HOME}/.cargo/git:/cargo/git \ --entrypoint=/bin/bash \ - $(REPO) + $(REPO):$(TAG) check: $(DOCKER) run --rm \ From 8c4e25cbd5c210cc4254720020699fcbb582d475 Mon Sep 17 00:00:00 2001 From: Jeremiah Russell Date: Thu, 30 Sep 2021 12:58:07 +0100 Subject: [PATCH 067/111] Added missing newlines --- .gitignore | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.gitignore b/.gitignore index 08851c5..cb01b5b 100644 --- a/.gitignore +++ b/.gitignore @@ -1,4 +1,4 @@ tests/test-*/test-out.log target .DS_Store -.vscode \ No newline at end of file +.vscode From 2924262965d15e9d03061680e61529142b064a9a Mon Sep 17 00:00:00 2001 From: Michael Torres Date: Tue, 5 Oct 2021 18:16:49 -0700 Subject: [PATCH 068/111] Add autobuild to stable --- .github/workflows/stable.yml | 35 +++++++++++++++++++++++++++++++++++ 1 file changed, 35 insertions(+) create mode 100644 .github/workflows/stable.yml diff --git a/.github/workflows/stable.yml b/.github/workflows/stable.yml new file mode 100644 index 0000000..ff8cb94 --- /dev/null +++ b/.github/workflows/stable.yml @@ -0,0 +1,35 @@ +name: Build Stable Rust + +on: + workflow_dispatch: + schedule: + - cron: '0 2 * * 3' + +jobs: + test: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v2 + - run: | + make build + make test + env: + RUST_VERSION: stable + publish: + needs: [test] + if: github.repository == 'rust-serverless/lambda-rust' + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v2 + - run: make publish-tag + env: + RUST_VERSION: stable + create_issue: + runs-on: ubuntu-latest + needs: [publish] + if: always() && (needs.publish.result == 'failure') + steps: + - run: gh issue create --title "Stable publication failed" --body "Stable publication failed" --label "bug" -R $GITHUB_REPOSITORY + env: + GITHUB_TOKEN: ${{secrets.GITHUB_TOKEN}} + \ No newline at end of file From ee63ae3386c47c93339f4480782b1e8a1b95c2f2 Mon Sep 17 00:00:00 2001 From: Jeremiah Russell Date: Tue, 12 Oct 2021 09:24:48 +0100 Subject: [PATCH 069/111] FIX: Publication to docker using docker login for security --- .github/workflows/nightly.yml | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/.github/workflows/nightly.yml b/.github/workflows/nightly.yml index 079166e..4851ef8 100644 --- a/.github/workflows/nightly.yml +++ b/.github/workflows/nightly.yml @@ -22,8 +22,17 @@ jobs: if: github.repository == 'rust-serverless/lambda-rust' runs-on: ubuntu-latest steps: - - uses: actions/checkout@v2 - - run: make publish + - name: Checkout the repo + uses: actions/checkout@v2 + - name: Login to Docker Hub + uses: docker/login-action@v1 + with: + username: ${{ secrets.DOCKER_USERNAME }} + password: ${{ secrets.DOCKER_PASSWORD }} + - name: Publish + shell: bash + run: | + make publish-tag env: RUST_VERSION: nightly TAG: nightly @@ -35,4 +44,3 @@ jobs: - run: gh issue create --title "Nightly publication failed" --body "Nightly publication failed" --label "bug" -R $GITHUB_REPOSITORY env: GITHUB_TOKEN: ${{secrets.GITHUB_TOKEN}} - \ No newline at end of file From 760a9ed3775b7e5fe1ef50d1de07b5c95890eb16 Mon Sep 17 00:00:00 2001 From: Jeremiah Russell Date: Tue, 12 Oct 2021 16:51:16 +0100 Subject: [PATCH 070/111] Change base build to aws maintained lambda provided al2 image --- Dockerfile | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/Dockerfile b/Dockerfile index b7ad8cf..72da051 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,5 +1,4 @@ -# https://github.com/lambci/docker-lambda#documentation -FROM docker.io/lambci/lambda:build-provided.al2 +FROM public.ecr.aws/lambda/provided:al2 ARG RUST_VERSION=1.54.0 RUN yum -y update From 38f76948908adca8e6d67ff477ca62b8bbff6112 Mon Sep 17 00:00:00 2001 From: Jeremiah Russell Date: Tue, 12 Oct 2021 16:52:00 +0100 Subject: [PATCH 071/111] Remove security updates as no longer required. AWS keeps lambda image updated ~weekly --- Dockerfile | 2 -- 1 file changed, 2 deletions(-) diff --git a/Dockerfile b/Dockerfile index 72da051..8bc32ce 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,8 +1,6 @@ FROM public.ecr.aws/lambda/provided:al2 ARG RUST_VERSION=1.54.0 -RUN yum -y update -RUN yum -y remove kernel-devel-4.14.203-156.332.amzn2 RUN yum install -y jq openssl-devel RUN curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs \ | CARGO_HOME=/cargo RUSTUP_HOME=/rustup sh -s -- -y --profile minimal --default-toolchain $RUST_VERSION From 9ccf2d92972360412d55e84fa4ec82fc020ed469 Mon Sep 17 00:00:00 2001 From: Jeremiah Russell Date: Tue, 12 Oct 2021 16:53:15 +0100 Subject: [PATCH 072/111] set -o pipefail to ensure that failyre in the pipe results in failure of step --- Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Dockerfile b/Dockerfile index 8bc32ce..9d5b292 100644 --- a/Dockerfile +++ b/Dockerfile @@ -2,7 +2,7 @@ FROM public.ecr.aws/lambda/provided:al2 ARG RUST_VERSION=1.54.0 RUN yum install -y jq openssl-devel -RUN curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs \ +RUN set -o pipefail && curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs \ | CARGO_HOME=/cargo RUSTUP_HOME=/rustup sh -s -- -y --profile minimal --default-toolchain $RUST_VERSION ADD build.sh /usr/local/bin/ ADD latest.sh /usr/local/bin/ From 5bed29bd7b150db08be673a371c0b22263de762a Mon Sep 17 00:00:00 2001 From: Jeremiah Russell Date: Tue, 12 Oct 2021 16:54:40 +0100 Subject: [PATCH 073/111] Use COPY instead of ADD. Dockerfile recommended good practice as ADD extracts tarballs which is not required for here --- Dockerfile | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Dockerfile b/Dockerfile index 9d5b292..29707f3 100644 --- a/Dockerfile +++ b/Dockerfile @@ -4,8 +4,8 @@ ARG RUST_VERSION=1.54.0 RUN yum install -y jq openssl-devel RUN set -o pipefail && curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs \ | CARGO_HOME=/cargo RUSTUP_HOME=/rustup sh -s -- -y --profile minimal --default-toolchain $RUST_VERSION -ADD build.sh /usr/local/bin/ -ADD latest.sh /usr/local/bin/ +COPY build.sh /usr/local/bin/ +COPY latest.sh /usr/local/bin/ VOLUME ["/code"] WORKDIR /code ENTRYPOINT ["/usr/local/bin/build.sh"] From fe3033edd99a6f8896672de331b3c8170427da10 Mon Sep 17 00:00:00 2001 From: Jeremiah Russell Date: Wed, 13 Oct 2021 08:54:52 +0100 Subject: [PATCH 074/111] FIX: Docker hub login fix for weekly build process based on nightly (confirmed working) --- .github/workflows/stable.yml | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/.github/workflows/stable.yml b/.github/workflows/stable.yml index ff8cb94..3264782 100644 --- a/.github/workflows/stable.yml +++ b/.github/workflows/stable.yml @@ -20,8 +20,17 @@ jobs: if: github.repository == 'rust-serverless/lambda-rust' runs-on: ubuntu-latest steps: - - uses: actions/checkout@v2 - - run: make publish-tag + - name: Checkout the repo + uses: actions/checkout@v2 + - name: Login to Docker hub + uses: docker/login-action@v1 + with: + username: ${{ secrets.DOCKER_USERNAME }} + password: ${{ secrets.DOCKER_PASSWORD }} + - name: Publish + shell: bash + run: | + make publish-tag env: RUST_VERSION: stable create_issue: @@ -32,4 +41,3 @@ jobs: - run: gh issue create --title "Stable publication failed" --body "Stable publication failed" --label "bug" -R $GITHUB_REPOSITORY env: GITHUB_TOKEN: ${{secrets.GITHUB_TOKEN}} - \ No newline at end of file From f3593bc00b0694403830522c5d47e30793c8ac9d Mon Sep 17 00:00:00 2001 From: Alexander Zaitsev Date: Sat, 30 Oct 2021 01:33:45 +0300 Subject: [PATCH 075/111] feat: update rust version - update rust version to 1.56 - add .idea library to gitignore - update changelog - add missing CC linker to the dockerfile Tested: - No --- .gitignore | 1 + CHANGELOG.md | 4 ++++ Dockerfile | 4 ++-- Makefile | 2 +- 4 files changed, 8 insertions(+), 3 deletions(-) diff --git a/.gitignore b/.gitignore index cb01b5b..e46a2eb 100644 --- a/.gitignore +++ b/.gitignore @@ -2,3 +2,4 @@ tests/test-*/test-out.log target .DS_Store .vscode +.idea diff --git a/CHANGELOG.md b/CHANGELOG.md index 5c7e724..9819557 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,7 @@ +# 0.4.0-rust-1.56.0 + +* Upgrade to Rust [`1.56.0`](https://blog.rust-lang.org/2021/10/21/Rust-1.56.0.html) + # 0.4.0-rust-1.55.0 * Upgrade to Rust [`1.55.0`](https://blog.rust-lang.org/2021/09/09/Rust-1.55.0.html) diff --git a/Dockerfile b/Dockerfile index 29707f3..c4a728b 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,7 +1,7 @@ FROM public.ecr.aws/lambda/provided:al2 -ARG RUST_VERSION=1.54.0 -RUN yum install -y jq openssl-devel +ARG RUST_VERSION=1.56.0 +RUN yum install -y jq openssl-devel gcc RUN set -o pipefail && curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs \ | CARGO_HOME=/cargo RUSTUP_HOME=/rustup sh -s -- -y --profile minimal --default-toolchain $RUST_VERSION COPY build.sh /usr/local/bin/ diff --git a/Makefile b/Makefile index 23eccaf..e4f242a 100644 --- a/Makefile +++ b/Makefile @@ -1,6 +1,6 @@ DOCKER ?= docker INPUT_RELEASE_VERSION ?= 0.4.0 -RUST_VERSION ?= 1.55.0 +RUST_VERSION ?= 1.56.0 REPO ?= rustserverless/lambda-rust TAG ?= latest From 796739ba253b000f573318f4f5bf03bc67f10a9c Mon Sep 17 00:00:00 2001 From: Alexander Zaitsev Date: Sat, 30 Oct 2021 02:26:17 +0300 Subject: [PATCH 076/111] fix: add zip to packages - add zip package Tested: - No --- Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Dockerfile b/Dockerfile index c4a728b..c12fbd1 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,7 +1,7 @@ FROM public.ecr.aws/lambda/provided:al2 ARG RUST_VERSION=1.56.0 -RUN yum install -y jq openssl-devel gcc +RUN yum install -y jq openssl-devel gcc zip RUN set -o pipefail && curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs \ | CARGO_HOME=/cargo RUSTUP_HOME=/rustup sh -s -- -y --profile minimal --default-toolchain $RUST_VERSION COPY build.sh /usr/local/bin/ From f9533d242a635b585ab1c399ec363b67756a6508 Mon Sep 17 00:00:00 2001 From: Alexander Zaitsev Date: Wed, 3 Nov 2021 14:01:12 +0300 Subject: [PATCH 077/111] feat: update to Rust 1.56.1 - update to Rust 1.56.1 version - update README: get rid of redundant lamb ci references Tested: - No --- CHANGELOG.md | 4 ++++ Dockerfile | 2 +- Makefile | 2 +- README.md | 9 ++++----- 4 files changed, 10 insertions(+), 7 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 9819557..a44888d 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,7 @@ +# 0.4.0-rust-1.56.1 + +* Upgrade to Rust [`1.56.1`](https://blog.rust-lang.org/2021/11/01/Rust-1.56.1.html) + # 0.4.0-rust-1.56.0 * Upgrade to Rust [`1.56.0`](https://blog.rust-lang.org/2021/10/21/Rust-1.56.0.html) diff --git a/Dockerfile b/Dockerfile index c12fbd1..0550fe7 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,6 +1,6 @@ FROM public.ecr.aws/lambda/provided:al2 -ARG RUST_VERSION=1.56.0 +ARG RUST_VERSION=1.56.1 RUN yum install -y jq openssl-devel gcc zip RUN set -o pipefail && curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs \ | CARGO_HOME=/cargo RUSTUP_HOME=/rustup sh -s -- -y --profile minimal --default-toolchain $RUST_VERSION diff --git a/Makefile b/Makefile index e4f242a..d207683 100644 --- a/Makefile +++ b/Makefile @@ -1,6 +1,6 @@ DOCKER ?= docker INPUT_RELEASE_VERSION ?= 0.4.0 -RUST_VERSION ?= 1.56.0 +RUST_VERSION ?= 1.56.1 REPO ?= rustserverless/lambda-rust TAG ?= latest diff --git a/README.md b/README.md index 9d8a02c..e777492 100644 --- a/README.md +++ b/README.md @@ -3,8 +3,7 @@ ## 🤔 about -This docker image extends [lambda ci `provided.al2`](https://github.com/lambci/docker-lambda#documentation) builder docker image, a faithful reproduction of the actual AWS "**provided.al2**" Lambda runtime environment, -and installs [rustup](https://rustup.rs/) and the *stable* rust toolchain. +This docker image extends AWS Lambda `provided.al2 runtime environment, and installs [rustup](https://rustup.rs/) and the *stable* rust toolchain. This provides a build environment, consistent with your target execution environment for predictable results. @@ -108,7 +107,7 @@ output (not zipped) is available under `target/lambda/{profile}/output/{your-lam You will see both `bootstrap` and `bootstrap.debug` files there. > **⚠️ Note:** `PACKAGE=false` prevents `package` hook from running. -You can then invoke this bootstap executable with the lambda-ci docker image for the `provided.al2` AWS lambda runtime with a one off container. +You can then invoke this bootstap executable for the `provided.al2` AWS lambda runtime with a one off container. ```sh # Build your function skipping the zip creation step @@ -128,7 +127,7 @@ $ docker run \ -i -e DOCKER_LAMBDA_USE_STDIN=1 \ --rm \ -v ${PWD}/target/lambda/release/output/{your-binary-name}:/var/task:ro,delegated \ - lambci/lambda:provided.al2 + public.ecr.aws/lambda/provided:al2 # provide an event payload via stdin (typically a json blob) @@ -148,7 +147,7 @@ $ unzip -o \ -v /tmp/lambda:/var/task:ro,delegated \ -e DOCKER_LAMBDA_STAY_OPEN=1 \ -p 9001:9001 \ - lambci/lambda:provided.al2 + public.ecr.aws/lambda/provided:al2 ``` In a separate terminal, you can invoke your function with `curl` From 3864c151bb1670335ce7913d9ed378fcd4af2189 Mon Sep 17 00:00:00 2001 From: "whitesource-bolt-for-github[bot]" <42819689+whitesource-bolt-for-github[bot]@users.noreply.github.com> Date: Thu, 4 Nov 2021 15:57:57 +0000 Subject: [PATCH 078/111] Add .whitesource configuration file --- .whitesource | 12 ++++++++++++ 1 file changed, 12 insertions(+) create mode 100644 .whitesource diff --git a/.whitesource b/.whitesource new file mode 100644 index 0000000..55b922e --- /dev/null +++ b/.whitesource @@ -0,0 +1,12 @@ +{ + "scanSettings": { + "baseBranches": [] + }, + "checkRunSettings": { + "vulnerableCheckRunConclusionLevel": "failure", + "displayMode": "diff" + }, + "issueSettings": { + "minSeverityLevel": "LOW" + } +} \ No newline at end of file From b648877637e986cc58086601a85517280672afba Mon Sep 17 00:00:00 2001 From: Juunini Date: Fri, 5 Nov 2021 20:31:40 +0900 Subject: [PATCH 079/111] Fix typo in README - line 111 : `bootstap` -> `bootstrap` --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index e777492..e6964ab 100644 --- a/README.md +++ b/README.md @@ -107,7 +107,7 @@ output (not zipped) is available under `target/lambda/{profile}/output/{your-lam You will see both `bootstrap` and `bootstrap.debug` files there. > **⚠️ Note:** `PACKAGE=false` prevents `package` hook from running. -You can then invoke this bootstap executable for the `provided.al2` AWS lambda runtime with a one off container. +You can then invoke this bootstrap executable for the `provided.al2` AWS lambda runtime with a one off container. ```sh # Build your function skipping the zip creation step From 8cd6503368b52c1094447b85a5c24d76e10a737e Mon Sep 17 00:00:00 2001 From: Alexander Zaitsev Date: Wed, 17 Nov 2021 13:19:19 +0300 Subject: [PATCH 080/111] fix: latest Rust compiler check - fix latest Rust compiler check. Seems like upstream changed a little bit format of the message in the commands Tested: - Local test --- latest.sh | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/latest.sh b/latest.sh index f39f922..1aade78 100755 --- a/latest.sh +++ b/latest.sh @@ -8,8 +8,9 @@ source /cargo/env rustup toolchain install stable --profile=minimal STABLE=$(rustup check | grep stable | grep -E "[0-9]+\.[0-9]+\.[0-9]+" -o) -DEFAULT=$(rustup show | grep -m 1 default | grep -E "[0-9]+\.[0-9]+\.[0-9]+" -o) +DEFAULT=$(rustup show | grep -m 1 rustc | grep -E "[0-9]+\.[0-9]+\.[0-9]+" -o) if [ "${STABLE}" == "${DEFAULT}" ]; then exit 0 else exit 1 fi + From 0b128edf8686e097fc110d2194e9824ac3b6ef48 Mon Sep 17 00:00:00 2001 From: Jeremiah Russell Date: Thu, 18 Nov 2021 14:26:29 +0000 Subject: [PATCH 081/111] refactor: :art: lints and remove lambci from testing - apply shellcheck lints to file - replace lambci with aws base image - build verify _packaged_application function in script - build a docker image using aws lambda provided:al2 as base - add program and input code as required - run container - send test event with curl - validate output --- tests/test.sh | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/tests/test.sh b/tests/test.sh index 0a2f1ba..ed7d7c6 100755 --- a/tests/test.sh +++ b/tests/test.sh @@ -3,7 +3,7 @@ # Directory of the integration test HERE="$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null 2>&1 && pwd )" # Root directory of the repository -DIST=$(cd "$HERE"/..; pwd) +# DIST=$(cd "$HERE"/..; pwd) : "${IMAGE:=rustserverless/lambda-rust}" source "${HERE}"/bashtest.sh @@ -68,7 +68,7 @@ package_all_dev_profile() { } for project in test-func test-multi-func test-func-with-hooks; do - cd "${HERE}"/"${project}" + cd "${HERE}"/"${project}" || exit 2 echo "👩‍🔬 Running tests for $project with image $IMAGE" if [[ "$project" == test-multi-func ]]; then @@ -76,7 +76,7 @@ for project in test-func test-multi-func test-func-with-hooks; do else bin_name=bootstrap fi - + echo "Bin name: ${bin_name} i am in ${PWD}" # package tests assert "it packages single bins" package_bin "${bin_name}" @@ -97,7 +97,7 @@ for project in test-func test-multi-func test-func-with-hooks; do -i -e DOCKER_LAMBDA_USE_STDIN=1 \ --rm \ -v /tmp/lambda:/var/task \ - lambci/lambda:provided.al2 < test-event.json | grep -v RequestId | grep -v '^\W*$' > test-out.log + public.ecr.aws/lambda/provided:al2 < test-event.json | grep -v RequestId | grep -v '^\W*$' > test-out.log assert "when invoked, it produces expected output" diff expected-output.json test-out.log done From b4d0712237df4db215d68ee78e6ad7a17b99577d Mon Sep 17 00:00:00 2001 From: Jeremiah Russell Date: Thu, 18 Nov 2021 14:31:11 +0000 Subject: [PATCH 082/111] refactor: :art: lints and replace lambci for tests refactor: :art: lints and remove lambci from testing - apply shellcheck lints to file - replace lambci with aws base image - build verify _packaged_application function in script - build a docker image using aws lambda provided:al2 as base - add program and input code as required - run container - send test event with curl - validate output --- tests/test.sh | 100 +++++++++++++++++++++++++++++++++++++------------- 1 file changed, 75 insertions(+), 25 deletions(-) diff --git a/tests/test.sh b/tests/test.sh index ed7d7c6..95bd9dc 100755 --- a/tests/test.sh +++ b/tests/test.sh @@ -2,8 +2,6 @@ # Directory of the integration test HERE="$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null 2>&1 && pwd )" -# Root directory of the repository -# DIST=$(cd "$HERE"/..; pwd) : "${IMAGE:=rustserverless/lambda-rust}" source "${HERE}"/bashtest.sh @@ -12,12 +10,12 @@ source "${HERE}"/bashtest.sh package_bin() { rm -rf target/lambda/release > /dev/null 2>&1 docker run --rm \ - -u $(id -u):$(id -g) \ + -u "$(id -u)":"$(id -g)" \ -e BIN="$1" \ -v "${PWD}":/code \ -v "${HOME}"/.cargo/registry:/cargo/registry \ -v "${HOME}"/.cargo/git:/cargo/git \ - ${IMAGE} && \ + "${IMAGE}" && \ ls target/lambda/release/"${1}".zip > /dev/null 2>&1 && ls target/lambda/release/output/"${1}"/bootstrap 2>&1 && ls target/lambda/release/output/"${1}"/bootstrap.debug 2>&1 @@ -27,11 +25,11 @@ package_bin() { package_all() { rm -rf target/lambda/release > /dev/null 2>&1 docker run --rm \ - -u $(id -u):$(id -g) \ + -u "$(id -u)":"$(id -g)" \ -v "${PWD}":/code \ -v "${HOME}"/.cargo/registry:/cargo/registry \ -v "${HOME}"/.cargo/git:/cargo/git \ - ${IMAGE} && \ + "${IMAGE}" && \ ls target/lambda/release/"${1}".zip > /dev/null 2>&1 && ls target/lambda/release/output/"${1}"/bootstrap 2>&1 && ls target/lambda/release/output/"${1}"/bootstrap.debug 2>&1 @@ -41,13 +39,13 @@ package_all() { compile_without_packaging() { rm -rf target/lambda/release > /dev/null 2>&1 docker run --rm \ - -u $(id -u):$(id -g) \ + -u "$(id -u)":"$(id -g)" \ -e PACKAGE=false \ -v "${PWD}":/code \ -v "${HOME}"/.cargo/registry:/cargo/registry \ -v "${HOME}"/.cargo/git:/cargo/git \ - ${IMAGE} && - !(ls target/lambda/release/"${1}".zip > /dev/null 2>&1) && + "${IMAGE}" && + ! (ls target/lambda/release/"${1}".zip > /dev/null 2>&1) && ls target/lambda/release/output/"${1}"/bootstrap 2>&1 && ls target/lambda/release/output/"${1}"/bootstrap.debug 2>&1 } @@ -56,17 +54,80 @@ compile_without_packaging() { package_all_dev_profile() { rm -rf target/lambda/debug > /dev/null 2>&1 docker run --rm \ - -u $(id -u):$(id -g) \ + -u "$(id -u)":"$(id -g)" \ -e PROFILE=dev \ -v "${PWD}":/code \ -v "${HOME}"/.cargo/registry:/cargo/registry \ -v "${HOME}"/.cargo/git:/cargo/git \ - ${IMAGE} && \ + "${IMAGE}" && \ ls target/lambda/debug/"${1}".zip > /dev/null 2>&1 && ls target/lambda/release/output/"${1}"/bootstrap 2>&1 && ls target/lambda/release/output/"${1}"/bootstrap.debug 2>&1 } +verify_packaged_application() { + LAMBDA_RUNTIME_DIR="/var/runtime" + LAMBDA_TASK_DIR="/var/task" + HOOKS="test-func-with-hooks" + TRY=1 + MAX_TRY=10 + TRIES_EXCEEDED=10 + SLEEP=1 + PACKAGE="${1}" + PROJECT="${2}" + TSFRACTION=$(date +%M%S) + + clean_up() { + docker container stop lamb > /dev/null 2>&1 + rm -f bootstrap > /dev/null 2>&1 + rm -f output.log > /dev/null 2>&1 + } + + clean_up + rm -f test-out.log > /dev/null 2>&1 + + unzip -o \ + target/lambda/release/"${PACKAGE}".zip + + if [ "$PROJECT" = "${HOOKS}" ]; then + docker build -t mylambda:"${TSFRACTION}" -f- . < /dev/null 2>&1 + docker run \ + --name lamb \ + --rm \ + -p 9000:8080 \ + -d mylambda:"${TSFRACTION}" + + until curl -X POST \ + -H "Content-Type: application/json" \ + -d "@test-event.json" \ + "http://localhost:9000/2015-03-31/functions/function/invocations" | \ + grep -v RequestId | \ + grep -v '^\W*$' > test-out.log; do + >&2 echo "waiting for service to spin up" + sleep ${SLEEP} + if [ ${TRY} = ${MAX_TRY} ]; then + exit ${TRIES_EXCEEDED} + else + TRY=$((TRY + 1)) + fi + done + + clean_up +} + for project in test-func test-multi-func test-func-with-hooks; do cd "${HERE}"/"${project}" || exit 2 echo "👩‍🔬 Running tests for $project with image $IMAGE" @@ -76,7 +137,7 @@ for project in test-func test-multi-func test-func-with-hooks; do else bin_name=bootstrap fi - echo "Bin name: ${bin_name} i am in ${PWD}" + # package tests assert "it packages single bins" package_bin "${bin_name}" @@ -86,19 +147,8 @@ for project in test-func test-multi-func test-func-with-hooks; do assert "it packages all bins" package_all "${bin_name}" - # verify packaged artifact by invoking it using the lambdaci "provided.al2" docker image - rm -f output.log > /dev/null 2>&1 - rm -f test-out.log > /dev/null 2>&1 - rm -rf /tmp/lambda > /dev/null 2>&1 - unzip -o \ - target/lambda/release/"${bin_name}".zip \ - -d /tmp/lambda > /dev/null 2>&1 && \ - docker run \ - -i -e DOCKER_LAMBDA_USE_STDIN=1 \ - --rm \ - -v /tmp/lambda:/var/task \ - public.ecr.aws/lambda/provided:al2 < test-event.json | grep -v RequestId | grep -v '^\W*$' > test-out.log - + # verify packaged artifact by invoking it using the aws lambda "provided.al2" docker image + verify_packaged_application "${bin_name}" "${project}" assert "when invoked, it produces expected output" diff expected-output.json test-out.log done From 12efb4990ee842a49fc575d05a48890faf664703 Mon Sep 17 00:00:00 2001 From: Jeremiah Russell Date: Thu, 18 Nov 2021 17:55:02 +0000 Subject: [PATCH 083/111] refactor: :art: Markdown linting & testing instructions - apply markdown lints (except $ in some code fences - proivde testing instructions - based on building container from AWS Lambda environment - Providing test environment for 1 or more tests - Test eventss dispatched with curl - Remove AWS CLI example --- README.md | 82 ++++++++++++++++++++----------------------------------- 1 file changed, 30 insertions(+), 52 deletions(-) diff --git a/README.md b/README.md index e6964ab..262f394 100644 --- a/README.md +++ b/README.md @@ -1,9 +1,8 @@ # AWS Lambda [Rust](https://www.rust-lang.org/) docker builder 🐑 🦀 🐳 [![Build Status](https://github.com/rust-serverless/lambda-rust/workflows/Main/badge.svg)](https://github.com/rust-serverless/lambda-rust/actions) - ## 🤔 about -This docker image extends AWS Lambda `provided.al2 runtime environment, and installs [rustup](https://rustup.rs/) and the *stable* rust toolchain. +This docker image extends AWS Lambda `provided.al2` runtime environment, and installs [rustup](https://rustup.rs/) and the *stable* rust toolchain. This provides a build environment, consistent with your target execution environment for predictable results. @@ -24,7 +23,7 @@ The default docker entrypoint will build a packaged release optimized version of isolate the lambda specific build artifacts from your host-local build artifacts. > **⚠️ Note:** you can switch from the `release` profile to a custom profile like `dev` by providing a `PROFILE` environment variable set to the name of the desired profile. i.e. `-e PROFILE=dev` in your docker run - +> > **⚠️ Note:** you can include debug symbols in optimized release build binaries by setting `DEBUGINFO`. By default, debug symbols will be stripped from the release binary and set aside in a separate .debug file. You will want to volume mount `/code` to the directory containing your cargo project. @@ -40,15 +39,16 @@ A typical docker run might look like the following. ```sh $ docker run --rm \ - -u $(id -u):$(id -g) \ + -u "$(id -u)":"$(id -g)" \ -v ${PWD}:/code \ -v ${HOME}/.cargo/registry:/cargo/registry \ -v ${HOME}/.cargo/git:/cargo/git \ rustserverless/lambda-rust ``` + > 💡 The -v (volume mount) flags for `/cargo/{registry,git}` are optional but when supplied, provides a much faster turn around when doing iterative development -Note that `-u $(id -u):$(id -g)` argument is crucial for the container to produce artifacts +Note that `-u "$(id -u)":$(id -g)` argument is crucial for the container to produce artifacts owned by the current host user, otherwise you won't be able to `rm -rf target/lambda` or run `cargo update`, because the container will write artifacts owned by `root` docker user to `target/lambda` and `./cargo/{registry,git}` dirs which will break your dev and/or ci environment. @@ -86,8 +86,9 @@ $ docker run --rm \ ## ⚓ using hooks -If you want to customize certain parts of the build process, you can leverage hooks that this image provides. -Hooks are just shell scripts that are invoked in a specific order, so you can customize the process as you wish. The following hooks exist: +You can leverage hooks provided in the image to customize certain parts of the build process. +Hooks are shell scripts that are invoked if they exist, so you can customize the process. The following hooks exist: + * `install`: run before `cargo build` - useful for installing native dependencies on the lambda environment * `build`: run after `cargo build`, but before packaging the executable into a zip - useful when modifying the executable after compilation * `package`: run after packaging the executable into a zip - useful for adding extra files into the zip file @@ -121,56 +122,33 @@ docker run \ -v ${HOME}/.cargo/git:/cargo/git \ rustserverless/lambda-rust -# start a one-off docker container replicating the "provided.al2" lambda runtime -# awaiting an event to be provided via stdin -$ docker run \ - -i -e DOCKER_LAMBDA_USE_STDIN=1 \ - --rm \ - -v ${PWD}/target/lambda/release/output/{your-binary-name}:/var/task:ro,delegated \ - public.ecr.aws/lambda/provided:al2 - -# provide an event payload via stdin (typically a json blob) +# Build a container with your binary as the runtime -# Ctrl-D to yield control back to your function -``` +$ docker build -t mylambda -f- . < Date: Fri, 19 Nov 2021 15:54:32 +0000 Subject: [PATCH 084/111] refactor: :art: Update test-func code - update edition to 2021 - update lambda_runtime to latest version --- tests/test-func/Cargo.lock | 992 +++++++++++-------------------------- tests/test-func/Cargo.toml | 4 +- 2 files changed, 283 insertions(+), 713 deletions(-) diff --git a/tests/test-func/Cargo.lock b/tests/test-func/Cargo.lock index cd3fd5a..e2bf317 100644 --- a/tests/test-func/Cargo.lock +++ b/tests/test-func/Cargo.lock @@ -1,1019 +1,589 @@ # This file is automatically @generated by Cargo. # It is not intended for manual editing. -[[package]] -name = "autocfg" -version = "0.1.7" -source = "registry+https://github.com/rust-lang/crates.io-index" +version = 3 [[package]] -name = "backtrace" -version = "0.3.40" +name = "async-stream" +version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "171374e7e3b2504e0e5236e3b59260560f9fe94bfe9ac39ba5e4e929c5590625" dependencies = [ - "backtrace-sys 0.1.32 (registry+https://github.com/rust-lang/crates.io-index)", - "cfg-if 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)", - "libc 0.2.66 (registry+https://github.com/rust-lang/crates.io-index)", - "rustc-demangle 0.1.16 (registry+https://github.com/rust-lang/crates.io-index)", + "async-stream-impl", + "futures-core", ] [[package]] -name = "backtrace-sys" -version = "0.1.32" +name = "async-stream-impl" +version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "648ed8c8d2ce5409ccd57453d9d1b214b342a0d69376a6feda1fd6cae3299308" dependencies = [ - "cc 1.0.48 (registry+https://github.com/rust-lang/crates.io-index)", - "libc 0.2.66 (registry+https://github.com/rust-lang/crates.io-index)", + "proc-macro2", + "quote", + "syn", ] [[package]] -name = "bitflags" -version = "1.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" - -[[package]] -name = "byteorder" -version = "1.3.2" +name = "autocfg" +version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cdb031dd78e28731d87d56cc8ffef4a8f36ca26c38fe2de700543e627f8a464a" [[package]] name = "bytes" -version = "0.4.12" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "byteorder 1.3.2 (registry+https://github.com/rust-lang/crates.io-index)", - "either 1.5.3 (registry+https://github.com/rust-lang/crates.io-index)", - "iovec 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "cc" -version = "1.0.48" +version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c4872d67bab6358e59559027aa3b9157c53d9358c51423c17554809a8858e0f8" [[package]] name = "cfg-if" version = "0.1.10" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4785bdd1c96b2a846b2bd7cc02e86b6b3dbf14e7e53446c4f54c92a361040822" [[package]] -name = "chrono" -version = "0.4.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "num-integer 0.1.41 (registry+https://github.com/rust-lang/crates.io-index)", - "num-traits 0.2.10 (registry+https://github.com/rust-lang/crates.io-index)", - "time 0.1.42 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "cloudabi" -version = "0.0.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "bitflags 1.2.1 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "crossbeam-deque" -version = "0.7.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "crossbeam-epoch 0.8.0 (registry+https://github.com/rust-lang/crates.io-index)", - "crossbeam-utils 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "crossbeam-epoch" -version = "0.8.0" +name = "cfg-if" +version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "autocfg 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)", - "cfg-if 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)", - "crossbeam-utils 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)", - "lazy_static 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)", - "memoffset 0.5.3 (registry+https://github.com/rust-lang/crates.io-index)", - "scopeguard 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)", -] +checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" [[package]] -name = "crossbeam-queue" -version = "0.1.2" +name = "fnv" +version = "1.0.6" source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "crossbeam-utils 0.6.6 (registry+https://github.com/rust-lang/crates.io-index)", -] +checksum = "2fad85553e09a6f881f739c29f0b00b0f01357c743266d478b68951ce23285f3" [[package]] -name = "crossbeam-utils" -version = "0.6.6" +name = "futures" +version = "0.3.17" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a12aa0eb539080d55c3f2d45a67c3b58b6b0773c1a3ca2dfec66d58c97fd66ca" dependencies = [ - "cfg-if 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)", - "lazy_static 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)", + "futures-channel", + "futures-core", + "futures-executor", + "futures-io", + "futures-sink", + "futures-task", + "futures-util", ] [[package]] -name = "crossbeam-utils" -version = "0.7.0" +name = "futures-channel" +version = "0.3.17" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5da6ba8c3bb3c165d3c7319fc1cc8304facf1fb8db99c5de877183c08a273888" dependencies = [ - "autocfg 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)", - "cfg-if 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)", - "lazy_static 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)", + "futures-core", + "futures-sink", ] [[package]] -name = "either" -version = "1.5.3" +name = "futures-core" +version = "0.3.17" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "88d1c26957f23603395cd326b0ffe64124b818f4449552f960d815cfba83a53d" [[package]] -name = "failure" -version = "0.1.6" +name = "futures-executor" +version = "0.3.17" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "45025be030969d763025784f7f355043dc6bc74093e4ecc5000ca4dc50d8745c" dependencies = [ - "backtrace 0.3.40 (registry+https://github.com/rust-lang/crates.io-index)", - "failure_derive 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)", + "futures-core", + "futures-task", + "futures-util", ] [[package]] -name = "failure_derive" -version = "0.1.6" +name = "futures-io" +version = "0.3.17" source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "proc-macro2 1.0.6 (registry+https://github.com/rust-lang/crates.io-index)", - "quote 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)", - "syn 1.0.11 (registry+https://github.com/rust-lang/crates.io-index)", - "synstructure 0.12.3 (registry+https://github.com/rust-lang/crates.io-index)", -] +checksum = "522de2a0fe3e380f1bc577ba0474108faf3f6b18321dbf60b3b9c39a75073377" [[package]] -name = "fnv" -version = "1.0.6" -source = "registry+https://github.com/rust-lang/crates.io-index" - -[[package]] -name = "fuchsia-zircon" -version = "0.3.3" +name = "futures-macro" +version = "0.3.17" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "18e4a4b95cea4b4ccbcf1c5675ca7c4ee4e9e75eb79944d07defde18068f79bb" dependencies = [ - "bitflags 1.2.1 (registry+https://github.com/rust-lang/crates.io-index)", - "fuchsia-zircon-sys 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)", + "autocfg", + "proc-macro-hack", + "proc-macro2", + "quote", + "syn", ] [[package]] -name = "fuchsia-zircon-sys" -version = "0.3.3" -source = "registry+https://github.com/rust-lang/crates.io-index" - -[[package]] -name = "futures" -version = "0.1.29" +name = "futures-sink" +version = "0.3.17" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "36ea153c13024fe480590b3e3d4cad89a0cfacecc24577b68f86c6ced9c2bc11" [[package]] -name = "futures-cpupool" -version = "0.1.8" +name = "futures-task" +version = "0.3.17" source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "futures 0.1.29 (registry+https://github.com/rust-lang/crates.io-index)", - "num_cpus 1.11.1 (registry+https://github.com/rust-lang/crates.io-index)", -] +checksum = "1d3d00f4eddb73e498a54394f228cd55853bdf059259e8e7bc6e69d408892e99" [[package]] -name = "h2" -version = "0.1.26" +name = "futures-util" +version = "0.3.17" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "36568465210a3a6ee45e1f165136d68671471a501e632e9a98d96872222b5481" dependencies = [ - "byteorder 1.3.2 (registry+https://github.com/rust-lang/crates.io-index)", - "bytes 0.4.12 (registry+https://github.com/rust-lang/crates.io-index)", - "fnv 1.0.6 (registry+https://github.com/rust-lang/crates.io-index)", - "futures 0.1.29 (registry+https://github.com/rust-lang/crates.io-index)", - "http 0.1.21 (registry+https://github.com/rust-lang/crates.io-index)", - "indexmap 1.3.0 (registry+https://github.com/rust-lang/crates.io-index)", - "log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)", - "slab 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)", - "string 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio-io 0.1.12 (registry+https://github.com/rust-lang/crates.io-index)", + "autocfg", + "futures-channel", + "futures-core", + "futures-io", + "futures-macro", + "futures-sink", + "futures-task", + "memchr", + "pin-project-lite", + "pin-utils", + "proc-macro-hack", + "proc-macro-nested", + "slab", ] [[package]] name = "hermit-abi" version = "0.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f629dc602392d3ec14bfc8a09b5e644d7ffd725102b48b81e59f90f2633621d7" dependencies = [ - "libc 0.2.66 (registry+https://github.com/rust-lang/crates.io-index)", + "libc", ] [[package]] name = "http" -version = "0.1.21" +version = "0.2.5" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1323096b05d41827dadeaee54c9981958c0f94e670bc94ed80037d1a7b8b186b" dependencies = [ - "bytes 0.4.12 (registry+https://github.com/rust-lang/crates.io-index)", - "fnv 1.0.6 (registry+https://github.com/rust-lang/crates.io-index)", - "itoa 0.4.4 (registry+https://github.com/rust-lang/crates.io-index)", + "bytes", + "fnv", + "itoa", ] [[package]] name = "http-body" -version = "0.1.0" +version = "0.4.4" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1ff4f84919677303da5f147645dbea6b1881f368d03ac84e1dc09031ebd7b2c6" dependencies = [ - "bytes 0.4.12 (registry+https://github.com/rust-lang/crates.io-index)", - "futures 0.1.29 (registry+https://github.com/rust-lang/crates.io-index)", - "http 0.1.21 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio-buf 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", + "bytes", + "http", + "pin-project-lite", ] [[package]] name = "httparse" -version = "1.3.4" +version = "1.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "acd94fdbe1d4ff688b67b04eee2e17bd50995534a61539e45adfefb45e5e5503" [[package]] -name = "hyper" -version = "0.12.35" +name = "httpdate" +version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "bytes 0.4.12 (registry+https://github.com/rust-lang/crates.io-index)", - "futures 0.1.29 (registry+https://github.com/rust-lang/crates.io-index)", - "futures-cpupool 0.1.8 (registry+https://github.com/rust-lang/crates.io-index)", - "h2 0.1.26 (registry+https://github.com/rust-lang/crates.io-index)", - "http 0.1.21 (registry+https://github.com/rust-lang/crates.io-index)", - "http-body 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", - "httparse 1.3.4 (registry+https://github.com/rust-lang/crates.io-index)", - "iovec 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)", - "itoa 0.4.4 (registry+https://github.com/rust-lang/crates.io-index)", - "log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)", - "net2 0.2.33 (registry+https://github.com/rust-lang/crates.io-index)", - "rustc_version 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)", - "time 0.1.42 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio 0.1.22 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio-buf 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio-executor 0.1.9 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio-io 0.1.12 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio-reactor 0.1.11 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio-tcp 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio-threadpool 0.1.17 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio-timer 0.2.12 (registry+https://github.com/rust-lang/crates.io-index)", - "want 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)", -] +checksum = "c4a1e36c821dbe04574f602848a19f742f4fb3c98d40449f11bcad18d6b17421" [[package]] -name = "indexmap" -version = "1.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "autocfg 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "iovec" -version = "0.1.4" +name = "hyper" +version = "0.14.15" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "436ec0091e4f20e655156a30a0df3770fe2900aa301e548e08446ec794b6953c" dependencies = [ - "libc 0.2.66 (registry+https://github.com/rust-lang/crates.io-index)", + "bytes", + "futures-channel", + "futures-core", + "futures-util", + "http", + "http-body", + "httparse", + "httpdate", + "itoa", + "pin-project-lite", + "socket2", + "tokio", + "tower-service", + "tracing", + "want", ] [[package]] name = "itoa" version = "0.4.4" source = "registry+https://github.com/rust-lang/crates.io-index" - -[[package]] -name = "kernel32-sys" -version = "0.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)", - "winapi-build 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", -] +checksum = "501266b7edd0174f8530248f87f99c88fbe60ca4ef3dd486835b8d8d53136f7f" [[package]] name = "lambda_runtime" -version = "0.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "failure 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)", - "lambda_runtime_core 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", - "log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)", - "serde 1.0.104 (registry+https://github.com/rust-lang/crates.io-index)", - "serde_derive 1.0.104 (registry+https://github.com/rust-lang/crates.io-index)", - "serde_json 1.0.44 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio 0.1.22 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "lambda_runtime_client" -version = "0.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "failure 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)", - "http 0.1.21 (registry+https://github.com/rust-lang/crates.io-index)", - "hyper 0.12.35 (registry+https://github.com/rust-lang/crates.io-index)", - "lambda_runtime_errors 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", - "log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)", - "serde 1.0.104 (registry+https://github.com/rust-lang/crates.io-index)", - "serde_derive 1.0.104 (registry+https://github.com/rust-lang/crates.io-index)", - "serde_json 1.0.44 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio 0.1.22 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "lambda_runtime_core" -version = "0.1.2" +version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "17ed88d8421123f9546cbd0c4235386803859c4a20b80a6eb613a652b486df8e" dependencies = [ - "backtrace 0.3.40 (registry+https://github.com/rust-lang/crates.io-index)", - "chrono 0.4.10 (registry+https://github.com/rust-lang/crates.io-index)", - "failure 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)", - "hyper 0.12.35 (registry+https://github.com/rust-lang/crates.io-index)", - "lambda_runtime_client 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)", - "lambda_runtime_errors 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", - "log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)", - "rustc_version 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio 0.1.22 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "lambda_runtime_errors" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "failure 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)", - "lambda_runtime_errors_derive 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", - "log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)", - "serde_json 1.0.44 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "lambda_runtime_errors_derive" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "proc-macro2 0.4.30 (registry+https://github.com/rust-lang/crates.io-index)", - "quote 0.6.13 (registry+https://github.com/rust-lang/crates.io-index)", - "syn 0.15.44 (registry+https://github.com/rust-lang/crates.io-index)", - "synstructure 0.10.2 (registry+https://github.com/rust-lang/crates.io-index)", + "async-stream", + "bytes", + "futures", + "http", + "hyper", + "serde", + "serde_json", + "tokio", + "tokio-stream", + "tower-service", + "tracing", + "tracing-error", ] [[package]] name = "lazy_static" version = "1.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646" [[package]] name = "libc" -version = "0.2.66" +version = "0.2.107" source = "registry+https://github.com/rust-lang/crates.io-index" - -[[package]] -name = "lock_api" -version = "0.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "scopeguard 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)", -] +checksum = "fbe5e23404da5b4f555ef85ebed98fb4083e55a00c317800bc2a50ede9f3d219" [[package]] name = "log" version = "0.4.8" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "14b6052be84e6b71ab17edffc2eeabf5c2c3ae1fdb464aae35ac50c67a44e1f7" dependencies = [ - "cfg-if 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)", + "cfg-if 0.1.10", ] [[package]] -name = "maybe-uninit" -version = "2.0.0" +name = "memchr" +version = "2.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" - -[[package]] -name = "memoffset" -version = "0.5.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "rustc_version 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)", -] +checksum = "308cc39be01b73d0d18f82a0e7b2a3df85245f84af96fdddc5d202d27e47b86a" [[package]] name = "mio" -version = "0.6.21" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "cfg-if 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)", - "fuchsia-zircon 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)", - "fuchsia-zircon-sys 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)", - "iovec 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)", - "kernel32-sys 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)", - "libc 0.2.66 (registry+https://github.com/rust-lang/crates.io-index)", - "log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)", - "miow 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)", - "net2 0.2.33 (registry+https://github.com/rust-lang/crates.io-index)", - "slab 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)", - "winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "mio-uds" -version = "0.6.7" +version = "0.7.14" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8067b404fe97c70829f082dec8bcf4f71225d7eaea1d8645349cb76fa06205cc" dependencies = [ - "iovec 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)", - "libc 0.2.66 (registry+https://github.com/rust-lang/crates.io-index)", - "mio 0.6.21 (registry+https://github.com/rust-lang/crates.io-index)", + "libc", + "log", + "miow", + "ntapi", + "winapi", ] [[package]] name = "miow" -version = "0.2.1" +version = "0.3.7" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b9f1c5b025cda876f66ef43a113f91ebc9f4ccef34843000e0adf6ebbab84e21" dependencies = [ - "kernel32-sys 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)", - "net2 0.2.33 (registry+https://github.com/rust-lang/crates.io-index)", - "winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)", - "ws2_32-sys 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)", + "winapi", ] [[package]] -name = "net2" -version = "0.2.33" +name = "ntapi" +version = "0.3.6" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3f6bb902e437b6d86e03cce10a7e2af662292c5dfef23b65899ea3ac9354ad44" dependencies = [ - "cfg-if 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)", - "libc 0.2.66 (registry+https://github.com/rust-lang/crates.io-index)", - "winapi 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)", + "winapi", ] [[package]] -name = "num-integer" -version = "0.1.41" +name = "num_cpus" +version = "1.11.1" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "76dac5ed2a876980778b8b85f75a71b6cbf0db0b1232ee12f826bccb00d09d72" dependencies = [ - "autocfg 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)", - "num-traits 0.2.10 (registry+https://github.com/rust-lang/crates.io-index)", + "hermit-abi", + "libc", ] [[package]] -name = "num-traits" -version = "0.2.10" +name = "once_cell" +version = "1.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "autocfg 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)", -] +checksum = "692fcb63b64b1758029e0a96ee63e049ce8c5948587f2f7208df04625e5f6b56" [[package]] -name = "num_cpus" -version = "1.11.1" +name = "pin-project-lite" +version = "0.2.7" source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "hermit-abi 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)", - "libc 0.2.66 (registry+https://github.com/rust-lang/crates.io-index)", -] +checksum = "8d31d11c69a6b52a174b42bdc0c30e5e11670f90788b2c471c31c1d17d449443" [[package]] -name = "parking_lot" -version = "0.9.0" +name = "pin-utils" +version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "lock_api 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)", - "parking_lot_core 0.6.2 (registry+https://github.com/rust-lang/crates.io-index)", - "rustc_version 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)", -] +checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" [[package]] -name = "parking_lot_core" -version = "0.6.2" +name = "proc-macro-hack" +version = "0.5.19" source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "cfg-if 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)", - "cloudabi 0.0.3 (registry+https://github.com/rust-lang/crates.io-index)", - "libc 0.2.66 (registry+https://github.com/rust-lang/crates.io-index)", - "redox_syscall 0.1.56 (registry+https://github.com/rust-lang/crates.io-index)", - "rustc_version 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)", - "smallvec 0.6.13 (registry+https://github.com/rust-lang/crates.io-index)", - "winapi 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)", -] +checksum = "dbf0c48bc1d91375ae5c3cd81e3722dff1abcf81a30960240640d223f59fe0e5" [[package]] -name = "proc-macro2" -version = "0.4.30" +name = "proc-macro-nested" +version = "0.1.7" source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "unicode-xid 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", -] +checksum = "bc881b2c22681370c6a780e47af9840ef841837bc98118431d4e1868bd0c1086" [[package]] name = "proc-macro2" -version = "1.0.6" +version = "1.0.32" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ba508cc11742c0dc5c1659771673afbab7a0efab23aa17e854cbab0837ed0b43" dependencies = [ - "unicode-xid 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "quote" -version = "0.6.13" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "proc-macro2 0.4.30 (registry+https://github.com/rust-lang/crates.io-index)", + "unicode-xid", ] [[package]] name = "quote" version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "053a8c8bcc71fcce321828dc897a98ab9760bef03a4fc36693c231e5b3216cfe" dependencies = [ - "proc-macro2 1.0.6 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "redox_syscall" -version = "0.1.56" -source = "registry+https://github.com/rust-lang/crates.io-index" - -[[package]] -name = "rustc-demangle" -version = "0.1.16" -source = "registry+https://github.com/rust-lang/crates.io-index" - -[[package]] -name = "rustc_version" -version = "0.2.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "semver 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)", + "proc-macro2", ] [[package]] name = "ryu" version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" - -[[package]] -name = "scopeguard" -version = "1.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" - -[[package]] -name = "semver" -version = "0.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "semver-parser 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "semver-parser" -version = "0.7.0" -source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bfa8506c1de11c9c4e4c38863ccbe02a305c8188e85a05a784c9e11e1c3910c8" [[package]] name = "serde" version = "1.0.104" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "414115f25f818d7dfccec8ee535d76949ae78584fc4f79a6f45a904bf8ab4449" +dependencies = [ + "serde_derive", +] [[package]] name = "serde_derive" version = "1.0.104" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "128f9e303a5a29922045a830221b8f78ec74a5f544944f3d5984f8ec3895ef64" dependencies = [ - "proc-macro2 1.0.6 (registry+https://github.com/rust-lang/crates.io-index)", - "quote 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)", - "syn 1.0.11 (registry+https://github.com/rust-lang/crates.io-index)", + "proc-macro2", + "quote", + "syn", ] [[package]] name = "serde_json" version = "1.0.44" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "48c575e0cc52bdd09b47f330f646cf59afc586e9c4e3ccd6fc1f625b8ea1dad7" dependencies = [ - "itoa 0.4.4 (registry+https://github.com/rust-lang/crates.io-index)", - "ryu 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)", - "serde 1.0.104 (registry+https://github.com/rust-lang/crates.io-index)", + "itoa", + "ryu", + "serde", ] [[package]] -name = "slab" -version = "0.4.2" -source = "registry+https://github.com/rust-lang/crates.io-index" - -[[package]] -name = "smallvec" -version = "0.6.13" +name = "sharded-slab" +version = "0.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "900fba806f70c630b0a382d0d825e17a0f19fcd059a2ade1ff237bcddf446b31" dependencies = [ - "maybe-uninit 2.0.0 (registry+https://github.com/rust-lang/crates.io-index)", + "lazy_static", ] [[package]] -name = "string" -version = "0.2.1" +name = "slab" +version = "0.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "bytes 0.4.12 (registry+https://github.com/rust-lang/crates.io-index)", -] +checksum = "c111b5bd5695e56cffe5129854aa230b39c93a305372fdbb2668ca2394eea9f8" [[package]] -name = "syn" -version = "0.15.44" +name = "socket2" +version = "0.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5dc90fe6c7be1a323296982db1836d1ea9e47b6839496dde9a541bc496df3516" dependencies = [ - "proc-macro2 0.4.30 (registry+https://github.com/rust-lang/crates.io-index)", - "quote 0.6.13 (registry+https://github.com/rust-lang/crates.io-index)", - "unicode-xid 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", + "libc", + "winapi", ] [[package]] name = "syn" -version = "1.0.11" +version = "1.0.81" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f2afee18b8beb5a596ecb4a2dce128c719b4ba399d34126b9e4396e3f9860966" dependencies = [ - "proc-macro2 1.0.6 (registry+https://github.com/rust-lang/crates.io-index)", - "quote 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)", - "unicode-xid 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "synstructure" -version = "0.10.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "proc-macro2 0.4.30 (registry+https://github.com/rust-lang/crates.io-index)", - "quote 0.6.13 (registry+https://github.com/rust-lang/crates.io-index)", - "syn 0.15.44 (registry+https://github.com/rust-lang/crates.io-index)", - "unicode-xid 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "synstructure" -version = "0.12.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "proc-macro2 1.0.6 (registry+https://github.com/rust-lang/crates.io-index)", - "quote 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)", - "syn 1.0.11 (registry+https://github.com/rust-lang/crates.io-index)", - "unicode-xid 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)", + "proc-macro2", + "quote", + "unicode-xid", ] [[package]] name = "test-func" version = "0.1.0" dependencies = [ - "lambda_runtime 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)", - "serde_json 1.0.44 (registry+https://github.com/rust-lang/crates.io-index)", + "lambda_runtime", + "serde_json", ] [[package]] -name = "time" -version = "0.1.42" +name = "thread_local" +version = "1.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8018d24e04c95ac8790716a5987d0fec4f8b27249ffa0f7d33f1369bdfb88cbd" dependencies = [ - "libc 0.2.66 (registry+https://github.com/rust-lang/crates.io-index)", - "redox_syscall 0.1.56 (registry+https://github.com/rust-lang/crates.io-index)", - "winapi 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)", + "once_cell", ] [[package]] name = "tokio" -version = "0.1.22" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "bytes 0.4.12 (registry+https://github.com/rust-lang/crates.io-index)", - "futures 0.1.29 (registry+https://github.com/rust-lang/crates.io-index)", - "mio 0.6.21 (registry+https://github.com/rust-lang/crates.io-index)", - "num_cpus 1.11.1 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio-codec 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio-current-thread 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio-executor 0.1.9 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio-fs 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio-io 0.1.12 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio-reactor 0.1.11 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio-sync 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio-tcp 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio-threadpool 0.1.17 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio-timer 0.2.12 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio-udp 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio-uds 0.2.5 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "tokio-buf" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "bytes 0.4.12 (registry+https://github.com/rust-lang/crates.io-index)", - "either 1.5.3 (registry+https://github.com/rust-lang/crates.io-index)", - "futures 0.1.29 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "tokio-codec" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "bytes 0.4.12 (registry+https://github.com/rust-lang/crates.io-index)", - "futures 0.1.29 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio-io 0.1.12 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "tokio-current-thread" -version = "0.1.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "futures 0.1.29 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio-executor 0.1.9 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "tokio-executor" -version = "0.1.9" +version = "1.14.0" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "70e992e41e0d2fb9f755b37446f20900f64446ef54874f40a60c78f021ac6144" dependencies = [ - "crossbeam-utils 0.6.6 (registry+https://github.com/rust-lang/crates.io-index)", - "futures 0.1.29 (registry+https://github.com/rust-lang/crates.io-index)", + "autocfg", + "bytes", + "libc", + "memchr", + "mio", + "num_cpus", + "pin-project-lite", + "tokio-macros", + "winapi", ] [[package]] -name = "tokio-fs" -version = "0.1.6" +name = "tokio-macros" +version = "1.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c9efc1aba077437943f7515666aa2b882dfabfbfdf89c819ea75a8d6e9eaba5e" dependencies = [ - "futures 0.1.29 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio-io 0.1.12 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio-threadpool 0.1.17 (registry+https://github.com/rust-lang/crates.io-index)", + "proc-macro2", + "quote", + "syn", ] [[package]] -name = "tokio-io" -version = "0.1.12" +name = "tokio-stream" +version = "0.1.8" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "50145484efff8818b5ccd256697f36863f587da82cf8b409c53adf1e840798e3" dependencies = [ - "bytes 0.4.12 (registry+https://github.com/rust-lang/crates.io-index)", - "futures 0.1.29 (registry+https://github.com/rust-lang/crates.io-index)", - "log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)", + "futures-core", + "pin-project-lite", + "tokio", ] [[package]] -name = "tokio-reactor" -version = "0.1.11" +name = "tower-service" +version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "crossbeam-utils 0.6.6 (registry+https://github.com/rust-lang/crates.io-index)", - "futures 0.1.29 (registry+https://github.com/rust-lang/crates.io-index)", - "lazy_static 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)", - "log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)", - "mio 0.6.21 (registry+https://github.com/rust-lang/crates.io-index)", - "num_cpus 1.11.1 (registry+https://github.com/rust-lang/crates.io-index)", - "parking_lot 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)", - "slab 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio-executor 0.1.9 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio-io 0.1.12 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio-sync 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)", -] +checksum = "360dfd1d6d30e05fda32ace2c8c70e9c0a9da713275777f5a4dbb8a1893930c6" [[package]] -name = "tokio-sync" -version = "0.1.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "fnv 1.0.6 (registry+https://github.com/rust-lang/crates.io-index)", - "futures 0.1.29 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "tokio-tcp" -version = "0.1.3" +name = "tracing" +version = "0.1.29" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "375a639232caf30edfc78e8d89b2d4c375515393e7af7e16f01cd96917fb2105" dependencies = [ - "bytes 0.4.12 (registry+https://github.com/rust-lang/crates.io-index)", - "futures 0.1.29 (registry+https://github.com/rust-lang/crates.io-index)", - "iovec 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)", - "mio 0.6.21 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio-io 0.1.12 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio-reactor 0.1.11 (registry+https://github.com/rust-lang/crates.io-index)", + "cfg-if 1.0.0", + "log", + "pin-project-lite", + "tracing-attributes", + "tracing-core", ] [[package]] -name = "tokio-threadpool" -version = "0.1.17" +name = "tracing-attributes" +version = "0.1.18" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f4f480b8f81512e825f337ad51e94c1eb5d3bbdf2b363dcd01e2b19a9ffe3f8e" dependencies = [ - "crossbeam-deque 0.7.2 (registry+https://github.com/rust-lang/crates.io-index)", - "crossbeam-queue 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", - "crossbeam-utils 0.6.6 (registry+https://github.com/rust-lang/crates.io-index)", - "futures 0.1.29 (registry+https://github.com/rust-lang/crates.io-index)", - "lazy_static 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)", - "log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)", - "num_cpus 1.11.1 (registry+https://github.com/rust-lang/crates.io-index)", - "slab 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio-executor 0.1.9 (registry+https://github.com/rust-lang/crates.io-index)", + "proc-macro2", + "quote", + "syn", ] [[package]] -name = "tokio-timer" -version = "0.2.12" +name = "tracing-core" +version = "0.1.21" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1f4ed65637b8390770814083d20756f87bfa2c21bf2f110babdc5438351746e4" dependencies = [ - "crossbeam-utils 0.6.6 (registry+https://github.com/rust-lang/crates.io-index)", - "futures 0.1.29 (registry+https://github.com/rust-lang/crates.io-index)", - "slab 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio-executor 0.1.9 (registry+https://github.com/rust-lang/crates.io-index)", + "lazy_static", ] [[package]] -name = "tokio-udp" -version = "0.1.5" +name = "tracing-error" +version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b4d7c0b83d4a500748fa5879461652b361edf5c9d51ede2a2ac03875ca185e24" dependencies = [ - "bytes 0.4.12 (registry+https://github.com/rust-lang/crates.io-index)", - "futures 0.1.29 (registry+https://github.com/rust-lang/crates.io-index)", - "log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)", - "mio 0.6.21 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio-codec 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio-io 0.1.12 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio-reactor 0.1.11 (registry+https://github.com/rust-lang/crates.io-index)", + "tracing", + "tracing-subscriber", ] [[package]] -name = "tokio-uds" -version = "0.2.5" +name = "tracing-subscriber" +version = "0.2.25" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0e0d2eaa99c3c2e41547cfa109e910a68ea03823cccad4a0525dcbc9b01e8c71" dependencies = [ - "bytes 0.4.12 (registry+https://github.com/rust-lang/crates.io-index)", - "futures 0.1.29 (registry+https://github.com/rust-lang/crates.io-index)", - "iovec 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)", - "libc 0.2.66 (registry+https://github.com/rust-lang/crates.io-index)", - "log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)", - "mio 0.6.21 (registry+https://github.com/rust-lang/crates.io-index)", - "mio-uds 0.6.7 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio-codec 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio-io 0.1.12 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio-reactor 0.1.11 (registry+https://github.com/rust-lang/crates.io-index)", + "sharded-slab", + "thread_local", + "tracing-core", ] [[package]] name = "try-lock" version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" - -[[package]] -name = "unicode-xid" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e604eb7b43c06650e854be16a2a03155743d3752dd1c943f6829e26b7a36e382" [[package]] name = "unicode-xid" version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "826e7639553986605ec5979c7dd957c7895e93eabed50ab2ffa7f6128a75097c" [[package]] name = "want" -version = "0.2.0" +version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1ce8a968cb1cd110d136ff8b819a556d6fb6d919363c61534f6860c7eb172ba0" dependencies = [ - "futures 0.1.29 (registry+https://github.com/rust-lang/crates.io-index)", - "log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)", - "try-lock 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)", + "log", + "try-lock", ] [[package]] name = "winapi" -version = "0.2.8" -source = "registry+https://github.com/rust-lang/crates.io-index" - -[[package]] -name = "winapi" -version = "0.3.8" +version = "0.3.9" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419" dependencies = [ - "winapi-i686-pc-windows-gnu 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)", - "winapi-x86_64-pc-windows-gnu 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)", + "winapi-i686-pc-windows-gnu", + "winapi-x86_64-pc-windows-gnu", ] -[[package]] -name = "winapi-build" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" - [[package]] name = "winapi-i686-pc-windows-gnu" version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" [[package]] name = "winapi-x86_64-pc-windows-gnu" version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" - -[[package]] -name = "ws2_32-sys" -version = "0.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)", - "winapi-build 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[metadata] -"checksum autocfg 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)" = "1d49d90015b3c36167a20fe2810c5cd875ad504b39cff3d4eae7977e6b7c1cb2" -"checksum backtrace 0.3.40 (registry+https://github.com/rust-lang/crates.io-index)" = "924c76597f0d9ca25d762c25a4d369d51267536465dc5064bdf0eb073ed477ea" -"checksum backtrace-sys 0.1.32 (registry+https://github.com/rust-lang/crates.io-index)" = "5d6575f128516de27e3ce99689419835fce9643a9b215a14d2b5b685be018491" -"checksum bitflags 1.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "cf1de2fe8c75bc145a2f577add951f8134889b4795d47466a54a5c846d691693" -"checksum byteorder 1.3.2 (registry+https://github.com/rust-lang/crates.io-index)" = "a7c3dd8985a7111efc5c80b44e23ecdd8c007de8ade3b96595387e812b957cf5" -"checksum bytes 0.4.12 (registry+https://github.com/rust-lang/crates.io-index)" = "206fdffcfa2df7cbe15601ef46c813fce0965eb3286db6b56c583b814b51c81c" -"checksum cc 1.0.48 (registry+https://github.com/rust-lang/crates.io-index)" = "f52a465a666ca3d838ebbf08b241383421412fe7ebb463527bba275526d89f76" -"checksum cfg-if 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)" = "4785bdd1c96b2a846b2bd7cc02e86b6b3dbf14e7e53446c4f54c92a361040822" -"checksum chrono 0.4.10 (registry+https://github.com/rust-lang/crates.io-index)" = "31850b4a4d6bae316f7a09e691c944c28299298837edc0a03f755618c23cbc01" -"checksum cloudabi 0.0.3 (registry+https://github.com/rust-lang/crates.io-index)" = "ddfc5b9aa5d4507acaf872de71051dfd0e309860e88966e1051e462a077aac4f" -"checksum crossbeam-deque 0.7.2 (registry+https://github.com/rust-lang/crates.io-index)" = "c3aa945d63861bfe624b55d153a39684da1e8c0bc8fba932f7ee3a3c16cea3ca" -"checksum crossbeam-epoch 0.8.0 (registry+https://github.com/rust-lang/crates.io-index)" = "5064ebdbf05ce3cb95e45c8b086f72263f4166b29b97f6baff7ef7fe047b55ac" -"checksum crossbeam-queue 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)" = "7c979cd6cfe72335896575c6b5688da489e420d36a27a0b9eb0c73db574b4a4b" -"checksum crossbeam-utils 0.6.6 (registry+https://github.com/rust-lang/crates.io-index)" = "04973fa96e96579258a5091af6003abde64af786b860f18622b82e026cca60e6" -"checksum crossbeam-utils 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)" = "ce446db02cdc3165b94ae73111e570793400d0794e46125cc4056c81cbb039f4" -"checksum either 1.5.3 (registry+https://github.com/rust-lang/crates.io-index)" = "bb1f6b1ce1c140482ea30ddd3335fc0024ac7ee112895426e0a629a6c20adfe3" -"checksum failure 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)" = "f8273f13c977665c5db7eb2b99ae520952fe5ac831ae4cd09d80c4c7042b5ed9" -"checksum failure_derive 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)" = "0bc225b78e0391e4b8683440bf2e63c2deeeb2ce5189eab46e2b68c6d3725d08" -"checksum fnv 1.0.6 (registry+https://github.com/rust-lang/crates.io-index)" = "2fad85553e09a6f881f739c29f0b00b0f01357c743266d478b68951ce23285f3" -"checksum fuchsia-zircon 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)" = "2e9763c69ebaae630ba35f74888db465e49e259ba1bc0eda7d06f4a067615d82" -"checksum fuchsia-zircon-sys 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)" = "3dcaa9ae7725d12cdb85b3ad99a434db70b468c09ded17e012d86b5c1010f7a7" -"checksum futures 0.1.29 (registry+https://github.com/rust-lang/crates.io-index)" = "1b980f2816d6ee8673b6517b52cb0e808a180efc92e5c19d02cdda79066703ef" -"checksum futures-cpupool 0.1.8 (registry+https://github.com/rust-lang/crates.io-index)" = "ab90cde24b3319636588d0c35fe03b1333857621051837ed769faefb4c2162e4" -"checksum h2 0.1.26 (registry+https://github.com/rust-lang/crates.io-index)" = "a5b34c246847f938a410a03c5458c7fee2274436675e76d8b903c08efc29c462" -"checksum hermit-abi 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)" = "f629dc602392d3ec14bfc8a09b5e644d7ffd725102b48b81e59f90f2633621d7" -"checksum http 0.1.21 (registry+https://github.com/rust-lang/crates.io-index)" = "d6ccf5ede3a895d8856620237b2f02972c1bbc78d2965ad7fe8838d4a0ed41f0" -"checksum http-body 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "6741c859c1b2463a423a1dbce98d418e6c3c3fc720fb0d45528657320920292d" -"checksum httparse 1.3.4 (registry+https://github.com/rust-lang/crates.io-index)" = "cd179ae861f0c2e53da70d892f5f3029f9594be0c41dc5269cd371691b1dc2f9" -"checksum hyper 0.12.35 (registry+https://github.com/rust-lang/crates.io-index)" = "9dbe6ed1438e1f8ad955a4701e9a944938e9519f6888d12d8558b645e247d5f6" -"checksum indexmap 1.3.0 (registry+https://github.com/rust-lang/crates.io-index)" = "712d7b3ea5827fcb9d4fda14bf4da5f136f0db2ae9c8f4bd4e2d1c6fde4e6db2" -"checksum iovec 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)" = "b2b3ea6ff95e175473f8ffe6a7eb7c00d054240321b84c57051175fe3c1e075e" -"checksum itoa 0.4.4 (registry+https://github.com/rust-lang/crates.io-index)" = "501266b7edd0174f8530248f87f99c88fbe60ca4ef3dd486835b8d8d53136f7f" -"checksum kernel32-sys 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)" = "7507624b29483431c0ba2d82aece8ca6cdba9382bff4ddd0f7490560c056098d" -"checksum lambda_runtime 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "077b8819fe6998266342efdc5154192551143f390ab758007cc7421992e61b07" -"checksum lambda_runtime_client 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)" = "f5e64758b587f1d07b6ca4814a3bc0f3db48c89cc3c895db43a23c690855b370" -"checksum lambda_runtime_core 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)" = "da1cb59e060c1068cfa386b58c202a4381c509ace85a1eadab505164f0563ca5" -"checksum lambda_runtime_errors 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "93b63ea3688df164aaa5643c5f3291cc481366d624729deb3c4dc85ee65ac20a" -"checksum lambda_runtime_errors_derive 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "38fa619ec6f1ee2371a109683d251035c83f01b8ffc10f4aa46de821836a7baf" -"checksum lazy_static 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646" -"checksum libc 0.2.66 (registry+https://github.com/rust-lang/crates.io-index)" = "d515b1f41455adea1313a4a2ac8a8a477634fbae63cc6100e3aebb207ce61558" -"checksum lock_api 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)" = "e57b3997725d2b60dbec1297f6c2e2957cc383db1cebd6be812163f969c7d586" -"checksum log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)" = "14b6052be84e6b71ab17edffc2eeabf5c2c3ae1fdb464aae35ac50c67a44e1f7" -"checksum maybe-uninit 2.0.0 (registry+https://github.com/rust-lang/crates.io-index)" = "60302e4db3a61da70c0cb7991976248362f30319e88850c487b9b95bbf059e00" -"checksum memoffset 0.5.3 (registry+https://github.com/rust-lang/crates.io-index)" = "75189eb85871ea5c2e2c15abbdd541185f63b408415e5051f5cac122d8c774b9" -"checksum mio 0.6.21 (registry+https://github.com/rust-lang/crates.io-index)" = "302dec22bcf6bae6dfb69c647187f4b4d0fb6f535521f7bc022430ce8e12008f" -"checksum mio-uds 0.6.7 (registry+https://github.com/rust-lang/crates.io-index)" = "966257a94e196b11bb43aca423754d87429960a768de9414f3691d6957abf125" -"checksum miow 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "8c1f2f3b1cf331de6896aabf6e9d55dca90356cc9960cca7eaaf408a355ae919" -"checksum net2 0.2.33 (registry+https://github.com/rust-lang/crates.io-index)" = "42550d9fb7b6684a6d404d9fa7250c2eb2646df731d1c06afc06dcee9e1bcf88" -"checksum num-integer 0.1.41 (registry+https://github.com/rust-lang/crates.io-index)" = "b85e541ef8255f6cf42bbfe4ef361305c6c135d10919ecc26126c4e5ae94bc09" -"checksum num-traits 0.2.10 (registry+https://github.com/rust-lang/crates.io-index)" = "d4c81ffc11c212fa327657cb19dd85eb7419e163b5b076bede2bdb5c974c07e4" -"checksum num_cpus 1.11.1 (registry+https://github.com/rust-lang/crates.io-index)" = "76dac5ed2a876980778b8b85f75a71b6cbf0db0b1232ee12f826bccb00d09d72" -"checksum parking_lot 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)" = "f842b1982eb6c2fe34036a4fbfb06dd185a3f5c8edfaacdf7d1ea10b07de6252" -"checksum parking_lot_core 0.6.2 (registry+https://github.com/rust-lang/crates.io-index)" = "b876b1b9e7ac6e1a74a6da34d25c42e17e8862aa409cbbbdcfc8d86c6f3bc62b" -"checksum proc-macro2 0.4.30 (registry+https://github.com/rust-lang/crates.io-index)" = "cf3d2011ab5c909338f7887f4fc896d35932e29146c12c8d01da6b22a80ba759" -"checksum proc-macro2 1.0.6 (registry+https://github.com/rust-lang/crates.io-index)" = "9c9e470a8dc4aeae2dee2f335e8f533e2d4b347e1434e5671afc49b054592f27" -"checksum quote 0.6.13 (registry+https://github.com/rust-lang/crates.io-index)" = "6ce23b6b870e8f94f81fb0a363d65d86675884b34a09043c81e5562f11c1f8e1" -"checksum quote 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)" = "053a8c8bcc71fcce321828dc897a98ab9760bef03a4fc36693c231e5b3216cfe" -"checksum redox_syscall 0.1.56 (registry+https://github.com/rust-lang/crates.io-index)" = "2439c63f3f6139d1b57529d16bc3b8bb855230c8efcc5d3a896c8bea7c3b1e84" -"checksum rustc-demangle 0.1.16 (registry+https://github.com/rust-lang/crates.io-index)" = "4c691c0e608126e00913e33f0ccf3727d5fc84573623b8d65b2df340b5201783" -"checksum rustc_version 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)" = "138e3e0acb6c9fb258b19b67cb8abd63c00679d2851805ea151465464fe9030a" -"checksum ryu 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)" = "bfa8506c1de11c9c4e4c38863ccbe02a305c8188e85a05a784c9e11e1c3910c8" -"checksum scopeguard 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)" = "b42e15e59b18a828bbf5c58ea01debb36b9b096346de35d941dcb89009f24a0d" -"checksum semver 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)" = "1d7eb9ef2c18661902cc47e535f9bc51b78acd254da71d375c2f6720d9a40403" -"checksum semver-parser 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)" = "388a1df253eca08550bef6c72392cfe7c30914bf41df5269b68cbd6ff8f570a3" -"checksum serde 1.0.104 (registry+https://github.com/rust-lang/crates.io-index)" = "414115f25f818d7dfccec8ee535d76949ae78584fc4f79a6f45a904bf8ab4449" -"checksum serde_derive 1.0.104 (registry+https://github.com/rust-lang/crates.io-index)" = "128f9e303a5a29922045a830221b8f78ec74a5f544944f3d5984f8ec3895ef64" -"checksum serde_json 1.0.44 (registry+https://github.com/rust-lang/crates.io-index)" = "48c575e0cc52bdd09b47f330f646cf59afc586e9c4e3ccd6fc1f625b8ea1dad7" -"checksum slab 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)" = "c111b5bd5695e56cffe5129854aa230b39c93a305372fdbb2668ca2394eea9f8" -"checksum smallvec 0.6.13 (registry+https://github.com/rust-lang/crates.io-index)" = "f7b0758c52e15a8b5e3691eae6cc559f08eee9406e548a4477ba4e67770a82b6" -"checksum string 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "d24114bfcceb867ca7f71a0d3fe45d45619ec47a6fbfa98cb14e14250bfa5d6d" -"checksum syn 0.15.44 (registry+https://github.com/rust-lang/crates.io-index)" = "9ca4b3b69a77cbe1ffc9e198781b7acb0c7365a883670e8f1c1bc66fba79a5c5" -"checksum syn 1.0.11 (registry+https://github.com/rust-lang/crates.io-index)" = "dff0acdb207ae2fe6d5976617f887eb1e35a2ba52c13c7234c790960cdad9238" -"checksum synstructure 0.10.2 (registry+https://github.com/rust-lang/crates.io-index)" = "02353edf96d6e4dc81aea2d8490a7e9db177bf8acb0e951c24940bf866cb313f" -"checksum synstructure 0.12.3 (registry+https://github.com/rust-lang/crates.io-index)" = "67656ea1dc1b41b1451851562ea232ec2e5a80242139f7e679ceccfb5d61f545" -"checksum time 0.1.42 (registry+https://github.com/rust-lang/crates.io-index)" = "db8dcfca086c1143c9270ac42a2bbd8a7ee477b78ac8e45b19abfb0cbede4b6f" -"checksum tokio 0.1.22 (registry+https://github.com/rust-lang/crates.io-index)" = "5a09c0b5bb588872ab2f09afa13ee6e9dac11e10a0ec9e8e3ba39a5a5d530af6" -"checksum tokio-buf 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "8fb220f46c53859a4b7ec083e41dec9778ff0b1851c0942b211edb89e0ccdc46" -"checksum tokio-codec 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "5c501eceaf96f0e1793cf26beb63da3d11c738c4a943fdf3746d81d64684c39f" -"checksum tokio-current-thread 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)" = "d16217cad7f1b840c5a97dfb3c43b0c871fef423a6e8d2118c604e843662a443" -"checksum tokio-executor 0.1.9 (registry+https://github.com/rust-lang/crates.io-index)" = "ca6df436c42b0c3330a82d855d2ef017cd793090ad550a6bc2184f4b933532ab" -"checksum tokio-fs 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)" = "3fe6dc22b08d6993916647d108a1a7d15b9cd29c4f4496c62b92c45b5041b7af" -"checksum tokio-io 0.1.12 (registry+https://github.com/rust-lang/crates.io-index)" = "5090db468dad16e1a7a54c8c67280c5e4b544f3d3e018f0b913b400261f85926" -"checksum tokio-reactor 0.1.11 (registry+https://github.com/rust-lang/crates.io-index)" = "6732fe6b53c8d11178dcb77ac6d9682af27fc6d4cb87789449152e5377377146" -"checksum tokio-sync 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)" = "d06554cce1ae4a50f42fba8023918afa931413aded705b560e29600ccf7c6d76" -"checksum tokio-tcp 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)" = "1d14b10654be682ac43efee27401d792507e30fd8d26389e1da3b185de2e4119" -"checksum tokio-threadpool 0.1.17 (registry+https://github.com/rust-lang/crates.io-index)" = "f0c32ffea4827978e9aa392d2f743d973c1dfa3730a2ed3f22ce1e6984da848c" -"checksum tokio-timer 0.2.12 (registry+https://github.com/rust-lang/crates.io-index)" = "1739638e364e558128461fc1ad84d997702c8e31c2e6b18fb99842268199e827" -"checksum tokio-udp 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)" = "f02298505547f73e60f568359ef0d016d5acd6e830ab9bc7c4a5b3403440121b" -"checksum tokio-uds 0.2.5 (registry+https://github.com/rust-lang/crates.io-index)" = "037ffc3ba0e12a0ab4aca92e5234e0dedeb48fddf6ccd260f1f150a36a9f2445" -"checksum try-lock 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)" = "e604eb7b43c06650e854be16a2a03155743d3752dd1c943f6829e26b7a36e382" -"checksum unicode-xid 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "fc72304796d0818e357ead4e000d19c9c174ab23dc11093ac919054d20a6a7fc" -"checksum unicode-xid 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "826e7639553986605ec5979c7dd957c7895e93eabed50ab2ffa7f6128a75097c" -"checksum want 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "b6395efa4784b027708f7451087e647ec73cc74f5d9bc2e418404248d679a230" -"checksum winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)" = "167dc9d6949a9b857f3451275e911c3f44255842c1f7a76f33c55103a909087a" -"checksum winapi 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)" = "8093091eeb260906a183e6ae1abdba2ef5ef2257a21801128899c3fc699229c6" -"checksum winapi-build 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "2d315eee3b34aca4797b2da6b13ed88266e6d612562a0c46390af8299fc699bc" -"checksum winapi-i686-pc-windows-gnu 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" -"checksum winapi-x86_64-pc-windows-gnu 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" -"checksum ws2_32-sys 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "d59cefebd0c892fa2dd6de581e937301d8552cb44489cdff035c6187cb63fa5e" +checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" diff --git a/tests/test-func/Cargo.toml b/tests/test-func/Cargo.toml index bc1afd1..acc66d1 100644 --- a/tests/test-func/Cargo.toml +++ b/tests/test-func/Cargo.toml @@ -2,7 +2,7 @@ name = "test-func" version = "0.1.0" authors = ["softprops "] -edition = "2018" +edition = "2021" # users don't have to do this # but when they do, the builder packaging still work @@ -11,5 +11,5 @@ name = "bootstrap" path = "src/main.rs" [dependencies] -lambda_runtime = "0.2" +lambda_runtime = "0.4.1" serde_json = "1.0" \ No newline at end of file From 0a713c6438a51414ee90c72e47375942eec575f6 Mon Sep 17 00:00:00 2001 From: Jeremiah Russell Date: Fri, 19 Nov 2021 17:12:42 +0000 Subject: [PATCH 085/111] refactor: Update test_func code - Rust Edition 2021 - Latest lambda_runtime - tokio for async support --- tests/test-func/Cargo.lock | 1 + tests/test-func/Cargo.toml | 9 +++++---- tests/test-func/src/main.rs | 15 +++++++-------- 3 files changed, 13 insertions(+), 12 deletions(-) diff --git a/tests/test-func/Cargo.lock b/tests/test-func/Cargo.lock index e2bf317..13e011a 100644 --- a/tests/test-func/Cargo.lock +++ b/tests/test-func/Cargo.lock @@ -434,6 +434,7 @@ version = "0.1.0" dependencies = [ "lambda_runtime", "serde_json", + "tokio", ] [[package]] diff --git a/tests/test-func/Cargo.toml b/tests/test-func/Cargo.toml index acc66d1..73fd37b 100644 --- a/tests/test-func/Cargo.toml +++ b/tests/test-func/Cargo.toml @@ -1,7 +1,7 @@ [package] name = "test-func" -version = "0.1.0" -authors = ["softprops "] +version = "0.2.0" +authors = ["softprops ", "jerusdp "] edition = "2021" # users don't have to do this @@ -11,5 +11,6 @@ name = "bootstrap" path = "src/main.rs" [dependencies] -lambda_runtime = "0.4.1" -serde_json = "1.0" \ No newline at end of file +lambda_runtime = "0.4" +serde_json = "1.0" +tokio = "1.14" \ No newline at end of file diff --git a/tests/test-func/src/main.rs b/tests/test-func/src/main.rs index f38c7c6..34defa9 100644 --- a/tests/test-func/src/main.rs +++ b/tests/test-func/src/main.rs @@ -1,13 +1,12 @@ -use lambda_runtime::{error::HandlerError, lambda, Context}; +use lambda_runtime::{Error,Context}; use serde_json::Value; -fn main() { - lambda!(handler) +#[tokio::main] +async fn main() -> Result<(), Error> { + lambda_runtime::run(lambda_runtime::handler_fn(handler)).await?; + Ok(()) } -fn handler( - event: Value, - _: Context, -) -> Result { +async fn handler(event: Value, _: Context) -> Result { Ok(event) -} \ No newline at end of file +} From 7c48ca134a7ad57ad94d1afe2d28c2ee368b8183 Mon Sep 17 00:00:00 2001 From: Jeremiah Russell Date: Sat, 20 Nov 2021 07:18:23 +0000 Subject: [PATCH 086/111] refactor: Update test_func_with_hooks code - Rust Edition 2021 - Latest lambda_runtime - tokio for async support --- tests/test-func-with-hooks/Cargo.lock | 995 +++++++------------------ tests/test-func-with-hooks/Cargo.toml | 14 +- tests/test-func-with-hooks/src/main.rs | 12 +- 3 files changed, 299 insertions(+), 722 deletions(-) diff --git a/tests/test-func-with-hooks/Cargo.lock b/tests/test-func-with-hooks/Cargo.lock index 1c44446..a9b77dd 100644 --- a/tests/test-func-with-hooks/Cargo.lock +++ b/tests/test-func-with-hooks/Cargo.lock @@ -1,1019 +1,590 @@ # This file is automatically @generated by Cargo. # It is not intended for manual editing. -[[package]] -name = "autocfg" -version = "0.1.7" -source = "registry+https://github.com/rust-lang/crates.io-index" +version = 3 [[package]] -name = "backtrace" -version = "0.3.40" +name = "async-stream" +version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "171374e7e3b2504e0e5236e3b59260560f9fe94bfe9ac39ba5e4e929c5590625" dependencies = [ - "backtrace-sys 0.1.32 (registry+https://github.com/rust-lang/crates.io-index)", - "cfg-if 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)", - "libc 0.2.66 (registry+https://github.com/rust-lang/crates.io-index)", - "rustc-demangle 0.1.16 (registry+https://github.com/rust-lang/crates.io-index)", + "async-stream-impl", + "futures-core", ] [[package]] -name = "backtrace-sys" -version = "0.1.32" +name = "async-stream-impl" +version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "648ed8c8d2ce5409ccd57453d9d1b214b342a0d69376a6feda1fd6cae3299308" dependencies = [ - "cc 1.0.48 (registry+https://github.com/rust-lang/crates.io-index)", - "libc 0.2.66 (registry+https://github.com/rust-lang/crates.io-index)", + "proc-macro2", + "quote", + "syn", ] [[package]] -name = "bitflags" -version = "1.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" - -[[package]] -name = "byteorder" -version = "1.3.2" +name = "autocfg" +version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cdb031dd78e28731d87d56cc8ffef4a8f36ca26c38fe2de700543e627f8a464a" [[package]] name = "bytes" -version = "0.4.12" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "byteorder 1.3.2 (registry+https://github.com/rust-lang/crates.io-index)", - "either 1.5.3 (registry+https://github.com/rust-lang/crates.io-index)", - "iovec 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "cc" -version = "1.0.48" +version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c4872d67bab6358e59559027aa3b9157c53d9358c51423c17554809a8858e0f8" [[package]] name = "cfg-if" version = "0.1.10" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4785bdd1c96b2a846b2bd7cc02e86b6b3dbf14e7e53446c4f54c92a361040822" [[package]] -name = "chrono" -version = "0.4.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "num-integer 0.1.41 (registry+https://github.com/rust-lang/crates.io-index)", - "num-traits 0.2.10 (registry+https://github.com/rust-lang/crates.io-index)", - "time 0.1.42 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "cloudabi" -version = "0.0.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "bitflags 1.2.1 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "crossbeam-deque" -version = "0.7.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "crossbeam-epoch 0.8.0 (registry+https://github.com/rust-lang/crates.io-index)", - "crossbeam-utils 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "crossbeam-epoch" -version = "0.8.0" +name = "cfg-if" +version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "autocfg 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)", - "cfg-if 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)", - "crossbeam-utils 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)", - "lazy_static 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)", - "memoffset 0.5.3 (registry+https://github.com/rust-lang/crates.io-index)", - "scopeguard 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)", -] +checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" [[package]] -name = "crossbeam-queue" -version = "0.1.2" +name = "fnv" +version = "1.0.6" source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "crossbeam-utils 0.6.6 (registry+https://github.com/rust-lang/crates.io-index)", -] +checksum = "2fad85553e09a6f881f739c29f0b00b0f01357c743266d478b68951ce23285f3" [[package]] -name = "crossbeam-utils" -version = "0.6.6" +name = "futures" +version = "0.3.17" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a12aa0eb539080d55c3f2d45a67c3b58b6b0773c1a3ca2dfec66d58c97fd66ca" dependencies = [ - "cfg-if 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)", - "lazy_static 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)", + "futures-channel", + "futures-core", + "futures-executor", + "futures-io", + "futures-sink", + "futures-task", + "futures-util", ] [[package]] -name = "crossbeam-utils" -version = "0.7.0" +name = "futures-channel" +version = "0.3.17" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5da6ba8c3bb3c165d3c7319fc1cc8304facf1fb8db99c5de877183c08a273888" dependencies = [ - "autocfg 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)", - "cfg-if 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)", - "lazy_static 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)", + "futures-core", + "futures-sink", ] [[package]] -name = "either" -version = "1.5.3" +name = "futures-core" +version = "0.3.17" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "88d1c26957f23603395cd326b0ffe64124b818f4449552f960d815cfba83a53d" [[package]] -name = "failure" -version = "0.1.6" +name = "futures-executor" +version = "0.3.17" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "45025be030969d763025784f7f355043dc6bc74093e4ecc5000ca4dc50d8745c" dependencies = [ - "backtrace 0.3.40 (registry+https://github.com/rust-lang/crates.io-index)", - "failure_derive 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)", + "futures-core", + "futures-task", + "futures-util", ] [[package]] -name = "failure_derive" -version = "0.1.6" +name = "futures-io" +version = "0.3.17" source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "proc-macro2 1.0.6 (registry+https://github.com/rust-lang/crates.io-index)", - "quote 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)", - "syn 1.0.11 (registry+https://github.com/rust-lang/crates.io-index)", - "synstructure 0.12.3 (registry+https://github.com/rust-lang/crates.io-index)", -] +checksum = "522de2a0fe3e380f1bc577ba0474108faf3f6b18321dbf60b3b9c39a75073377" [[package]] -name = "fnv" -version = "1.0.6" -source = "registry+https://github.com/rust-lang/crates.io-index" - -[[package]] -name = "fuchsia-zircon" -version = "0.3.3" +name = "futures-macro" +version = "0.3.17" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "18e4a4b95cea4b4ccbcf1c5675ca7c4ee4e9e75eb79944d07defde18068f79bb" dependencies = [ - "bitflags 1.2.1 (registry+https://github.com/rust-lang/crates.io-index)", - "fuchsia-zircon-sys 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)", + "autocfg", + "proc-macro-hack", + "proc-macro2", + "quote", + "syn", ] [[package]] -name = "fuchsia-zircon-sys" -version = "0.3.3" -source = "registry+https://github.com/rust-lang/crates.io-index" - -[[package]] -name = "futures" -version = "0.1.29" +name = "futures-sink" +version = "0.3.17" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "36ea153c13024fe480590b3e3d4cad89a0cfacecc24577b68f86c6ced9c2bc11" [[package]] -name = "futures-cpupool" -version = "0.1.8" +name = "futures-task" +version = "0.3.17" source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "futures 0.1.29 (registry+https://github.com/rust-lang/crates.io-index)", - "num_cpus 1.11.1 (registry+https://github.com/rust-lang/crates.io-index)", -] +checksum = "1d3d00f4eddb73e498a54394f228cd55853bdf059259e8e7bc6e69d408892e99" [[package]] -name = "h2" -version = "0.1.26" +name = "futures-util" +version = "0.3.17" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "36568465210a3a6ee45e1f165136d68671471a501e632e9a98d96872222b5481" dependencies = [ - "byteorder 1.3.2 (registry+https://github.com/rust-lang/crates.io-index)", - "bytes 0.4.12 (registry+https://github.com/rust-lang/crates.io-index)", - "fnv 1.0.6 (registry+https://github.com/rust-lang/crates.io-index)", - "futures 0.1.29 (registry+https://github.com/rust-lang/crates.io-index)", - "http 0.1.21 (registry+https://github.com/rust-lang/crates.io-index)", - "indexmap 1.3.0 (registry+https://github.com/rust-lang/crates.io-index)", - "log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)", - "slab 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)", - "string 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio-io 0.1.12 (registry+https://github.com/rust-lang/crates.io-index)", + "autocfg", + "futures-channel", + "futures-core", + "futures-io", + "futures-macro", + "futures-sink", + "futures-task", + "memchr", + "pin-project-lite", + "pin-utils", + "proc-macro-hack", + "proc-macro-nested", + "slab", ] [[package]] name = "hermit-abi" version = "0.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f629dc602392d3ec14bfc8a09b5e644d7ffd725102b48b81e59f90f2633621d7" dependencies = [ - "libc 0.2.66 (registry+https://github.com/rust-lang/crates.io-index)", + "libc", ] [[package]] name = "http" -version = "0.1.21" +version = "0.2.5" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1323096b05d41827dadeaee54c9981958c0f94e670bc94ed80037d1a7b8b186b" dependencies = [ - "bytes 0.4.12 (registry+https://github.com/rust-lang/crates.io-index)", - "fnv 1.0.6 (registry+https://github.com/rust-lang/crates.io-index)", - "itoa 0.4.4 (registry+https://github.com/rust-lang/crates.io-index)", + "bytes", + "fnv", + "itoa", ] [[package]] name = "http-body" -version = "0.1.0" +version = "0.4.4" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1ff4f84919677303da5f147645dbea6b1881f368d03ac84e1dc09031ebd7b2c6" dependencies = [ - "bytes 0.4.12 (registry+https://github.com/rust-lang/crates.io-index)", - "futures 0.1.29 (registry+https://github.com/rust-lang/crates.io-index)", - "http 0.1.21 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio-buf 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", + "bytes", + "http", + "pin-project-lite", ] [[package]] name = "httparse" -version = "1.3.4" +version = "1.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "acd94fdbe1d4ff688b67b04eee2e17bd50995534a61539e45adfefb45e5e5503" [[package]] -name = "hyper" -version = "0.12.35" +name = "httpdate" +version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "bytes 0.4.12 (registry+https://github.com/rust-lang/crates.io-index)", - "futures 0.1.29 (registry+https://github.com/rust-lang/crates.io-index)", - "futures-cpupool 0.1.8 (registry+https://github.com/rust-lang/crates.io-index)", - "h2 0.1.26 (registry+https://github.com/rust-lang/crates.io-index)", - "http 0.1.21 (registry+https://github.com/rust-lang/crates.io-index)", - "http-body 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", - "httparse 1.3.4 (registry+https://github.com/rust-lang/crates.io-index)", - "iovec 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)", - "itoa 0.4.4 (registry+https://github.com/rust-lang/crates.io-index)", - "log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)", - "net2 0.2.33 (registry+https://github.com/rust-lang/crates.io-index)", - "rustc_version 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)", - "time 0.1.42 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio 0.1.22 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio-buf 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio-executor 0.1.9 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio-io 0.1.12 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio-reactor 0.1.11 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio-tcp 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio-threadpool 0.1.17 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio-timer 0.2.12 (registry+https://github.com/rust-lang/crates.io-index)", - "want 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)", -] +checksum = "c4a1e36c821dbe04574f602848a19f742f4fb3c98d40449f11bcad18d6b17421" [[package]] -name = "indexmap" -version = "1.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "autocfg 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "iovec" -version = "0.1.4" +name = "hyper" +version = "0.14.15" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "436ec0091e4f20e655156a30a0df3770fe2900aa301e548e08446ec794b6953c" dependencies = [ - "libc 0.2.66 (registry+https://github.com/rust-lang/crates.io-index)", + "bytes", + "futures-channel", + "futures-core", + "futures-util", + "http", + "http-body", + "httparse", + "httpdate", + "itoa", + "pin-project-lite", + "socket2", + "tokio", + "tower-service", + "tracing", + "want", ] [[package]] name = "itoa" version = "0.4.4" source = "registry+https://github.com/rust-lang/crates.io-index" - -[[package]] -name = "kernel32-sys" -version = "0.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)", - "winapi-build 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", -] +checksum = "501266b7edd0174f8530248f87f99c88fbe60ca4ef3dd486835b8d8d53136f7f" [[package]] name = "lambda_runtime" -version = "0.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "failure 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)", - "lambda_runtime_core 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", - "log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)", - "serde 1.0.104 (registry+https://github.com/rust-lang/crates.io-index)", - "serde_derive 1.0.104 (registry+https://github.com/rust-lang/crates.io-index)", - "serde_json 1.0.44 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio 0.1.22 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "lambda_runtime_client" -version = "0.2.2" +version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "17ed88d8421123f9546cbd0c4235386803859c4a20b80a6eb613a652b486df8e" dependencies = [ - "failure 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)", - "http 0.1.21 (registry+https://github.com/rust-lang/crates.io-index)", - "hyper 0.12.35 (registry+https://github.com/rust-lang/crates.io-index)", - "lambda_runtime_errors 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", - "log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)", - "serde 1.0.104 (registry+https://github.com/rust-lang/crates.io-index)", - "serde_derive 1.0.104 (registry+https://github.com/rust-lang/crates.io-index)", - "serde_json 1.0.44 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio 0.1.22 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "lambda_runtime_core" -version = "0.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "backtrace 0.3.40 (registry+https://github.com/rust-lang/crates.io-index)", - "chrono 0.4.10 (registry+https://github.com/rust-lang/crates.io-index)", - "failure 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)", - "hyper 0.12.35 (registry+https://github.com/rust-lang/crates.io-index)", - "lambda_runtime_client 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)", - "lambda_runtime_errors 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", - "log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)", - "rustc_version 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio 0.1.22 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "lambda_runtime_errors" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "failure 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)", - "lambda_runtime_errors_derive 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", - "log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)", - "serde_json 1.0.44 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "lambda_runtime_errors_derive" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "proc-macro2 0.4.30 (registry+https://github.com/rust-lang/crates.io-index)", - "quote 0.6.13 (registry+https://github.com/rust-lang/crates.io-index)", - "syn 0.15.44 (registry+https://github.com/rust-lang/crates.io-index)", - "synstructure 0.10.2 (registry+https://github.com/rust-lang/crates.io-index)", + "async-stream", + "bytes", + "futures", + "http", + "hyper", + "serde", + "serde_json", + "tokio", + "tokio-stream", + "tower-service", + "tracing", + "tracing-error", ] [[package]] name = "lazy_static" version = "1.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646" [[package]] name = "libc" -version = "0.2.66" +version = "0.2.107" source = "registry+https://github.com/rust-lang/crates.io-index" - -[[package]] -name = "lock_api" -version = "0.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "scopeguard 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)", -] +checksum = "fbe5e23404da5b4f555ef85ebed98fb4083e55a00c317800bc2a50ede9f3d219" [[package]] name = "log" version = "0.4.8" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "14b6052be84e6b71ab17edffc2eeabf5c2c3ae1fdb464aae35ac50c67a44e1f7" dependencies = [ - "cfg-if 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)", + "cfg-if 0.1.10", ] [[package]] -name = "maybe-uninit" -version = "2.0.0" +name = "memchr" +version = "2.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" - -[[package]] -name = "memoffset" -version = "0.5.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "rustc_version 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)", -] +checksum = "308cc39be01b73d0d18f82a0e7b2a3df85245f84af96fdddc5d202d27e47b86a" [[package]] name = "mio" -version = "0.6.21" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "cfg-if 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)", - "fuchsia-zircon 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)", - "fuchsia-zircon-sys 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)", - "iovec 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)", - "kernel32-sys 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)", - "libc 0.2.66 (registry+https://github.com/rust-lang/crates.io-index)", - "log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)", - "miow 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)", - "net2 0.2.33 (registry+https://github.com/rust-lang/crates.io-index)", - "slab 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)", - "winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "mio-uds" -version = "0.6.7" +version = "0.7.14" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8067b404fe97c70829f082dec8bcf4f71225d7eaea1d8645349cb76fa06205cc" dependencies = [ - "iovec 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)", - "libc 0.2.66 (registry+https://github.com/rust-lang/crates.io-index)", - "mio 0.6.21 (registry+https://github.com/rust-lang/crates.io-index)", + "libc", + "log", + "miow", + "ntapi", + "winapi", ] [[package]] name = "miow" -version = "0.2.1" +version = "0.3.7" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b9f1c5b025cda876f66ef43a113f91ebc9f4ccef34843000e0adf6ebbab84e21" dependencies = [ - "kernel32-sys 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)", - "net2 0.2.33 (registry+https://github.com/rust-lang/crates.io-index)", - "winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)", - "ws2_32-sys 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)", + "winapi", ] [[package]] -name = "net2" -version = "0.2.33" +name = "ntapi" +version = "0.3.6" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3f6bb902e437b6d86e03cce10a7e2af662292c5dfef23b65899ea3ac9354ad44" dependencies = [ - "cfg-if 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)", - "libc 0.2.66 (registry+https://github.com/rust-lang/crates.io-index)", - "winapi 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)", + "winapi", ] [[package]] -name = "num-integer" -version = "0.1.41" +name = "num_cpus" +version = "1.11.1" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "76dac5ed2a876980778b8b85f75a71b6cbf0db0b1232ee12f826bccb00d09d72" dependencies = [ - "autocfg 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)", - "num-traits 0.2.10 (registry+https://github.com/rust-lang/crates.io-index)", + "hermit-abi", + "libc", ] [[package]] -name = "num-traits" -version = "0.2.10" +name = "once_cell" +version = "1.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "autocfg 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)", -] +checksum = "692fcb63b64b1758029e0a96ee63e049ce8c5948587f2f7208df04625e5f6b56" [[package]] -name = "num_cpus" -version = "1.11.1" +name = "pin-project-lite" +version = "0.2.7" source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "hermit-abi 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)", - "libc 0.2.66 (registry+https://github.com/rust-lang/crates.io-index)", -] +checksum = "8d31d11c69a6b52a174b42bdc0c30e5e11670f90788b2c471c31c1d17d449443" [[package]] -name = "parking_lot" -version = "0.9.0" +name = "pin-utils" +version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "lock_api 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)", - "parking_lot_core 0.6.2 (registry+https://github.com/rust-lang/crates.io-index)", - "rustc_version 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)", -] +checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" [[package]] -name = "parking_lot_core" -version = "0.6.2" +name = "proc-macro-hack" +version = "0.5.19" source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "cfg-if 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)", - "cloudabi 0.0.3 (registry+https://github.com/rust-lang/crates.io-index)", - "libc 0.2.66 (registry+https://github.com/rust-lang/crates.io-index)", - "redox_syscall 0.1.56 (registry+https://github.com/rust-lang/crates.io-index)", - "rustc_version 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)", - "smallvec 0.6.13 (registry+https://github.com/rust-lang/crates.io-index)", - "winapi 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)", -] +checksum = "dbf0c48bc1d91375ae5c3cd81e3722dff1abcf81a30960240640d223f59fe0e5" [[package]] -name = "proc-macro2" -version = "0.4.30" +name = "proc-macro-nested" +version = "0.1.7" source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "unicode-xid 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", -] +checksum = "bc881b2c22681370c6a780e47af9840ef841837bc98118431d4e1868bd0c1086" [[package]] name = "proc-macro2" -version = "1.0.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "unicode-xid 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "quote" -version = "0.6.13" +version = "1.0.32" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ba508cc11742c0dc5c1659771673afbab7a0efab23aa17e854cbab0837ed0b43" dependencies = [ - "proc-macro2 0.4.30 (registry+https://github.com/rust-lang/crates.io-index)", + "unicode-xid", ] [[package]] name = "quote" version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "053a8c8bcc71fcce321828dc897a98ab9760bef03a4fc36693c231e5b3216cfe" dependencies = [ - "proc-macro2 1.0.6 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "redox_syscall" -version = "0.1.56" -source = "registry+https://github.com/rust-lang/crates.io-index" - -[[package]] -name = "rustc-demangle" -version = "0.1.16" -source = "registry+https://github.com/rust-lang/crates.io-index" - -[[package]] -name = "rustc_version" -version = "0.2.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "semver 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)", + "proc-macro2", ] [[package]] name = "ryu" version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" - -[[package]] -name = "scopeguard" -version = "1.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" - -[[package]] -name = "semver" -version = "0.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "semver-parser 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "semver-parser" -version = "0.7.0" -source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bfa8506c1de11c9c4e4c38863ccbe02a305c8188e85a05a784c9e11e1c3910c8" [[package]] name = "serde" version = "1.0.104" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "414115f25f818d7dfccec8ee535d76949ae78584fc4f79a6f45a904bf8ab4449" +dependencies = [ + "serde_derive", +] [[package]] name = "serde_derive" version = "1.0.104" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "128f9e303a5a29922045a830221b8f78ec74a5f544944f3d5984f8ec3895ef64" dependencies = [ - "proc-macro2 1.0.6 (registry+https://github.com/rust-lang/crates.io-index)", - "quote 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)", - "syn 1.0.11 (registry+https://github.com/rust-lang/crates.io-index)", + "proc-macro2", + "quote", + "syn", ] [[package]] name = "serde_json" version = "1.0.44" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "48c575e0cc52bdd09b47f330f646cf59afc586e9c4e3ccd6fc1f625b8ea1dad7" dependencies = [ - "itoa 0.4.4 (registry+https://github.com/rust-lang/crates.io-index)", - "ryu 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)", - "serde 1.0.104 (registry+https://github.com/rust-lang/crates.io-index)", + "itoa", + "ryu", + "serde", ] [[package]] -name = "slab" -version = "0.4.2" -source = "registry+https://github.com/rust-lang/crates.io-index" - -[[package]] -name = "smallvec" -version = "0.6.13" +name = "sharded-slab" +version = "0.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "900fba806f70c630b0a382d0d825e17a0f19fcd059a2ade1ff237bcddf446b31" dependencies = [ - "maybe-uninit 2.0.0 (registry+https://github.com/rust-lang/crates.io-index)", + "lazy_static", ] [[package]] -name = "string" -version = "0.2.1" +name = "slab" +version = "0.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "bytes 0.4.12 (registry+https://github.com/rust-lang/crates.io-index)", -] +checksum = "c111b5bd5695e56cffe5129854aa230b39c93a305372fdbb2668ca2394eea9f8" [[package]] -name = "syn" -version = "0.15.44" +name = "socket2" +version = "0.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5dc90fe6c7be1a323296982db1836d1ea9e47b6839496dde9a541bc496df3516" dependencies = [ - "proc-macro2 0.4.30 (registry+https://github.com/rust-lang/crates.io-index)", - "quote 0.6.13 (registry+https://github.com/rust-lang/crates.io-index)", - "unicode-xid 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", + "libc", + "winapi", ] [[package]] name = "syn" -version = "1.0.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "proc-macro2 1.0.6 (registry+https://github.com/rust-lang/crates.io-index)", - "quote 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)", - "unicode-xid 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "synstructure" -version = "0.10.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "proc-macro2 0.4.30 (registry+https://github.com/rust-lang/crates.io-index)", - "quote 0.6.13 (registry+https://github.com/rust-lang/crates.io-index)", - "syn 0.15.44 (registry+https://github.com/rust-lang/crates.io-index)", - "unicode-xid 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "synstructure" -version = "0.12.3" +version = "1.0.81" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f2afee18b8beb5a596ecb4a2dce128c719b4ba399d34126b9e4396e3f9860966" dependencies = [ - "proc-macro2 1.0.6 (registry+https://github.com/rust-lang/crates.io-index)", - "quote 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)", - "syn 1.0.11 (registry+https://github.com/rust-lang/crates.io-index)", - "unicode-xid 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)", + "proc-macro2", + "quote", + "unicode-xid", ] [[package]] name = "test-func-with-hooks" -version = "0.1.0" +version = "0.2.0" dependencies = [ - "lambda_runtime 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)", - "serde_json 1.0.44 (registry+https://github.com/rust-lang/crates.io-index)", + "lambda_runtime", + "serde_json", + "tokio", ] [[package]] -name = "time" -version = "0.1.42" +name = "thread_local" +version = "1.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8018d24e04c95ac8790716a5987d0fec4f8b27249ffa0f7d33f1369bdfb88cbd" dependencies = [ - "libc 0.2.66 (registry+https://github.com/rust-lang/crates.io-index)", - "redox_syscall 0.1.56 (registry+https://github.com/rust-lang/crates.io-index)", - "winapi 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)", + "once_cell", ] [[package]] name = "tokio" -version = "0.1.22" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "bytes 0.4.12 (registry+https://github.com/rust-lang/crates.io-index)", - "futures 0.1.29 (registry+https://github.com/rust-lang/crates.io-index)", - "mio 0.6.21 (registry+https://github.com/rust-lang/crates.io-index)", - "num_cpus 1.11.1 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio-codec 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio-current-thread 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio-executor 0.1.9 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio-fs 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio-io 0.1.12 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio-reactor 0.1.11 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio-sync 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio-tcp 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio-threadpool 0.1.17 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio-timer 0.2.12 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio-udp 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio-uds 0.2.5 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "tokio-buf" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "bytes 0.4.12 (registry+https://github.com/rust-lang/crates.io-index)", - "either 1.5.3 (registry+https://github.com/rust-lang/crates.io-index)", - "futures 0.1.29 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "tokio-codec" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "bytes 0.4.12 (registry+https://github.com/rust-lang/crates.io-index)", - "futures 0.1.29 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio-io 0.1.12 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "tokio-current-thread" -version = "0.1.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "futures 0.1.29 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio-executor 0.1.9 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "tokio-executor" -version = "0.1.9" +version = "1.14.0" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "70e992e41e0d2fb9f755b37446f20900f64446ef54874f40a60c78f021ac6144" dependencies = [ - "crossbeam-utils 0.6.6 (registry+https://github.com/rust-lang/crates.io-index)", - "futures 0.1.29 (registry+https://github.com/rust-lang/crates.io-index)", + "autocfg", + "bytes", + "libc", + "memchr", + "mio", + "num_cpus", + "pin-project-lite", + "tokio-macros", + "winapi", ] [[package]] -name = "tokio-fs" -version = "0.1.6" +name = "tokio-macros" +version = "1.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c9efc1aba077437943f7515666aa2b882dfabfbfdf89c819ea75a8d6e9eaba5e" dependencies = [ - "futures 0.1.29 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio-io 0.1.12 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio-threadpool 0.1.17 (registry+https://github.com/rust-lang/crates.io-index)", + "proc-macro2", + "quote", + "syn", ] [[package]] -name = "tokio-io" -version = "0.1.12" +name = "tokio-stream" +version = "0.1.8" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "50145484efff8818b5ccd256697f36863f587da82cf8b409c53adf1e840798e3" dependencies = [ - "bytes 0.4.12 (registry+https://github.com/rust-lang/crates.io-index)", - "futures 0.1.29 (registry+https://github.com/rust-lang/crates.io-index)", - "log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)", + "futures-core", + "pin-project-lite", + "tokio", ] [[package]] -name = "tokio-reactor" -version = "0.1.11" +name = "tower-service" +version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "crossbeam-utils 0.6.6 (registry+https://github.com/rust-lang/crates.io-index)", - "futures 0.1.29 (registry+https://github.com/rust-lang/crates.io-index)", - "lazy_static 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)", - "log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)", - "mio 0.6.21 (registry+https://github.com/rust-lang/crates.io-index)", - "num_cpus 1.11.1 (registry+https://github.com/rust-lang/crates.io-index)", - "parking_lot 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)", - "slab 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio-executor 0.1.9 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio-io 0.1.12 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio-sync 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)", -] +checksum = "360dfd1d6d30e05fda32ace2c8c70e9c0a9da713275777f5a4dbb8a1893930c6" [[package]] -name = "tokio-sync" -version = "0.1.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "fnv 1.0.6 (registry+https://github.com/rust-lang/crates.io-index)", - "futures 0.1.29 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "tokio-tcp" -version = "0.1.3" +name = "tracing" +version = "0.1.29" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "375a639232caf30edfc78e8d89b2d4c375515393e7af7e16f01cd96917fb2105" dependencies = [ - "bytes 0.4.12 (registry+https://github.com/rust-lang/crates.io-index)", - "futures 0.1.29 (registry+https://github.com/rust-lang/crates.io-index)", - "iovec 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)", - "mio 0.6.21 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio-io 0.1.12 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio-reactor 0.1.11 (registry+https://github.com/rust-lang/crates.io-index)", + "cfg-if 1.0.0", + "log", + "pin-project-lite", + "tracing-attributes", + "tracing-core", ] [[package]] -name = "tokio-threadpool" -version = "0.1.17" +name = "tracing-attributes" +version = "0.1.18" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f4f480b8f81512e825f337ad51e94c1eb5d3bbdf2b363dcd01e2b19a9ffe3f8e" dependencies = [ - "crossbeam-deque 0.7.2 (registry+https://github.com/rust-lang/crates.io-index)", - "crossbeam-queue 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", - "crossbeam-utils 0.6.6 (registry+https://github.com/rust-lang/crates.io-index)", - "futures 0.1.29 (registry+https://github.com/rust-lang/crates.io-index)", - "lazy_static 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)", - "log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)", - "num_cpus 1.11.1 (registry+https://github.com/rust-lang/crates.io-index)", - "slab 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio-executor 0.1.9 (registry+https://github.com/rust-lang/crates.io-index)", + "proc-macro2", + "quote", + "syn", ] [[package]] -name = "tokio-timer" -version = "0.2.12" +name = "tracing-core" +version = "0.1.21" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1f4ed65637b8390770814083d20756f87bfa2c21bf2f110babdc5438351746e4" dependencies = [ - "crossbeam-utils 0.6.6 (registry+https://github.com/rust-lang/crates.io-index)", - "futures 0.1.29 (registry+https://github.com/rust-lang/crates.io-index)", - "slab 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio-executor 0.1.9 (registry+https://github.com/rust-lang/crates.io-index)", + "lazy_static", ] [[package]] -name = "tokio-udp" -version = "0.1.5" +name = "tracing-error" +version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b4d7c0b83d4a500748fa5879461652b361edf5c9d51ede2a2ac03875ca185e24" dependencies = [ - "bytes 0.4.12 (registry+https://github.com/rust-lang/crates.io-index)", - "futures 0.1.29 (registry+https://github.com/rust-lang/crates.io-index)", - "log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)", - "mio 0.6.21 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio-codec 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio-io 0.1.12 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio-reactor 0.1.11 (registry+https://github.com/rust-lang/crates.io-index)", + "tracing", + "tracing-subscriber", ] [[package]] -name = "tokio-uds" -version = "0.2.5" +name = "tracing-subscriber" +version = "0.2.25" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0e0d2eaa99c3c2e41547cfa109e910a68ea03823cccad4a0525dcbc9b01e8c71" dependencies = [ - "bytes 0.4.12 (registry+https://github.com/rust-lang/crates.io-index)", - "futures 0.1.29 (registry+https://github.com/rust-lang/crates.io-index)", - "iovec 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)", - "libc 0.2.66 (registry+https://github.com/rust-lang/crates.io-index)", - "log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)", - "mio 0.6.21 (registry+https://github.com/rust-lang/crates.io-index)", - "mio-uds 0.6.7 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio-codec 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio-io 0.1.12 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio-reactor 0.1.11 (registry+https://github.com/rust-lang/crates.io-index)", + "sharded-slab", + "thread_local", + "tracing-core", ] [[package]] name = "try-lock" version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" - -[[package]] -name = "unicode-xid" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e604eb7b43c06650e854be16a2a03155743d3752dd1c943f6829e26b7a36e382" [[package]] name = "unicode-xid" version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "826e7639553986605ec5979c7dd957c7895e93eabed50ab2ffa7f6128a75097c" [[package]] name = "want" -version = "0.2.0" +version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1ce8a968cb1cd110d136ff8b819a556d6fb6d919363c61534f6860c7eb172ba0" dependencies = [ - "futures 0.1.29 (registry+https://github.com/rust-lang/crates.io-index)", - "log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)", - "try-lock 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)", + "log", + "try-lock", ] [[package]] name = "winapi" -version = "0.2.8" -source = "registry+https://github.com/rust-lang/crates.io-index" - -[[package]] -name = "winapi" -version = "0.3.8" +version = "0.3.9" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419" dependencies = [ - "winapi-i686-pc-windows-gnu 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)", - "winapi-x86_64-pc-windows-gnu 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)", + "winapi-i686-pc-windows-gnu", + "winapi-x86_64-pc-windows-gnu", ] -[[package]] -name = "winapi-build" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" - [[package]] name = "winapi-i686-pc-windows-gnu" version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" [[package]] name = "winapi-x86_64-pc-windows-gnu" version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" - -[[package]] -name = "ws2_32-sys" -version = "0.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)", - "winapi-build 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[metadata] -"checksum autocfg 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)" = "1d49d90015b3c36167a20fe2810c5cd875ad504b39cff3d4eae7977e6b7c1cb2" -"checksum backtrace 0.3.40 (registry+https://github.com/rust-lang/crates.io-index)" = "924c76597f0d9ca25d762c25a4d369d51267536465dc5064bdf0eb073ed477ea" -"checksum backtrace-sys 0.1.32 (registry+https://github.com/rust-lang/crates.io-index)" = "5d6575f128516de27e3ce99689419835fce9643a9b215a14d2b5b685be018491" -"checksum bitflags 1.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "cf1de2fe8c75bc145a2f577add951f8134889b4795d47466a54a5c846d691693" -"checksum byteorder 1.3.2 (registry+https://github.com/rust-lang/crates.io-index)" = "a7c3dd8985a7111efc5c80b44e23ecdd8c007de8ade3b96595387e812b957cf5" -"checksum bytes 0.4.12 (registry+https://github.com/rust-lang/crates.io-index)" = "206fdffcfa2df7cbe15601ef46c813fce0965eb3286db6b56c583b814b51c81c" -"checksum cc 1.0.48 (registry+https://github.com/rust-lang/crates.io-index)" = "f52a465a666ca3d838ebbf08b241383421412fe7ebb463527bba275526d89f76" -"checksum cfg-if 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)" = "4785bdd1c96b2a846b2bd7cc02e86b6b3dbf14e7e53446c4f54c92a361040822" -"checksum chrono 0.4.10 (registry+https://github.com/rust-lang/crates.io-index)" = "31850b4a4d6bae316f7a09e691c944c28299298837edc0a03f755618c23cbc01" -"checksum cloudabi 0.0.3 (registry+https://github.com/rust-lang/crates.io-index)" = "ddfc5b9aa5d4507acaf872de71051dfd0e309860e88966e1051e462a077aac4f" -"checksum crossbeam-deque 0.7.2 (registry+https://github.com/rust-lang/crates.io-index)" = "c3aa945d63861bfe624b55d153a39684da1e8c0bc8fba932f7ee3a3c16cea3ca" -"checksum crossbeam-epoch 0.8.0 (registry+https://github.com/rust-lang/crates.io-index)" = "5064ebdbf05ce3cb95e45c8b086f72263f4166b29b97f6baff7ef7fe047b55ac" -"checksum crossbeam-queue 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)" = "7c979cd6cfe72335896575c6b5688da489e420d36a27a0b9eb0c73db574b4a4b" -"checksum crossbeam-utils 0.6.6 (registry+https://github.com/rust-lang/crates.io-index)" = "04973fa96e96579258a5091af6003abde64af786b860f18622b82e026cca60e6" -"checksum crossbeam-utils 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)" = "ce446db02cdc3165b94ae73111e570793400d0794e46125cc4056c81cbb039f4" -"checksum either 1.5.3 (registry+https://github.com/rust-lang/crates.io-index)" = "bb1f6b1ce1c140482ea30ddd3335fc0024ac7ee112895426e0a629a6c20adfe3" -"checksum failure 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)" = "f8273f13c977665c5db7eb2b99ae520952fe5ac831ae4cd09d80c4c7042b5ed9" -"checksum failure_derive 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)" = "0bc225b78e0391e4b8683440bf2e63c2deeeb2ce5189eab46e2b68c6d3725d08" -"checksum fnv 1.0.6 (registry+https://github.com/rust-lang/crates.io-index)" = "2fad85553e09a6f881f739c29f0b00b0f01357c743266d478b68951ce23285f3" -"checksum fuchsia-zircon 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)" = "2e9763c69ebaae630ba35f74888db465e49e259ba1bc0eda7d06f4a067615d82" -"checksum fuchsia-zircon-sys 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)" = "3dcaa9ae7725d12cdb85b3ad99a434db70b468c09ded17e012d86b5c1010f7a7" -"checksum futures 0.1.29 (registry+https://github.com/rust-lang/crates.io-index)" = "1b980f2816d6ee8673b6517b52cb0e808a180efc92e5c19d02cdda79066703ef" -"checksum futures-cpupool 0.1.8 (registry+https://github.com/rust-lang/crates.io-index)" = "ab90cde24b3319636588d0c35fe03b1333857621051837ed769faefb4c2162e4" -"checksum h2 0.1.26 (registry+https://github.com/rust-lang/crates.io-index)" = "a5b34c246847f938a410a03c5458c7fee2274436675e76d8b903c08efc29c462" -"checksum hermit-abi 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)" = "f629dc602392d3ec14bfc8a09b5e644d7ffd725102b48b81e59f90f2633621d7" -"checksum http 0.1.21 (registry+https://github.com/rust-lang/crates.io-index)" = "d6ccf5ede3a895d8856620237b2f02972c1bbc78d2965ad7fe8838d4a0ed41f0" -"checksum http-body 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "6741c859c1b2463a423a1dbce98d418e6c3c3fc720fb0d45528657320920292d" -"checksum httparse 1.3.4 (registry+https://github.com/rust-lang/crates.io-index)" = "cd179ae861f0c2e53da70d892f5f3029f9594be0c41dc5269cd371691b1dc2f9" -"checksum hyper 0.12.35 (registry+https://github.com/rust-lang/crates.io-index)" = "9dbe6ed1438e1f8ad955a4701e9a944938e9519f6888d12d8558b645e247d5f6" -"checksum indexmap 1.3.0 (registry+https://github.com/rust-lang/crates.io-index)" = "712d7b3ea5827fcb9d4fda14bf4da5f136f0db2ae9c8f4bd4e2d1c6fde4e6db2" -"checksum iovec 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)" = "b2b3ea6ff95e175473f8ffe6a7eb7c00d054240321b84c57051175fe3c1e075e" -"checksum itoa 0.4.4 (registry+https://github.com/rust-lang/crates.io-index)" = "501266b7edd0174f8530248f87f99c88fbe60ca4ef3dd486835b8d8d53136f7f" -"checksum kernel32-sys 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)" = "7507624b29483431c0ba2d82aece8ca6cdba9382bff4ddd0f7490560c056098d" -"checksum lambda_runtime 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "077b8819fe6998266342efdc5154192551143f390ab758007cc7421992e61b07" -"checksum lambda_runtime_client 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)" = "f5e64758b587f1d07b6ca4814a3bc0f3db48c89cc3c895db43a23c690855b370" -"checksum lambda_runtime_core 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)" = "da1cb59e060c1068cfa386b58c202a4381c509ace85a1eadab505164f0563ca5" -"checksum lambda_runtime_errors 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "93b63ea3688df164aaa5643c5f3291cc481366d624729deb3c4dc85ee65ac20a" -"checksum lambda_runtime_errors_derive 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "38fa619ec6f1ee2371a109683d251035c83f01b8ffc10f4aa46de821836a7baf" -"checksum lazy_static 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646" -"checksum libc 0.2.66 (registry+https://github.com/rust-lang/crates.io-index)" = "d515b1f41455adea1313a4a2ac8a8a477634fbae63cc6100e3aebb207ce61558" -"checksum lock_api 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)" = "e57b3997725d2b60dbec1297f6c2e2957cc383db1cebd6be812163f969c7d586" -"checksum log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)" = "14b6052be84e6b71ab17edffc2eeabf5c2c3ae1fdb464aae35ac50c67a44e1f7" -"checksum maybe-uninit 2.0.0 (registry+https://github.com/rust-lang/crates.io-index)" = "60302e4db3a61da70c0cb7991976248362f30319e88850c487b9b95bbf059e00" -"checksum memoffset 0.5.3 (registry+https://github.com/rust-lang/crates.io-index)" = "75189eb85871ea5c2e2c15abbdd541185f63b408415e5051f5cac122d8c774b9" -"checksum mio 0.6.21 (registry+https://github.com/rust-lang/crates.io-index)" = "302dec22bcf6bae6dfb69c647187f4b4d0fb6f535521f7bc022430ce8e12008f" -"checksum mio-uds 0.6.7 (registry+https://github.com/rust-lang/crates.io-index)" = "966257a94e196b11bb43aca423754d87429960a768de9414f3691d6957abf125" -"checksum miow 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "8c1f2f3b1cf331de6896aabf6e9d55dca90356cc9960cca7eaaf408a355ae919" -"checksum net2 0.2.33 (registry+https://github.com/rust-lang/crates.io-index)" = "42550d9fb7b6684a6d404d9fa7250c2eb2646df731d1c06afc06dcee9e1bcf88" -"checksum num-integer 0.1.41 (registry+https://github.com/rust-lang/crates.io-index)" = "b85e541ef8255f6cf42bbfe4ef361305c6c135d10919ecc26126c4e5ae94bc09" -"checksum num-traits 0.2.10 (registry+https://github.com/rust-lang/crates.io-index)" = "d4c81ffc11c212fa327657cb19dd85eb7419e163b5b076bede2bdb5c974c07e4" -"checksum num_cpus 1.11.1 (registry+https://github.com/rust-lang/crates.io-index)" = "76dac5ed2a876980778b8b85f75a71b6cbf0db0b1232ee12f826bccb00d09d72" -"checksum parking_lot 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)" = "f842b1982eb6c2fe34036a4fbfb06dd185a3f5c8edfaacdf7d1ea10b07de6252" -"checksum parking_lot_core 0.6.2 (registry+https://github.com/rust-lang/crates.io-index)" = "b876b1b9e7ac6e1a74a6da34d25c42e17e8862aa409cbbbdcfc8d86c6f3bc62b" -"checksum proc-macro2 0.4.30 (registry+https://github.com/rust-lang/crates.io-index)" = "cf3d2011ab5c909338f7887f4fc896d35932e29146c12c8d01da6b22a80ba759" -"checksum proc-macro2 1.0.6 (registry+https://github.com/rust-lang/crates.io-index)" = "9c9e470a8dc4aeae2dee2f335e8f533e2d4b347e1434e5671afc49b054592f27" -"checksum quote 0.6.13 (registry+https://github.com/rust-lang/crates.io-index)" = "6ce23b6b870e8f94f81fb0a363d65d86675884b34a09043c81e5562f11c1f8e1" -"checksum quote 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)" = "053a8c8bcc71fcce321828dc897a98ab9760bef03a4fc36693c231e5b3216cfe" -"checksum redox_syscall 0.1.56 (registry+https://github.com/rust-lang/crates.io-index)" = "2439c63f3f6139d1b57529d16bc3b8bb855230c8efcc5d3a896c8bea7c3b1e84" -"checksum rustc-demangle 0.1.16 (registry+https://github.com/rust-lang/crates.io-index)" = "4c691c0e608126e00913e33f0ccf3727d5fc84573623b8d65b2df340b5201783" -"checksum rustc_version 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)" = "138e3e0acb6c9fb258b19b67cb8abd63c00679d2851805ea151465464fe9030a" -"checksum ryu 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)" = "bfa8506c1de11c9c4e4c38863ccbe02a305c8188e85a05a784c9e11e1c3910c8" -"checksum scopeguard 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)" = "b42e15e59b18a828bbf5c58ea01debb36b9b096346de35d941dcb89009f24a0d" -"checksum semver 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)" = "1d7eb9ef2c18661902cc47e535f9bc51b78acd254da71d375c2f6720d9a40403" -"checksum semver-parser 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)" = "388a1df253eca08550bef6c72392cfe7c30914bf41df5269b68cbd6ff8f570a3" -"checksum serde 1.0.104 (registry+https://github.com/rust-lang/crates.io-index)" = "414115f25f818d7dfccec8ee535d76949ae78584fc4f79a6f45a904bf8ab4449" -"checksum serde_derive 1.0.104 (registry+https://github.com/rust-lang/crates.io-index)" = "128f9e303a5a29922045a830221b8f78ec74a5f544944f3d5984f8ec3895ef64" -"checksum serde_json 1.0.44 (registry+https://github.com/rust-lang/crates.io-index)" = "48c575e0cc52bdd09b47f330f646cf59afc586e9c4e3ccd6fc1f625b8ea1dad7" -"checksum slab 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)" = "c111b5bd5695e56cffe5129854aa230b39c93a305372fdbb2668ca2394eea9f8" -"checksum smallvec 0.6.13 (registry+https://github.com/rust-lang/crates.io-index)" = "f7b0758c52e15a8b5e3691eae6cc559f08eee9406e548a4477ba4e67770a82b6" -"checksum string 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "d24114bfcceb867ca7f71a0d3fe45d45619ec47a6fbfa98cb14e14250bfa5d6d" -"checksum syn 0.15.44 (registry+https://github.com/rust-lang/crates.io-index)" = "9ca4b3b69a77cbe1ffc9e198781b7acb0c7365a883670e8f1c1bc66fba79a5c5" -"checksum syn 1.0.11 (registry+https://github.com/rust-lang/crates.io-index)" = "dff0acdb207ae2fe6d5976617f887eb1e35a2ba52c13c7234c790960cdad9238" -"checksum synstructure 0.10.2 (registry+https://github.com/rust-lang/crates.io-index)" = "02353edf96d6e4dc81aea2d8490a7e9db177bf8acb0e951c24940bf866cb313f" -"checksum synstructure 0.12.3 (registry+https://github.com/rust-lang/crates.io-index)" = "67656ea1dc1b41b1451851562ea232ec2e5a80242139f7e679ceccfb5d61f545" -"checksum time 0.1.42 (registry+https://github.com/rust-lang/crates.io-index)" = "db8dcfca086c1143c9270ac42a2bbd8a7ee477b78ac8e45b19abfb0cbede4b6f" -"checksum tokio 0.1.22 (registry+https://github.com/rust-lang/crates.io-index)" = "5a09c0b5bb588872ab2f09afa13ee6e9dac11e10a0ec9e8e3ba39a5a5d530af6" -"checksum tokio-buf 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "8fb220f46c53859a4b7ec083e41dec9778ff0b1851c0942b211edb89e0ccdc46" -"checksum tokio-codec 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "5c501eceaf96f0e1793cf26beb63da3d11c738c4a943fdf3746d81d64684c39f" -"checksum tokio-current-thread 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)" = "d16217cad7f1b840c5a97dfb3c43b0c871fef423a6e8d2118c604e843662a443" -"checksum tokio-executor 0.1.9 (registry+https://github.com/rust-lang/crates.io-index)" = "ca6df436c42b0c3330a82d855d2ef017cd793090ad550a6bc2184f4b933532ab" -"checksum tokio-fs 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)" = "3fe6dc22b08d6993916647d108a1a7d15b9cd29c4f4496c62b92c45b5041b7af" -"checksum tokio-io 0.1.12 (registry+https://github.com/rust-lang/crates.io-index)" = "5090db468dad16e1a7a54c8c67280c5e4b544f3d3e018f0b913b400261f85926" -"checksum tokio-reactor 0.1.11 (registry+https://github.com/rust-lang/crates.io-index)" = "6732fe6b53c8d11178dcb77ac6d9682af27fc6d4cb87789449152e5377377146" -"checksum tokio-sync 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)" = "d06554cce1ae4a50f42fba8023918afa931413aded705b560e29600ccf7c6d76" -"checksum tokio-tcp 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)" = "1d14b10654be682ac43efee27401d792507e30fd8d26389e1da3b185de2e4119" -"checksum tokio-threadpool 0.1.17 (registry+https://github.com/rust-lang/crates.io-index)" = "f0c32ffea4827978e9aa392d2f743d973c1dfa3730a2ed3f22ce1e6984da848c" -"checksum tokio-timer 0.2.12 (registry+https://github.com/rust-lang/crates.io-index)" = "1739638e364e558128461fc1ad84d997702c8e31c2e6b18fb99842268199e827" -"checksum tokio-udp 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)" = "f02298505547f73e60f568359ef0d016d5acd6e830ab9bc7c4a5b3403440121b" -"checksum tokio-uds 0.2.5 (registry+https://github.com/rust-lang/crates.io-index)" = "037ffc3ba0e12a0ab4aca92e5234e0dedeb48fddf6ccd260f1f150a36a9f2445" -"checksum try-lock 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)" = "e604eb7b43c06650e854be16a2a03155743d3752dd1c943f6829e26b7a36e382" -"checksum unicode-xid 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "fc72304796d0818e357ead4e000d19c9c174ab23dc11093ac919054d20a6a7fc" -"checksum unicode-xid 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "826e7639553986605ec5979c7dd957c7895e93eabed50ab2ffa7f6128a75097c" -"checksum want 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "b6395efa4784b027708f7451087e647ec73cc74f5d9bc2e418404248d679a230" -"checksum winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)" = "167dc9d6949a9b857f3451275e911c3f44255842c1f7a76f33c55103a909087a" -"checksum winapi 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)" = "8093091eeb260906a183e6ae1abdba2ef5ef2257a21801128899c3fc699229c6" -"checksum winapi-build 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "2d315eee3b34aca4797b2da6b13ed88266e6d612562a0c46390af8299fc699bc" -"checksum winapi-i686-pc-windows-gnu 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" -"checksum winapi-x86_64-pc-windows-gnu 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" -"checksum ws2_32-sys 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "d59cefebd0c892fa2dd6de581e937301d8552cb44489cdff035c6187cb63fa5e" +checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" diff --git a/tests/test-func-with-hooks/Cargo.toml b/tests/test-func-with-hooks/Cargo.toml index b015e66..56b410d 100644 --- a/tests/test-func-with-hooks/Cargo.toml +++ b/tests/test-func-with-hooks/Cargo.toml @@ -1,8 +1,11 @@ [package] name = "test-func-with-hooks" -version = "0.1.0" -authors = ["Bernardo Belchior "] -edition = "2018" +version = "0.2.0" +authors = [ + "Bernardo Belchior ", + "jerusdp " + ] +edition = "2021" # users don't have to do this # but when they do, the builder packaging still work @@ -11,5 +14,6 @@ name = "bootstrap" path = "src/main.rs" [dependencies] -lambda_runtime = "0.2" -serde_json = "1.0" \ No newline at end of file +lambda_runtime = "0.4" +serde_json = "1.0" +tokio = "1.14" \ No newline at end of file diff --git a/tests/test-func-with-hooks/src/main.rs b/tests/test-func-with-hooks/src/main.rs index 1bad45e..8327b2f 100644 --- a/tests/test-func-with-hooks/src/main.rs +++ b/tests/test-func-with-hooks/src/main.rs @@ -1,16 +1,18 @@ -use lambda_runtime::{error::HandlerError, lambda, Context}; +use lambda_runtime::{Error, Context}; use serde_json::Value; use std::fs::File; use std::io::Read; -fn main() { - lambda!(handler) +#[tokio::main] +async fn main() -> Result<(), Error> { + lambda_runtime::run(lambda_runtime::handler_fn(handler)).await?; + Ok(()) } -fn handler( +async fn handler( _event: Value, _: Context, -) -> Result { +) -> Result { let mut file = File::open("/var/task/output.log").unwrap(); let mut contents = String::new(); file.read_to_string(&mut contents).unwrap(); From 91711d93acb4554cc23b8da72a69dfb35c2684ca Mon Sep 17 00:00:00 2001 From: Jeremiah Russell Date: Sat, 20 Nov 2021 07:44:05 +0000 Subject: [PATCH 087/111] refactor: Update test_func code - Rust Edition 2021 - Latest lambda_runtime - tokio for async support --- tests/test-multi-func/Cargo.lock | 995 ++++++++------------------ tests/test-multi-func/foo/Cargo.toml | 11 +- tests/test-multi-func/foo/src/main.rs | 12 +- 3 files changed, 296 insertions(+), 722 deletions(-) diff --git a/tests/test-multi-func/Cargo.lock b/tests/test-multi-func/Cargo.lock index cd3fd5a..c83a1ba 100644 --- a/tests/test-multi-func/Cargo.lock +++ b/tests/test-multi-func/Cargo.lock @@ -1,1019 +1,590 @@ # This file is automatically @generated by Cargo. # It is not intended for manual editing. -[[package]] -name = "autocfg" -version = "0.1.7" -source = "registry+https://github.com/rust-lang/crates.io-index" +version = 3 [[package]] -name = "backtrace" -version = "0.3.40" +name = "async-stream" +version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "171374e7e3b2504e0e5236e3b59260560f9fe94bfe9ac39ba5e4e929c5590625" dependencies = [ - "backtrace-sys 0.1.32 (registry+https://github.com/rust-lang/crates.io-index)", - "cfg-if 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)", - "libc 0.2.66 (registry+https://github.com/rust-lang/crates.io-index)", - "rustc-demangle 0.1.16 (registry+https://github.com/rust-lang/crates.io-index)", + "async-stream-impl", + "futures-core", ] [[package]] -name = "backtrace-sys" -version = "0.1.32" +name = "async-stream-impl" +version = "0.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "648ed8c8d2ce5409ccd57453d9d1b214b342a0d69376a6feda1fd6cae3299308" dependencies = [ - "cc 1.0.48 (registry+https://github.com/rust-lang/crates.io-index)", - "libc 0.2.66 (registry+https://github.com/rust-lang/crates.io-index)", + "proc-macro2", + "quote", + "syn", ] [[package]] -name = "bitflags" -version = "1.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" - -[[package]] -name = "byteorder" -version = "1.3.2" +name = "autocfg" +version = "1.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cdb031dd78e28731d87d56cc8ffef4a8f36ca26c38fe2de700543e627f8a464a" [[package]] name = "bytes" -version = "0.4.12" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "byteorder 1.3.2 (registry+https://github.com/rust-lang/crates.io-index)", - "either 1.5.3 (registry+https://github.com/rust-lang/crates.io-index)", - "iovec 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "cc" -version = "1.0.48" +version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c4872d67bab6358e59559027aa3b9157c53d9358c51423c17554809a8858e0f8" [[package]] name = "cfg-if" version = "0.1.10" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4785bdd1c96b2a846b2bd7cc02e86b6b3dbf14e7e53446c4f54c92a361040822" [[package]] -name = "chrono" -version = "0.4.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "num-integer 0.1.41 (registry+https://github.com/rust-lang/crates.io-index)", - "num-traits 0.2.10 (registry+https://github.com/rust-lang/crates.io-index)", - "time 0.1.42 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "cloudabi" -version = "0.0.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "bitflags 1.2.1 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "crossbeam-deque" -version = "0.7.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "crossbeam-epoch 0.8.0 (registry+https://github.com/rust-lang/crates.io-index)", - "crossbeam-utils 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "crossbeam-epoch" -version = "0.8.0" +name = "cfg-if" +version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "autocfg 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)", - "cfg-if 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)", - "crossbeam-utils 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)", - "lazy_static 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)", - "memoffset 0.5.3 (registry+https://github.com/rust-lang/crates.io-index)", - "scopeguard 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)", -] +checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" [[package]] -name = "crossbeam-queue" -version = "0.1.2" +name = "fnv" +version = "1.0.6" source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "crossbeam-utils 0.6.6 (registry+https://github.com/rust-lang/crates.io-index)", -] +checksum = "2fad85553e09a6f881f739c29f0b00b0f01357c743266d478b68951ce23285f3" [[package]] -name = "crossbeam-utils" -version = "0.6.6" +name = "futures" +version = "0.3.17" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a12aa0eb539080d55c3f2d45a67c3b58b6b0773c1a3ca2dfec66d58c97fd66ca" dependencies = [ - "cfg-if 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)", - "lazy_static 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)", + "futures-channel", + "futures-core", + "futures-executor", + "futures-io", + "futures-sink", + "futures-task", + "futures-util", ] [[package]] -name = "crossbeam-utils" -version = "0.7.0" +name = "futures-channel" +version = "0.3.17" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5da6ba8c3bb3c165d3c7319fc1cc8304facf1fb8db99c5de877183c08a273888" dependencies = [ - "autocfg 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)", - "cfg-if 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)", - "lazy_static 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)", + "futures-core", + "futures-sink", ] [[package]] -name = "either" -version = "1.5.3" +name = "futures-core" +version = "0.3.17" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "88d1c26957f23603395cd326b0ffe64124b818f4449552f960d815cfba83a53d" [[package]] -name = "failure" -version = "0.1.6" +name = "futures-executor" +version = "0.3.17" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "45025be030969d763025784f7f355043dc6bc74093e4ecc5000ca4dc50d8745c" dependencies = [ - "backtrace 0.3.40 (registry+https://github.com/rust-lang/crates.io-index)", - "failure_derive 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)", + "futures-core", + "futures-task", + "futures-util", ] [[package]] -name = "failure_derive" -version = "0.1.6" +name = "futures-io" +version = "0.3.17" source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "proc-macro2 1.0.6 (registry+https://github.com/rust-lang/crates.io-index)", - "quote 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)", - "syn 1.0.11 (registry+https://github.com/rust-lang/crates.io-index)", - "synstructure 0.12.3 (registry+https://github.com/rust-lang/crates.io-index)", -] +checksum = "522de2a0fe3e380f1bc577ba0474108faf3f6b18321dbf60b3b9c39a75073377" [[package]] -name = "fnv" -version = "1.0.6" -source = "registry+https://github.com/rust-lang/crates.io-index" - -[[package]] -name = "fuchsia-zircon" -version = "0.3.3" +name = "futures-macro" +version = "0.3.17" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "18e4a4b95cea4b4ccbcf1c5675ca7c4ee4e9e75eb79944d07defde18068f79bb" dependencies = [ - "bitflags 1.2.1 (registry+https://github.com/rust-lang/crates.io-index)", - "fuchsia-zircon-sys 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)", + "autocfg", + "proc-macro-hack", + "proc-macro2", + "quote", + "syn", ] [[package]] -name = "fuchsia-zircon-sys" -version = "0.3.3" -source = "registry+https://github.com/rust-lang/crates.io-index" - -[[package]] -name = "futures" -version = "0.1.29" +name = "futures-sink" +version = "0.3.17" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "36ea153c13024fe480590b3e3d4cad89a0cfacecc24577b68f86c6ced9c2bc11" [[package]] -name = "futures-cpupool" -version = "0.1.8" +name = "futures-task" +version = "0.3.17" source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "futures 0.1.29 (registry+https://github.com/rust-lang/crates.io-index)", - "num_cpus 1.11.1 (registry+https://github.com/rust-lang/crates.io-index)", -] +checksum = "1d3d00f4eddb73e498a54394f228cd55853bdf059259e8e7bc6e69d408892e99" [[package]] -name = "h2" -version = "0.1.26" +name = "futures-util" +version = "0.3.17" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "36568465210a3a6ee45e1f165136d68671471a501e632e9a98d96872222b5481" dependencies = [ - "byteorder 1.3.2 (registry+https://github.com/rust-lang/crates.io-index)", - "bytes 0.4.12 (registry+https://github.com/rust-lang/crates.io-index)", - "fnv 1.0.6 (registry+https://github.com/rust-lang/crates.io-index)", - "futures 0.1.29 (registry+https://github.com/rust-lang/crates.io-index)", - "http 0.1.21 (registry+https://github.com/rust-lang/crates.io-index)", - "indexmap 1.3.0 (registry+https://github.com/rust-lang/crates.io-index)", - "log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)", - "slab 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)", - "string 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio-io 0.1.12 (registry+https://github.com/rust-lang/crates.io-index)", + "autocfg", + "futures-channel", + "futures-core", + "futures-io", + "futures-macro", + "futures-sink", + "futures-task", + "memchr", + "pin-project-lite", + "pin-utils", + "proc-macro-hack", + "proc-macro-nested", + "slab", ] [[package]] name = "hermit-abi" version = "0.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f629dc602392d3ec14bfc8a09b5e644d7ffd725102b48b81e59f90f2633621d7" dependencies = [ - "libc 0.2.66 (registry+https://github.com/rust-lang/crates.io-index)", + "libc", ] [[package]] name = "http" -version = "0.1.21" +version = "0.2.5" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1323096b05d41827dadeaee54c9981958c0f94e670bc94ed80037d1a7b8b186b" dependencies = [ - "bytes 0.4.12 (registry+https://github.com/rust-lang/crates.io-index)", - "fnv 1.0.6 (registry+https://github.com/rust-lang/crates.io-index)", - "itoa 0.4.4 (registry+https://github.com/rust-lang/crates.io-index)", + "bytes", + "fnv", + "itoa", ] [[package]] name = "http-body" -version = "0.1.0" +version = "0.4.4" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1ff4f84919677303da5f147645dbea6b1881f368d03ac84e1dc09031ebd7b2c6" dependencies = [ - "bytes 0.4.12 (registry+https://github.com/rust-lang/crates.io-index)", - "futures 0.1.29 (registry+https://github.com/rust-lang/crates.io-index)", - "http 0.1.21 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio-buf 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", + "bytes", + "http", + "pin-project-lite", ] [[package]] name = "httparse" -version = "1.3.4" +version = "1.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "acd94fdbe1d4ff688b67b04eee2e17bd50995534a61539e45adfefb45e5e5503" [[package]] -name = "hyper" -version = "0.12.35" +name = "httpdate" +version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "bytes 0.4.12 (registry+https://github.com/rust-lang/crates.io-index)", - "futures 0.1.29 (registry+https://github.com/rust-lang/crates.io-index)", - "futures-cpupool 0.1.8 (registry+https://github.com/rust-lang/crates.io-index)", - "h2 0.1.26 (registry+https://github.com/rust-lang/crates.io-index)", - "http 0.1.21 (registry+https://github.com/rust-lang/crates.io-index)", - "http-body 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", - "httparse 1.3.4 (registry+https://github.com/rust-lang/crates.io-index)", - "iovec 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)", - "itoa 0.4.4 (registry+https://github.com/rust-lang/crates.io-index)", - "log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)", - "net2 0.2.33 (registry+https://github.com/rust-lang/crates.io-index)", - "rustc_version 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)", - "time 0.1.42 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio 0.1.22 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio-buf 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio-executor 0.1.9 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio-io 0.1.12 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio-reactor 0.1.11 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio-tcp 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio-threadpool 0.1.17 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio-timer 0.2.12 (registry+https://github.com/rust-lang/crates.io-index)", - "want 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)", -] +checksum = "c4a1e36c821dbe04574f602848a19f742f4fb3c98d40449f11bcad18d6b17421" [[package]] -name = "indexmap" -version = "1.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "autocfg 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "iovec" -version = "0.1.4" +name = "hyper" +version = "0.14.15" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "436ec0091e4f20e655156a30a0df3770fe2900aa301e548e08446ec794b6953c" dependencies = [ - "libc 0.2.66 (registry+https://github.com/rust-lang/crates.io-index)", + "bytes", + "futures-channel", + "futures-core", + "futures-util", + "http", + "http-body", + "httparse", + "httpdate", + "itoa", + "pin-project-lite", + "socket2", + "tokio", + "tower-service", + "tracing", + "want", ] [[package]] name = "itoa" version = "0.4.4" source = "registry+https://github.com/rust-lang/crates.io-index" - -[[package]] -name = "kernel32-sys" -version = "0.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)", - "winapi-build 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", -] +checksum = "501266b7edd0174f8530248f87f99c88fbe60ca4ef3dd486835b8d8d53136f7f" [[package]] name = "lambda_runtime" -version = "0.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "failure 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)", - "lambda_runtime_core 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", - "log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)", - "serde 1.0.104 (registry+https://github.com/rust-lang/crates.io-index)", - "serde_derive 1.0.104 (registry+https://github.com/rust-lang/crates.io-index)", - "serde_json 1.0.44 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio 0.1.22 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "lambda_runtime_client" -version = "0.2.2" +version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "17ed88d8421123f9546cbd0c4235386803859c4a20b80a6eb613a652b486df8e" dependencies = [ - "failure 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)", - "http 0.1.21 (registry+https://github.com/rust-lang/crates.io-index)", - "hyper 0.12.35 (registry+https://github.com/rust-lang/crates.io-index)", - "lambda_runtime_errors 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", - "log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)", - "serde 1.0.104 (registry+https://github.com/rust-lang/crates.io-index)", - "serde_derive 1.0.104 (registry+https://github.com/rust-lang/crates.io-index)", - "serde_json 1.0.44 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio 0.1.22 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "lambda_runtime_core" -version = "0.1.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "backtrace 0.3.40 (registry+https://github.com/rust-lang/crates.io-index)", - "chrono 0.4.10 (registry+https://github.com/rust-lang/crates.io-index)", - "failure 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)", - "hyper 0.12.35 (registry+https://github.com/rust-lang/crates.io-index)", - "lambda_runtime_client 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)", - "lambda_runtime_errors 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", - "log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)", - "rustc_version 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio 0.1.22 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "lambda_runtime_errors" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "failure 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)", - "lambda_runtime_errors_derive 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", - "log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)", - "serde_json 1.0.44 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "lambda_runtime_errors_derive" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "proc-macro2 0.4.30 (registry+https://github.com/rust-lang/crates.io-index)", - "quote 0.6.13 (registry+https://github.com/rust-lang/crates.io-index)", - "syn 0.15.44 (registry+https://github.com/rust-lang/crates.io-index)", - "synstructure 0.10.2 (registry+https://github.com/rust-lang/crates.io-index)", + "async-stream", + "bytes", + "futures", + "http", + "hyper", + "serde", + "serde_json", + "tokio", + "tokio-stream", + "tower-service", + "tracing", + "tracing-error", ] [[package]] name = "lazy_static" version = "1.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646" [[package]] name = "libc" -version = "0.2.66" +version = "0.2.107" source = "registry+https://github.com/rust-lang/crates.io-index" - -[[package]] -name = "lock_api" -version = "0.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "scopeguard 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)", -] +checksum = "fbe5e23404da5b4f555ef85ebed98fb4083e55a00c317800bc2a50ede9f3d219" [[package]] name = "log" version = "0.4.8" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "14b6052be84e6b71ab17edffc2eeabf5c2c3ae1fdb464aae35ac50c67a44e1f7" dependencies = [ - "cfg-if 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)", + "cfg-if 0.1.10", ] [[package]] -name = "maybe-uninit" -version = "2.0.0" +name = "memchr" +version = "2.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" - -[[package]] -name = "memoffset" -version = "0.5.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "rustc_version 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)", -] +checksum = "308cc39be01b73d0d18f82a0e7b2a3df85245f84af96fdddc5d202d27e47b86a" [[package]] name = "mio" -version = "0.6.21" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "cfg-if 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)", - "fuchsia-zircon 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)", - "fuchsia-zircon-sys 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)", - "iovec 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)", - "kernel32-sys 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)", - "libc 0.2.66 (registry+https://github.com/rust-lang/crates.io-index)", - "log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)", - "miow 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)", - "net2 0.2.33 (registry+https://github.com/rust-lang/crates.io-index)", - "slab 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)", - "winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "mio-uds" -version = "0.6.7" +version = "0.7.14" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8067b404fe97c70829f082dec8bcf4f71225d7eaea1d8645349cb76fa06205cc" dependencies = [ - "iovec 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)", - "libc 0.2.66 (registry+https://github.com/rust-lang/crates.io-index)", - "mio 0.6.21 (registry+https://github.com/rust-lang/crates.io-index)", + "libc", + "log", + "miow", + "ntapi", + "winapi", ] [[package]] name = "miow" -version = "0.2.1" +version = "0.3.7" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b9f1c5b025cda876f66ef43a113f91ebc9f4ccef34843000e0adf6ebbab84e21" dependencies = [ - "kernel32-sys 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)", - "net2 0.2.33 (registry+https://github.com/rust-lang/crates.io-index)", - "winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)", - "ws2_32-sys 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)", + "winapi", ] [[package]] -name = "net2" -version = "0.2.33" +name = "ntapi" +version = "0.3.6" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3f6bb902e437b6d86e03cce10a7e2af662292c5dfef23b65899ea3ac9354ad44" dependencies = [ - "cfg-if 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)", - "libc 0.2.66 (registry+https://github.com/rust-lang/crates.io-index)", - "winapi 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)", + "winapi", ] [[package]] -name = "num-integer" -version = "0.1.41" +name = "num_cpus" +version = "1.11.1" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "76dac5ed2a876980778b8b85f75a71b6cbf0db0b1232ee12f826bccb00d09d72" dependencies = [ - "autocfg 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)", - "num-traits 0.2.10 (registry+https://github.com/rust-lang/crates.io-index)", + "hermit-abi", + "libc", ] [[package]] -name = "num-traits" -version = "0.2.10" +name = "once_cell" +version = "1.8.0" source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "autocfg 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)", -] +checksum = "692fcb63b64b1758029e0a96ee63e049ce8c5948587f2f7208df04625e5f6b56" [[package]] -name = "num_cpus" -version = "1.11.1" +name = "pin-project-lite" +version = "0.2.7" source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "hermit-abi 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)", - "libc 0.2.66 (registry+https://github.com/rust-lang/crates.io-index)", -] +checksum = "8d31d11c69a6b52a174b42bdc0c30e5e11670f90788b2c471c31c1d17d449443" [[package]] -name = "parking_lot" -version = "0.9.0" +name = "pin-utils" +version = "0.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "lock_api 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)", - "parking_lot_core 0.6.2 (registry+https://github.com/rust-lang/crates.io-index)", - "rustc_version 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)", -] +checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" [[package]] -name = "parking_lot_core" -version = "0.6.2" +name = "proc-macro-hack" +version = "0.5.19" source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "cfg-if 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)", - "cloudabi 0.0.3 (registry+https://github.com/rust-lang/crates.io-index)", - "libc 0.2.66 (registry+https://github.com/rust-lang/crates.io-index)", - "redox_syscall 0.1.56 (registry+https://github.com/rust-lang/crates.io-index)", - "rustc_version 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)", - "smallvec 0.6.13 (registry+https://github.com/rust-lang/crates.io-index)", - "winapi 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)", -] +checksum = "dbf0c48bc1d91375ae5c3cd81e3722dff1abcf81a30960240640d223f59fe0e5" [[package]] -name = "proc-macro2" -version = "0.4.30" +name = "proc-macro-nested" +version = "0.1.7" source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "unicode-xid 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", -] +checksum = "bc881b2c22681370c6a780e47af9840ef841837bc98118431d4e1868bd0c1086" [[package]] name = "proc-macro2" -version = "1.0.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "unicode-xid 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "quote" -version = "0.6.13" +version = "1.0.32" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ba508cc11742c0dc5c1659771673afbab7a0efab23aa17e854cbab0837ed0b43" dependencies = [ - "proc-macro2 0.4.30 (registry+https://github.com/rust-lang/crates.io-index)", + "unicode-xid", ] [[package]] name = "quote" version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "053a8c8bcc71fcce321828dc897a98ab9760bef03a4fc36693c231e5b3216cfe" dependencies = [ - "proc-macro2 1.0.6 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "redox_syscall" -version = "0.1.56" -source = "registry+https://github.com/rust-lang/crates.io-index" - -[[package]] -name = "rustc-demangle" -version = "0.1.16" -source = "registry+https://github.com/rust-lang/crates.io-index" - -[[package]] -name = "rustc_version" -version = "0.2.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "semver 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)", + "proc-macro2", ] [[package]] name = "ryu" version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" - -[[package]] -name = "scopeguard" -version = "1.0.0" -source = "registry+https://github.com/rust-lang/crates.io-index" - -[[package]] -name = "semver" -version = "0.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "semver-parser 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "semver-parser" -version = "0.7.0" -source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bfa8506c1de11c9c4e4c38863ccbe02a305c8188e85a05a784c9e11e1c3910c8" [[package]] name = "serde" version = "1.0.104" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "414115f25f818d7dfccec8ee535d76949ae78584fc4f79a6f45a904bf8ab4449" +dependencies = [ + "serde_derive", +] [[package]] name = "serde_derive" version = "1.0.104" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "128f9e303a5a29922045a830221b8f78ec74a5f544944f3d5984f8ec3895ef64" dependencies = [ - "proc-macro2 1.0.6 (registry+https://github.com/rust-lang/crates.io-index)", - "quote 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)", - "syn 1.0.11 (registry+https://github.com/rust-lang/crates.io-index)", + "proc-macro2", + "quote", + "syn", ] [[package]] name = "serde_json" version = "1.0.44" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "48c575e0cc52bdd09b47f330f646cf59afc586e9c4e3ccd6fc1f625b8ea1dad7" dependencies = [ - "itoa 0.4.4 (registry+https://github.com/rust-lang/crates.io-index)", - "ryu 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)", - "serde 1.0.104 (registry+https://github.com/rust-lang/crates.io-index)", + "itoa", + "ryu", + "serde", ] [[package]] -name = "slab" -version = "0.4.2" -source = "registry+https://github.com/rust-lang/crates.io-index" - -[[package]] -name = "smallvec" -version = "0.6.13" +name = "sharded-slab" +version = "0.1.4" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "900fba806f70c630b0a382d0d825e17a0f19fcd059a2ade1ff237bcddf446b31" dependencies = [ - "maybe-uninit 2.0.0 (registry+https://github.com/rust-lang/crates.io-index)", + "lazy_static", ] [[package]] -name = "string" -version = "0.2.1" +name = "slab" +version = "0.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "bytes 0.4.12 (registry+https://github.com/rust-lang/crates.io-index)", -] +checksum = "c111b5bd5695e56cffe5129854aa230b39c93a305372fdbb2668ca2394eea9f8" [[package]] -name = "syn" -version = "0.15.44" +name = "socket2" +version = "0.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5dc90fe6c7be1a323296982db1836d1ea9e47b6839496dde9a541bc496df3516" dependencies = [ - "proc-macro2 0.4.30 (registry+https://github.com/rust-lang/crates.io-index)", - "quote 0.6.13 (registry+https://github.com/rust-lang/crates.io-index)", - "unicode-xid 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", + "libc", + "winapi", ] [[package]] name = "syn" -version = "1.0.11" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "proc-macro2 1.0.6 (registry+https://github.com/rust-lang/crates.io-index)", - "quote 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)", - "unicode-xid 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "synstructure" -version = "0.10.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "proc-macro2 0.4.30 (registry+https://github.com/rust-lang/crates.io-index)", - "quote 0.6.13 (registry+https://github.com/rust-lang/crates.io-index)", - "syn 0.15.44 (registry+https://github.com/rust-lang/crates.io-index)", - "unicode-xid 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "synstructure" -version = "0.12.3" +version = "1.0.81" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f2afee18b8beb5a596ecb4a2dce128c719b4ba399d34126b9e4396e3f9860966" dependencies = [ - "proc-macro2 1.0.6 (registry+https://github.com/rust-lang/crates.io-index)", - "quote 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)", - "syn 1.0.11 (registry+https://github.com/rust-lang/crates.io-index)", - "unicode-xid 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)", + "proc-macro2", + "quote", + "unicode-xid", ] [[package]] name = "test-func" -version = "0.1.0" +version = "0.2.0" dependencies = [ - "lambda_runtime 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)", - "serde_json 1.0.44 (registry+https://github.com/rust-lang/crates.io-index)", + "lambda_runtime", + "serde_json", + "tokio", ] [[package]] -name = "time" -version = "0.1.42" +name = "thread_local" +version = "1.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8018d24e04c95ac8790716a5987d0fec4f8b27249ffa0f7d33f1369bdfb88cbd" dependencies = [ - "libc 0.2.66 (registry+https://github.com/rust-lang/crates.io-index)", - "redox_syscall 0.1.56 (registry+https://github.com/rust-lang/crates.io-index)", - "winapi 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)", + "once_cell", ] [[package]] name = "tokio" -version = "0.1.22" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "bytes 0.4.12 (registry+https://github.com/rust-lang/crates.io-index)", - "futures 0.1.29 (registry+https://github.com/rust-lang/crates.io-index)", - "mio 0.6.21 (registry+https://github.com/rust-lang/crates.io-index)", - "num_cpus 1.11.1 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio-codec 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio-current-thread 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio-executor 0.1.9 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio-fs 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio-io 0.1.12 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio-reactor 0.1.11 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio-sync 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio-tcp 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio-threadpool 0.1.17 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio-timer 0.2.12 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio-udp 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio-uds 0.2.5 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "tokio-buf" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "bytes 0.4.12 (registry+https://github.com/rust-lang/crates.io-index)", - "either 1.5.3 (registry+https://github.com/rust-lang/crates.io-index)", - "futures 0.1.29 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "tokio-codec" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "bytes 0.4.12 (registry+https://github.com/rust-lang/crates.io-index)", - "futures 0.1.29 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio-io 0.1.12 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "tokio-current-thread" -version = "0.1.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "futures 0.1.29 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio-executor 0.1.9 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "tokio-executor" -version = "0.1.9" +version = "1.14.0" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "70e992e41e0d2fb9f755b37446f20900f64446ef54874f40a60c78f021ac6144" dependencies = [ - "crossbeam-utils 0.6.6 (registry+https://github.com/rust-lang/crates.io-index)", - "futures 0.1.29 (registry+https://github.com/rust-lang/crates.io-index)", + "autocfg", + "bytes", + "libc", + "memchr", + "mio", + "num_cpus", + "pin-project-lite", + "tokio-macros", + "winapi", ] [[package]] -name = "tokio-fs" -version = "0.1.6" +name = "tokio-macros" +version = "1.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c9efc1aba077437943f7515666aa2b882dfabfbfdf89c819ea75a8d6e9eaba5e" dependencies = [ - "futures 0.1.29 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio-io 0.1.12 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio-threadpool 0.1.17 (registry+https://github.com/rust-lang/crates.io-index)", + "proc-macro2", + "quote", + "syn", ] [[package]] -name = "tokio-io" -version = "0.1.12" +name = "tokio-stream" +version = "0.1.8" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "50145484efff8818b5ccd256697f36863f587da82cf8b409c53adf1e840798e3" dependencies = [ - "bytes 0.4.12 (registry+https://github.com/rust-lang/crates.io-index)", - "futures 0.1.29 (registry+https://github.com/rust-lang/crates.io-index)", - "log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)", + "futures-core", + "pin-project-lite", + "tokio", ] [[package]] -name = "tokio-reactor" -version = "0.1.11" +name = "tower-service" +version = "0.3.1" source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "crossbeam-utils 0.6.6 (registry+https://github.com/rust-lang/crates.io-index)", - "futures 0.1.29 (registry+https://github.com/rust-lang/crates.io-index)", - "lazy_static 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)", - "log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)", - "mio 0.6.21 (registry+https://github.com/rust-lang/crates.io-index)", - "num_cpus 1.11.1 (registry+https://github.com/rust-lang/crates.io-index)", - "parking_lot 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)", - "slab 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio-executor 0.1.9 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio-io 0.1.12 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio-sync 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)", -] +checksum = "360dfd1d6d30e05fda32ace2c8c70e9c0a9da713275777f5a4dbb8a1893930c6" [[package]] -name = "tokio-sync" -version = "0.1.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "fnv 1.0.6 (registry+https://github.com/rust-lang/crates.io-index)", - "futures 0.1.29 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[[package]] -name = "tokio-tcp" -version = "0.1.3" +name = "tracing" +version = "0.1.29" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "375a639232caf30edfc78e8d89b2d4c375515393e7af7e16f01cd96917fb2105" dependencies = [ - "bytes 0.4.12 (registry+https://github.com/rust-lang/crates.io-index)", - "futures 0.1.29 (registry+https://github.com/rust-lang/crates.io-index)", - "iovec 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)", - "mio 0.6.21 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio-io 0.1.12 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio-reactor 0.1.11 (registry+https://github.com/rust-lang/crates.io-index)", + "cfg-if 1.0.0", + "log", + "pin-project-lite", + "tracing-attributes", + "tracing-core", ] [[package]] -name = "tokio-threadpool" -version = "0.1.17" +name = "tracing-attributes" +version = "0.1.18" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f4f480b8f81512e825f337ad51e94c1eb5d3bbdf2b363dcd01e2b19a9ffe3f8e" dependencies = [ - "crossbeam-deque 0.7.2 (registry+https://github.com/rust-lang/crates.io-index)", - "crossbeam-queue 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)", - "crossbeam-utils 0.6.6 (registry+https://github.com/rust-lang/crates.io-index)", - "futures 0.1.29 (registry+https://github.com/rust-lang/crates.io-index)", - "lazy_static 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)", - "log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)", - "num_cpus 1.11.1 (registry+https://github.com/rust-lang/crates.io-index)", - "slab 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio-executor 0.1.9 (registry+https://github.com/rust-lang/crates.io-index)", + "proc-macro2", + "quote", + "syn", ] [[package]] -name = "tokio-timer" -version = "0.2.12" +name = "tracing-core" +version = "0.1.21" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1f4ed65637b8390770814083d20756f87bfa2c21bf2f110babdc5438351746e4" dependencies = [ - "crossbeam-utils 0.6.6 (registry+https://github.com/rust-lang/crates.io-index)", - "futures 0.1.29 (registry+https://github.com/rust-lang/crates.io-index)", - "slab 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio-executor 0.1.9 (registry+https://github.com/rust-lang/crates.io-index)", + "lazy_static", ] [[package]] -name = "tokio-udp" -version = "0.1.5" +name = "tracing-error" +version = "0.1.2" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b4d7c0b83d4a500748fa5879461652b361edf5c9d51ede2a2ac03875ca185e24" dependencies = [ - "bytes 0.4.12 (registry+https://github.com/rust-lang/crates.io-index)", - "futures 0.1.29 (registry+https://github.com/rust-lang/crates.io-index)", - "log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)", - "mio 0.6.21 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio-codec 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio-io 0.1.12 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio-reactor 0.1.11 (registry+https://github.com/rust-lang/crates.io-index)", + "tracing", + "tracing-subscriber", ] [[package]] -name = "tokio-uds" -version = "0.2.5" +name = "tracing-subscriber" +version = "0.2.25" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0e0d2eaa99c3c2e41547cfa109e910a68ea03823cccad4a0525dcbc9b01e8c71" dependencies = [ - "bytes 0.4.12 (registry+https://github.com/rust-lang/crates.io-index)", - "futures 0.1.29 (registry+https://github.com/rust-lang/crates.io-index)", - "iovec 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)", - "libc 0.2.66 (registry+https://github.com/rust-lang/crates.io-index)", - "log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)", - "mio 0.6.21 (registry+https://github.com/rust-lang/crates.io-index)", - "mio-uds 0.6.7 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio-codec 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio-io 0.1.12 (registry+https://github.com/rust-lang/crates.io-index)", - "tokio-reactor 0.1.11 (registry+https://github.com/rust-lang/crates.io-index)", + "sharded-slab", + "thread_local", + "tracing-core", ] [[package]] name = "try-lock" version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" - -[[package]] -name = "unicode-xid" -version = "0.1.0" -source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e604eb7b43c06650e854be16a2a03155743d3752dd1c943f6829e26b7a36e382" [[package]] name = "unicode-xid" version = "0.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "826e7639553986605ec5979c7dd957c7895e93eabed50ab2ffa7f6128a75097c" [[package]] name = "want" -version = "0.2.0" +version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1ce8a968cb1cd110d136ff8b819a556d6fb6d919363c61534f6860c7eb172ba0" dependencies = [ - "futures 0.1.29 (registry+https://github.com/rust-lang/crates.io-index)", - "log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)", - "try-lock 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)", + "log", + "try-lock", ] [[package]] name = "winapi" -version = "0.2.8" -source = "registry+https://github.com/rust-lang/crates.io-index" - -[[package]] -name = "winapi" -version = "0.3.8" +version = "0.3.9" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419" dependencies = [ - "winapi-i686-pc-windows-gnu 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)", - "winapi-x86_64-pc-windows-gnu 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)", + "winapi-i686-pc-windows-gnu", + "winapi-x86_64-pc-windows-gnu", ] -[[package]] -name = "winapi-build" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" - [[package]] name = "winapi-i686-pc-windows-gnu" version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" [[package]] name = "winapi-x86_64-pc-windows-gnu" version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" - -[[package]] -name = "ws2_32-sys" -version = "0.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -dependencies = [ - "winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)", - "winapi-build 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)", -] - -[metadata] -"checksum autocfg 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)" = "1d49d90015b3c36167a20fe2810c5cd875ad504b39cff3d4eae7977e6b7c1cb2" -"checksum backtrace 0.3.40 (registry+https://github.com/rust-lang/crates.io-index)" = "924c76597f0d9ca25d762c25a4d369d51267536465dc5064bdf0eb073ed477ea" -"checksum backtrace-sys 0.1.32 (registry+https://github.com/rust-lang/crates.io-index)" = "5d6575f128516de27e3ce99689419835fce9643a9b215a14d2b5b685be018491" -"checksum bitflags 1.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "cf1de2fe8c75bc145a2f577add951f8134889b4795d47466a54a5c846d691693" -"checksum byteorder 1.3.2 (registry+https://github.com/rust-lang/crates.io-index)" = "a7c3dd8985a7111efc5c80b44e23ecdd8c007de8ade3b96595387e812b957cf5" -"checksum bytes 0.4.12 (registry+https://github.com/rust-lang/crates.io-index)" = "206fdffcfa2df7cbe15601ef46c813fce0965eb3286db6b56c583b814b51c81c" -"checksum cc 1.0.48 (registry+https://github.com/rust-lang/crates.io-index)" = "f52a465a666ca3d838ebbf08b241383421412fe7ebb463527bba275526d89f76" -"checksum cfg-if 0.1.10 (registry+https://github.com/rust-lang/crates.io-index)" = "4785bdd1c96b2a846b2bd7cc02e86b6b3dbf14e7e53446c4f54c92a361040822" -"checksum chrono 0.4.10 (registry+https://github.com/rust-lang/crates.io-index)" = "31850b4a4d6bae316f7a09e691c944c28299298837edc0a03f755618c23cbc01" -"checksum cloudabi 0.0.3 (registry+https://github.com/rust-lang/crates.io-index)" = "ddfc5b9aa5d4507acaf872de71051dfd0e309860e88966e1051e462a077aac4f" -"checksum crossbeam-deque 0.7.2 (registry+https://github.com/rust-lang/crates.io-index)" = "c3aa945d63861bfe624b55d153a39684da1e8c0bc8fba932f7ee3a3c16cea3ca" -"checksum crossbeam-epoch 0.8.0 (registry+https://github.com/rust-lang/crates.io-index)" = "5064ebdbf05ce3cb95e45c8b086f72263f4166b29b97f6baff7ef7fe047b55ac" -"checksum crossbeam-queue 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)" = "7c979cd6cfe72335896575c6b5688da489e420d36a27a0b9eb0c73db574b4a4b" -"checksum crossbeam-utils 0.6.6 (registry+https://github.com/rust-lang/crates.io-index)" = "04973fa96e96579258a5091af6003abde64af786b860f18622b82e026cca60e6" -"checksum crossbeam-utils 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)" = "ce446db02cdc3165b94ae73111e570793400d0794e46125cc4056c81cbb039f4" -"checksum either 1.5.3 (registry+https://github.com/rust-lang/crates.io-index)" = "bb1f6b1ce1c140482ea30ddd3335fc0024ac7ee112895426e0a629a6c20adfe3" -"checksum failure 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)" = "f8273f13c977665c5db7eb2b99ae520952fe5ac831ae4cd09d80c4c7042b5ed9" -"checksum failure_derive 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)" = "0bc225b78e0391e4b8683440bf2e63c2deeeb2ce5189eab46e2b68c6d3725d08" -"checksum fnv 1.0.6 (registry+https://github.com/rust-lang/crates.io-index)" = "2fad85553e09a6f881f739c29f0b00b0f01357c743266d478b68951ce23285f3" -"checksum fuchsia-zircon 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)" = "2e9763c69ebaae630ba35f74888db465e49e259ba1bc0eda7d06f4a067615d82" -"checksum fuchsia-zircon-sys 0.3.3 (registry+https://github.com/rust-lang/crates.io-index)" = "3dcaa9ae7725d12cdb85b3ad99a434db70b468c09ded17e012d86b5c1010f7a7" -"checksum futures 0.1.29 (registry+https://github.com/rust-lang/crates.io-index)" = "1b980f2816d6ee8673b6517b52cb0e808a180efc92e5c19d02cdda79066703ef" -"checksum futures-cpupool 0.1.8 (registry+https://github.com/rust-lang/crates.io-index)" = "ab90cde24b3319636588d0c35fe03b1333857621051837ed769faefb4c2162e4" -"checksum h2 0.1.26 (registry+https://github.com/rust-lang/crates.io-index)" = "a5b34c246847f938a410a03c5458c7fee2274436675e76d8b903c08efc29c462" -"checksum hermit-abi 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)" = "f629dc602392d3ec14bfc8a09b5e644d7ffd725102b48b81e59f90f2633621d7" -"checksum http 0.1.21 (registry+https://github.com/rust-lang/crates.io-index)" = "d6ccf5ede3a895d8856620237b2f02972c1bbc78d2965ad7fe8838d4a0ed41f0" -"checksum http-body 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "6741c859c1b2463a423a1dbce98d418e6c3c3fc720fb0d45528657320920292d" -"checksum httparse 1.3.4 (registry+https://github.com/rust-lang/crates.io-index)" = "cd179ae861f0c2e53da70d892f5f3029f9594be0c41dc5269cd371691b1dc2f9" -"checksum hyper 0.12.35 (registry+https://github.com/rust-lang/crates.io-index)" = "9dbe6ed1438e1f8ad955a4701e9a944938e9519f6888d12d8558b645e247d5f6" -"checksum indexmap 1.3.0 (registry+https://github.com/rust-lang/crates.io-index)" = "712d7b3ea5827fcb9d4fda14bf4da5f136f0db2ae9c8f4bd4e2d1c6fde4e6db2" -"checksum iovec 0.1.4 (registry+https://github.com/rust-lang/crates.io-index)" = "b2b3ea6ff95e175473f8ffe6a7eb7c00d054240321b84c57051175fe3c1e075e" -"checksum itoa 0.4.4 (registry+https://github.com/rust-lang/crates.io-index)" = "501266b7edd0174f8530248f87f99c88fbe60ca4ef3dd486835b8d8d53136f7f" -"checksum kernel32-sys 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)" = "7507624b29483431c0ba2d82aece8ca6cdba9382bff4ddd0f7490560c056098d" -"checksum lambda_runtime 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "077b8819fe6998266342efdc5154192551143f390ab758007cc7421992e61b07" -"checksum lambda_runtime_client 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)" = "f5e64758b587f1d07b6ca4814a3bc0f3db48c89cc3c895db43a23c690855b370" -"checksum lambda_runtime_core 0.1.2 (registry+https://github.com/rust-lang/crates.io-index)" = "da1cb59e060c1068cfa386b58c202a4381c509ace85a1eadab505164f0563ca5" -"checksum lambda_runtime_errors 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "93b63ea3688df164aaa5643c5f3291cc481366d624729deb3c4dc85ee65ac20a" -"checksum lambda_runtime_errors_derive 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "38fa619ec6f1ee2371a109683d251035c83f01b8ffc10f4aa46de821836a7baf" -"checksum lazy_static 1.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646" -"checksum libc 0.2.66 (registry+https://github.com/rust-lang/crates.io-index)" = "d515b1f41455adea1313a4a2ac8a8a477634fbae63cc6100e3aebb207ce61558" -"checksum lock_api 0.3.2 (registry+https://github.com/rust-lang/crates.io-index)" = "e57b3997725d2b60dbec1297f6c2e2957cc383db1cebd6be812163f969c7d586" -"checksum log 0.4.8 (registry+https://github.com/rust-lang/crates.io-index)" = "14b6052be84e6b71ab17edffc2eeabf5c2c3ae1fdb464aae35ac50c67a44e1f7" -"checksum maybe-uninit 2.0.0 (registry+https://github.com/rust-lang/crates.io-index)" = "60302e4db3a61da70c0cb7991976248362f30319e88850c487b9b95bbf059e00" -"checksum memoffset 0.5.3 (registry+https://github.com/rust-lang/crates.io-index)" = "75189eb85871ea5c2e2c15abbdd541185f63b408415e5051f5cac122d8c774b9" -"checksum mio 0.6.21 (registry+https://github.com/rust-lang/crates.io-index)" = "302dec22bcf6bae6dfb69c647187f4b4d0fb6f535521f7bc022430ce8e12008f" -"checksum mio-uds 0.6.7 (registry+https://github.com/rust-lang/crates.io-index)" = "966257a94e196b11bb43aca423754d87429960a768de9414f3691d6957abf125" -"checksum miow 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "8c1f2f3b1cf331de6896aabf6e9d55dca90356cc9960cca7eaaf408a355ae919" -"checksum net2 0.2.33 (registry+https://github.com/rust-lang/crates.io-index)" = "42550d9fb7b6684a6d404d9fa7250c2eb2646df731d1c06afc06dcee9e1bcf88" -"checksum num-integer 0.1.41 (registry+https://github.com/rust-lang/crates.io-index)" = "b85e541ef8255f6cf42bbfe4ef361305c6c135d10919ecc26126c4e5ae94bc09" -"checksum num-traits 0.2.10 (registry+https://github.com/rust-lang/crates.io-index)" = "d4c81ffc11c212fa327657cb19dd85eb7419e163b5b076bede2bdb5c974c07e4" -"checksum num_cpus 1.11.1 (registry+https://github.com/rust-lang/crates.io-index)" = "76dac5ed2a876980778b8b85f75a71b6cbf0db0b1232ee12f826bccb00d09d72" -"checksum parking_lot 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)" = "f842b1982eb6c2fe34036a4fbfb06dd185a3f5c8edfaacdf7d1ea10b07de6252" -"checksum parking_lot_core 0.6.2 (registry+https://github.com/rust-lang/crates.io-index)" = "b876b1b9e7ac6e1a74a6da34d25c42e17e8862aa409cbbbdcfc8d86c6f3bc62b" -"checksum proc-macro2 0.4.30 (registry+https://github.com/rust-lang/crates.io-index)" = "cf3d2011ab5c909338f7887f4fc896d35932e29146c12c8d01da6b22a80ba759" -"checksum proc-macro2 1.0.6 (registry+https://github.com/rust-lang/crates.io-index)" = "9c9e470a8dc4aeae2dee2f335e8f533e2d4b347e1434e5671afc49b054592f27" -"checksum quote 0.6.13 (registry+https://github.com/rust-lang/crates.io-index)" = "6ce23b6b870e8f94f81fb0a363d65d86675884b34a09043c81e5562f11c1f8e1" -"checksum quote 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)" = "053a8c8bcc71fcce321828dc897a98ab9760bef03a4fc36693c231e5b3216cfe" -"checksum redox_syscall 0.1.56 (registry+https://github.com/rust-lang/crates.io-index)" = "2439c63f3f6139d1b57529d16bc3b8bb855230c8efcc5d3a896c8bea7c3b1e84" -"checksum rustc-demangle 0.1.16 (registry+https://github.com/rust-lang/crates.io-index)" = "4c691c0e608126e00913e33f0ccf3727d5fc84573623b8d65b2df340b5201783" -"checksum rustc_version 0.2.3 (registry+https://github.com/rust-lang/crates.io-index)" = "138e3e0acb6c9fb258b19b67cb8abd63c00679d2851805ea151465464fe9030a" -"checksum ryu 1.0.2 (registry+https://github.com/rust-lang/crates.io-index)" = "bfa8506c1de11c9c4e4c38863ccbe02a305c8188e85a05a784c9e11e1c3910c8" -"checksum scopeguard 1.0.0 (registry+https://github.com/rust-lang/crates.io-index)" = "b42e15e59b18a828bbf5c58ea01debb36b9b096346de35d941dcb89009f24a0d" -"checksum semver 0.9.0 (registry+https://github.com/rust-lang/crates.io-index)" = "1d7eb9ef2c18661902cc47e535f9bc51b78acd254da71d375c2f6720d9a40403" -"checksum semver-parser 0.7.0 (registry+https://github.com/rust-lang/crates.io-index)" = "388a1df253eca08550bef6c72392cfe7c30914bf41df5269b68cbd6ff8f570a3" -"checksum serde 1.0.104 (registry+https://github.com/rust-lang/crates.io-index)" = "414115f25f818d7dfccec8ee535d76949ae78584fc4f79a6f45a904bf8ab4449" -"checksum serde_derive 1.0.104 (registry+https://github.com/rust-lang/crates.io-index)" = "128f9e303a5a29922045a830221b8f78ec74a5f544944f3d5984f8ec3895ef64" -"checksum serde_json 1.0.44 (registry+https://github.com/rust-lang/crates.io-index)" = "48c575e0cc52bdd09b47f330f646cf59afc586e9c4e3ccd6fc1f625b8ea1dad7" -"checksum slab 0.4.2 (registry+https://github.com/rust-lang/crates.io-index)" = "c111b5bd5695e56cffe5129854aa230b39c93a305372fdbb2668ca2394eea9f8" -"checksum smallvec 0.6.13 (registry+https://github.com/rust-lang/crates.io-index)" = "f7b0758c52e15a8b5e3691eae6cc559f08eee9406e548a4477ba4e67770a82b6" -"checksum string 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "d24114bfcceb867ca7f71a0d3fe45d45619ec47a6fbfa98cb14e14250bfa5d6d" -"checksum syn 0.15.44 (registry+https://github.com/rust-lang/crates.io-index)" = "9ca4b3b69a77cbe1ffc9e198781b7acb0c7365a883670e8f1c1bc66fba79a5c5" -"checksum syn 1.0.11 (registry+https://github.com/rust-lang/crates.io-index)" = "dff0acdb207ae2fe6d5976617f887eb1e35a2ba52c13c7234c790960cdad9238" -"checksum synstructure 0.10.2 (registry+https://github.com/rust-lang/crates.io-index)" = "02353edf96d6e4dc81aea2d8490a7e9db177bf8acb0e951c24940bf866cb313f" -"checksum synstructure 0.12.3 (registry+https://github.com/rust-lang/crates.io-index)" = "67656ea1dc1b41b1451851562ea232ec2e5a80242139f7e679ceccfb5d61f545" -"checksum time 0.1.42 (registry+https://github.com/rust-lang/crates.io-index)" = "db8dcfca086c1143c9270ac42a2bbd8a7ee477b78ac8e45b19abfb0cbede4b6f" -"checksum tokio 0.1.22 (registry+https://github.com/rust-lang/crates.io-index)" = "5a09c0b5bb588872ab2f09afa13ee6e9dac11e10a0ec9e8e3ba39a5a5d530af6" -"checksum tokio-buf 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "8fb220f46c53859a4b7ec083e41dec9778ff0b1851c0942b211edb89e0ccdc46" -"checksum tokio-codec 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "5c501eceaf96f0e1793cf26beb63da3d11c738c4a943fdf3746d81d64684c39f" -"checksum tokio-current-thread 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)" = "d16217cad7f1b840c5a97dfb3c43b0c871fef423a6e8d2118c604e843662a443" -"checksum tokio-executor 0.1.9 (registry+https://github.com/rust-lang/crates.io-index)" = "ca6df436c42b0c3330a82d855d2ef017cd793090ad550a6bc2184f4b933532ab" -"checksum tokio-fs 0.1.6 (registry+https://github.com/rust-lang/crates.io-index)" = "3fe6dc22b08d6993916647d108a1a7d15b9cd29c4f4496c62b92c45b5041b7af" -"checksum tokio-io 0.1.12 (registry+https://github.com/rust-lang/crates.io-index)" = "5090db468dad16e1a7a54c8c67280c5e4b544f3d3e018f0b913b400261f85926" -"checksum tokio-reactor 0.1.11 (registry+https://github.com/rust-lang/crates.io-index)" = "6732fe6b53c8d11178dcb77ac6d9682af27fc6d4cb87789449152e5377377146" -"checksum tokio-sync 0.1.7 (registry+https://github.com/rust-lang/crates.io-index)" = "d06554cce1ae4a50f42fba8023918afa931413aded705b560e29600ccf7c6d76" -"checksum tokio-tcp 0.1.3 (registry+https://github.com/rust-lang/crates.io-index)" = "1d14b10654be682ac43efee27401d792507e30fd8d26389e1da3b185de2e4119" -"checksum tokio-threadpool 0.1.17 (registry+https://github.com/rust-lang/crates.io-index)" = "f0c32ffea4827978e9aa392d2f743d973c1dfa3730a2ed3f22ce1e6984da848c" -"checksum tokio-timer 0.2.12 (registry+https://github.com/rust-lang/crates.io-index)" = "1739638e364e558128461fc1ad84d997702c8e31c2e6b18fb99842268199e827" -"checksum tokio-udp 0.1.5 (registry+https://github.com/rust-lang/crates.io-index)" = "f02298505547f73e60f568359ef0d016d5acd6e830ab9bc7c4a5b3403440121b" -"checksum tokio-uds 0.2.5 (registry+https://github.com/rust-lang/crates.io-index)" = "037ffc3ba0e12a0ab4aca92e5234e0dedeb48fddf6ccd260f1f150a36a9f2445" -"checksum try-lock 0.2.2 (registry+https://github.com/rust-lang/crates.io-index)" = "e604eb7b43c06650e854be16a2a03155743d3752dd1c943f6829e26b7a36e382" -"checksum unicode-xid 0.1.0 (registry+https://github.com/rust-lang/crates.io-index)" = "fc72304796d0818e357ead4e000d19c9c174ab23dc11093ac919054d20a6a7fc" -"checksum unicode-xid 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "826e7639553986605ec5979c7dd957c7895e93eabed50ab2ffa7f6128a75097c" -"checksum want 0.2.0 (registry+https://github.com/rust-lang/crates.io-index)" = "b6395efa4784b027708f7451087e647ec73cc74f5d9bc2e418404248d679a230" -"checksum winapi 0.2.8 (registry+https://github.com/rust-lang/crates.io-index)" = "167dc9d6949a9b857f3451275e911c3f44255842c1f7a76f33c55103a909087a" -"checksum winapi 0.3.8 (registry+https://github.com/rust-lang/crates.io-index)" = "8093091eeb260906a183e6ae1abdba2ef5ef2257a21801128899c3fc699229c6" -"checksum winapi-build 0.1.1 (registry+https://github.com/rust-lang/crates.io-index)" = "2d315eee3b34aca4797b2da6b13ed88266e6d612562a0c46390af8299fc699bc" -"checksum winapi-i686-pc-windows-gnu 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" -"checksum winapi-x86_64-pc-windows-gnu 0.4.0 (registry+https://github.com/rust-lang/crates.io-index)" = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" -"checksum ws2_32-sys 0.2.1 (registry+https://github.com/rust-lang/crates.io-index)" = "d59cefebd0c892fa2dd6de581e937301d8552cb44489cdff035c6187cb63fa5e" +checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" diff --git a/tests/test-multi-func/foo/Cargo.toml b/tests/test-multi-func/foo/Cargo.toml index 2a883ca..c33cb5e 100644 --- a/tests/test-multi-func/foo/Cargo.toml +++ b/tests/test-multi-func/foo/Cargo.toml @@ -1,9 +1,10 @@ [package] name = "test-func" -version = "0.1.0" -authors = ["softprops "] -edition = "2018" +version = "0.2.0" +authors = ["softprops ", "jerusdp "] +edition = "2021" [dependencies] -lambda_runtime = "0.2" -serde_json = "1.0" \ No newline at end of file +lambda_runtime = "0.4" +serde_json = "1.0" +tokio = "1.14" \ No newline at end of file diff --git a/tests/test-multi-func/foo/src/main.rs b/tests/test-multi-func/foo/src/main.rs index f38c7c6..7f83a6f 100644 --- a/tests/test-multi-func/foo/src/main.rs +++ b/tests/test-multi-func/foo/src/main.rs @@ -1,13 +1,15 @@ -use lambda_runtime::{error::HandlerError, lambda, Context}; +use lambda_runtime::{Error, Context}; use serde_json::Value; -fn main() { - lambda!(handler) +#[tokio::main] +async fn main() -> Result<(), Error> { + lambda_runtime::run(lambda_runtime::handler_fn(handler)).await?; + Ok(()) } -fn handler( +async fn handler( event: Value, _: Context, -) -> Result { +) -> Result { Ok(event) } \ No newline at end of file From 7745abbb1cfe7a08d32499369971e9049535e72f Mon Sep 17 00:00:00 2001 From: Jeremiah Russell Date: Wed, 24 Nov 2021 06:36:50 +0000 Subject: [PATCH 088/111] =?UTF-8?q?fix(actions):=20=F0=9F=90=9B=20ECR=20ra?= =?UTF-8?q?te=20limiting?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Change time nightly actkon fires as clashes with stable --- .github/workflows/nightly.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/nightly.yml b/.github/workflows/nightly.yml index 4851ef8..41aaca7 100644 --- a/.github/workflows/nightly.yml +++ b/.github/workflows/nightly.yml @@ -3,7 +3,7 @@ name: Build Nightly Rust on: workflow_dispatch: schedule: - - cron: '0 2 * * 3' + - cron: '0 4 * * 3' jobs: test: From acee6650e4c1a1fceaa4bdfe5c5216b313c3577a Mon Sep 17 00:00:00 2001 From: Alexander Zaitsev Date: Thu, 2 Dec 2021 22:03:35 +0300 Subject: [PATCH 089/111] feat: update rust version - update Rust to 1.57 Tested: - No --- CHANGELOG.md | 4 ++++ Dockerfile | 2 +- Makefile | 2 +- 3 files changed, 6 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index a44888d..d6db592 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,7 @@ +# 0.4.0-rust-1.57.0 + +* Upgrade to Rust [`1.56.1`](https://blog.rust-lang.org/2021/12/02/Rust-1.57.0.html) + # 0.4.0-rust-1.56.1 * Upgrade to Rust [`1.56.1`](https://blog.rust-lang.org/2021/11/01/Rust-1.56.1.html) diff --git a/Dockerfile b/Dockerfile index 0550fe7..dc4f267 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,6 +1,6 @@ FROM public.ecr.aws/lambda/provided:al2 -ARG RUST_VERSION=1.56.1 +ARG RUST_VERSION=1.57.0 RUN yum install -y jq openssl-devel gcc zip RUN set -o pipefail && curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs \ | CARGO_HOME=/cargo RUSTUP_HOME=/rustup sh -s -- -y --profile minimal --default-toolchain $RUST_VERSION diff --git a/Makefile b/Makefile index d207683..aff7041 100644 --- a/Makefile +++ b/Makefile @@ -1,6 +1,6 @@ DOCKER ?= docker INPUT_RELEASE_VERSION ?= 0.4.0 -RUST_VERSION ?= 1.56.1 +RUST_VERSION ?= 1.57.0 REPO ?= rustserverless/lambda-rust TAG ?= latest From a7f2fe65c5ec1293d45ab4ba622ad105391cb297 Mon Sep 17 00:00:00 2001 From: Alexander Zaitsev Date: Thu, 20 Jan 2022 03:44:39 +0300 Subject: [PATCH 090/111] feat: update to Rust 1.58 - update to Rust 1.58 - fix Changelog mistakes --- CHANGELOG.md | 6 +++++- Dockerfile | 2 +- Makefile | 2 +- 3 files changed, 7 insertions(+), 3 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index d6db592..1283e35 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,10 @@ +# 0.4.0-rust-1.58.0 + +* Upgrade to Rust [`1.58.0`](https://blog.rust-lang.org/2022/01/13/Rust-1.58.0.html) + # 0.4.0-rust-1.57.0 -* Upgrade to Rust [`1.56.1`](https://blog.rust-lang.org/2021/12/02/Rust-1.57.0.html) +* Upgrade to Rust [`1.57.0`](https://blog.rust-lang.org/2021/12/02/Rust-1.57.0.html) # 0.4.0-rust-1.56.1 diff --git a/Dockerfile b/Dockerfile index dc4f267..78d4280 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,6 +1,6 @@ FROM public.ecr.aws/lambda/provided:al2 -ARG RUST_VERSION=1.57.0 +ARG RUST_VERSION=1.58.0 RUN yum install -y jq openssl-devel gcc zip RUN set -o pipefail && curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs \ | CARGO_HOME=/cargo RUSTUP_HOME=/rustup sh -s -- -y --profile minimal --default-toolchain $RUST_VERSION diff --git a/Makefile b/Makefile index aff7041..e9e9406 100644 --- a/Makefile +++ b/Makefile @@ -1,6 +1,6 @@ DOCKER ?= docker INPUT_RELEASE_VERSION ?= 0.4.0 -RUST_VERSION ?= 1.57.0 +RUST_VERSION ?= 1.58.0 REPO ?= rustserverless/lambda-rust TAG ?= latest From 9a8692f89033bc3c32034d444e40153b4714e9cf Mon Sep 17 00:00:00 2001 From: Alexander Zaitsev Date: Fri, 21 Jan 2022 12:45:04 +0300 Subject: [PATCH 091/111] feat: update to Rust 1.58.1 - update to Rust 1.58.1 --- CHANGELOG.md | 4 ++++ Dockerfile | 2 +- Makefile | 2 +- 3 files changed, 6 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 1283e35..3021ee5 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,7 @@ +# 0.4.0-rust-1.58.1 + +* Upgrade to Rust [`1.58.1`](https://blog.rust-lang.org/2022/01/20/Rust-1.58.1.html) + # 0.4.0-rust-1.58.0 * Upgrade to Rust [`1.58.0`](https://blog.rust-lang.org/2022/01/13/Rust-1.58.0.html) diff --git a/Dockerfile b/Dockerfile index 78d4280..71a7ead 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,6 +1,6 @@ FROM public.ecr.aws/lambda/provided:al2 -ARG RUST_VERSION=1.58.0 +ARG RUST_VERSION=1.58.1 RUN yum install -y jq openssl-devel gcc zip RUN set -o pipefail && curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs \ | CARGO_HOME=/cargo RUSTUP_HOME=/rustup sh -s -- -y --profile minimal --default-toolchain $RUST_VERSION diff --git a/Makefile b/Makefile index e9e9406..11cd0b0 100644 --- a/Makefile +++ b/Makefile @@ -1,6 +1,6 @@ DOCKER ?= docker INPUT_RELEASE_VERSION ?= 0.4.0 -RUST_VERSION ?= 1.58.0 +RUST_VERSION ?= 1.58.1 REPO ?= rustserverless/lambda-rust TAG ?= latest From 38d3c5c48af1345baf64e60c6f395448060f320a Mon Sep 17 00:00:00 2001 From: Alexander Zaitsev Date: Fri, 21 Jan 2022 15:33:19 +0300 Subject: [PATCH 092/111] feat: add Arm64 images support - add Dockerfile for Arm64 based lambdas - update Makefile --- Dockerfile_arm64 | 11 +++++++++++ Makefile | 4 ++++ 2 files changed, 15 insertions(+) create mode 100644 Dockerfile_arm64 diff --git a/Dockerfile_arm64 b/Dockerfile_arm64 new file mode 100644 index 0000000..deabf7d --- /dev/null +++ b/Dockerfile_arm64 @@ -0,0 +1,11 @@ +FROM public.ecr.aws/lambda/provided:al2-arm + +ARG RUST_VERSION=1.58.1 +RUN yum install -y jq openssl-devel gcc zip +RUN set -o pipefail && curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs \ + | CARGO_HOME=/cargo RUSTUP_HOME=/rustup sh -s -- -y --profile minimal --default-toolchain $RUST_VERSION +COPY build.sh /usr/local/bin/ +COPY latest.sh /usr/local/bin/ +VOLUME ["/code"] +WORKDIR /code +ENTRYPOINT ["/usr/local/bin/build.sh"] diff --git a/Makefile b/Makefile index 11cd0b0..6e2c548 100644 --- a/Makefile +++ b/Makefile @@ -6,13 +6,17 @@ TAG ?= latest publish: build $(DOCKER) push $(REPO):${TAG} + $(DOCKER) push $(REPO):${TAG}-arm64 publish-tag: build publish $(DOCKER) tag $(REPO):${TAG} "$(REPO):$(INPUT_RELEASE_VERSION)-rust-$(RUST_VERSION)" + $(DOCKER) tag "$(REPO):${TAG}-arm64" "$(REPO):$(INPUT_RELEASE_VERSION)-rust-$(RUST_VERSION)-arm64" $(DOCKER) push "$(REPO):$(INPUT_RELEASE_VERSION)-rust-$(RUST_VERSION)" + $(DOCKER) push "$(REPO):$(INPUT_RELEASE_VERSION)-rust-$(RUST_VERSION)-arm64" build: $(DOCKER) build --build-arg RUST_VERSION=$(RUST_VERSION) -t $(REPO):${TAG} . + $(DOCKER) build --build-arg RUST_VERSION=$(RUST_VERSION) -t "$(REPO):${TAG}-arm64" -f Dockerfile_arm64 . test: @tests/test.sh From 74c2c43f96d05fd931dc05806fb43c3b85c7803c Mon Sep 17 00:00:00 2001 From: Alexander Zaitsev Date: Fri, 21 Jan 2022 17:17:33 +0300 Subject: [PATCH 093/111] fix: wrong ARM64 image name - fix wrong ARM64 base image name --- Dockerfile_arm64 | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Dockerfile_arm64 b/Dockerfile_arm64 index deabf7d..5d7ca67 100644 --- a/Dockerfile_arm64 +++ b/Dockerfile_arm64 @@ -1,4 +1,4 @@ -FROM public.ecr.aws/lambda/provided:al2-arm +FROM public.ecr.aws/lambda/provided:al2-arm64 ARG RUST_VERSION=1.58.1 RUN yum install -y jq openssl-devel gcc zip From eb5620ea80cee0b813075d4f6b218e025c21a62d Mon Sep 17 00:00:00 2001 From: Alexander Zaitsev Date: Fri, 21 Jan 2022 17:32:27 +0300 Subject: [PATCH 094/111] fix: optionally disable ARM64 arch by default - since our GitHub Actions now doesn't work well with ARM architecture. So I decided to disable ARM images by default. However, any interested people can still grab the Docker file image and build corresponding image locally (e.g. will be useful for Macbook M1 devs). Later, than Github Actions will work natively on ARM - we will integrate it into our CI --- Makefile | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/Makefile b/Makefile index 6e2c548..dbe3311 100644 --- a/Makefile +++ b/Makefile @@ -6,16 +6,22 @@ TAG ?= latest publish: build $(DOCKER) push $(REPO):${TAG} - $(DOCKER) push $(REPO):${TAG}-arm64 + +publish-arm64: build-arm64 + $(DOCKER) push $(REPO):${TAG}-arm64 publish-tag: build publish $(DOCKER) tag $(REPO):${TAG} "$(REPO):$(INPUT_RELEASE_VERSION)-rust-$(RUST_VERSION)" - $(DOCKER) tag "$(REPO):${TAG}-arm64" "$(REPO):$(INPUT_RELEASE_VERSION)-rust-$(RUST_VERSION)-arm64" $(DOCKER) push "$(REPO):$(INPUT_RELEASE_VERSION)-rust-$(RUST_VERSION)" + +publish-tag-arm64: build-arm64 publish-arm64 + $(DOCKER) tag "$(REPO):${TAG}-arm64" "$(REPO):$(INPUT_RELEASE_VERSION)-rust-$(RUST_VERSION)-arm64" $(DOCKER) push "$(REPO):$(INPUT_RELEASE_VERSION)-rust-$(RUST_VERSION)-arm64" build: $(DOCKER) build --build-arg RUST_VERSION=$(RUST_VERSION) -t $(REPO):${TAG} . + +build-arm64: $(DOCKER) build --build-arg RUST_VERSION=$(RUST_VERSION) -t "$(REPO):${TAG}-arm64" -f Dockerfile_arm64 . test: From 8dff2c55863ff6c0b56dc8694eae58651f174382 Mon Sep 17 00:00:00 2001 From: Tianyi Song <42670338+tysg@users.noreply.github.com> Date: Fri, 4 Mar 2022 14:39:23 +0800 Subject: [PATCH 095/111] DONT MERGE add qemu to untrusted --- .github/workflows/untrusted.yml | 3 +++ Dockerfile | 2 +- 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/.github/workflows/untrusted.yml b/.github/workflows/untrusted.yml index b611376..78fbfcf 100644 --- a/.github/workflows/untrusted.yml +++ b/.github/workflows/untrusted.yml @@ -9,6 +9,9 @@ jobs: test: runs-on: ubuntu-latest steps: + - + name: Set up QEMU + uses: docker/setup-qemu-action@v1 - uses: actions/checkout@v1 - name: Test run: make test \ No newline at end of file diff --git a/Dockerfile b/Dockerfile index 71a7ead..5d7ca67 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,4 +1,4 @@ -FROM public.ecr.aws/lambda/provided:al2 +FROM public.ecr.aws/lambda/provided:al2-arm64 ARG RUST_VERSION=1.58.1 RUN yum install -y jq openssl-devel gcc zip From 244f01524d34d3520498d39fde18f4cee16d68dc Mon Sep 17 00:00:00 2001 From: Tianyi Song <42670338+tysg@users.noreply.github.com> Date: Fri, 4 Mar 2022 14:56:11 +0800 Subject: [PATCH 096/111] If this fails then the previous commit has worked --- .github/workflows/untrusted.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/untrusted.yml b/.github/workflows/untrusted.yml index 78fbfcf..539cefd 100644 --- a/.github/workflows/untrusted.yml +++ b/.github/workflows/untrusted.yml @@ -9,9 +9,9 @@ jobs: test: runs-on: ubuntu-latest steps: - - - name: Set up QEMU - uses: docker/setup-qemu-action@v1 + # - + # name: Set up QEMU + # uses: docker/setup-qemu-action@v1 - uses: actions/checkout@v1 - name: Test run: make test \ No newline at end of file From 66becca8d1ae0c7dfc5440f79136ef9b4efc6b13 Mon Sep 17 00:00:00 2001 From: Tianyi Song <42670338+tysg@users.noreply.github.com> Date: Fri, 4 Mar 2022 15:01:07 +0800 Subject: [PATCH 097/111] Add build step to untrusted workflow --- .github/workflows/untrusted.yml | 2 ++ Dockerfile | 2 +- 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/.github/workflows/untrusted.yml b/.github/workflows/untrusted.yml index 539cefd..394f293 100644 --- a/.github/workflows/untrusted.yml +++ b/.github/workflows/untrusted.yml @@ -13,5 +13,7 @@ jobs: # name: Set up QEMU # uses: docker/setup-qemu-action@v1 - uses: actions/checkout@v1 + - name: Build + run: make build-arm64 - name: Test run: make test \ No newline at end of file diff --git a/Dockerfile b/Dockerfile index 5d7ca67..71a7ead 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,4 +1,4 @@ -FROM public.ecr.aws/lambda/provided:al2-arm64 +FROM public.ecr.aws/lambda/provided:al2 ARG RUST_VERSION=1.58.1 RUN yum install -y jq openssl-devel gcc zip From 1fd001ac1f8829cd3d8ee290cfdddf7b1a8fdb26 Mon Sep 17 00:00:00 2001 From: Tianyi Song <42670338+tysg@users.noreply.github.com> Date: Fri, 4 Mar 2022 15:02:22 +0800 Subject: [PATCH 098/111] Test building with QEMU --- .github/workflows/untrusted.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/untrusted.yml b/.github/workflows/untrusted.yml index 394f293..5e0b0af 100644 --- a/.github/workflows/untrusted.yml +++ b/.github/workflows/untrusted.yml @@ -9,9 +9,9 @@ jobs: test: runs-on: ubuntu-latest steps: - # - - # name: Set up QEMU - # uses: docker/setup-qemu-action@v1 + - + name: Set up QEMU + uses: docker/setup-qemu-action@v1 - uses: actions/checkout@v1 - name: Build run: make build-arm64 From b02797ebd5b83f94deac87b4a38d97d87f9d05f0 Mon Sep 17 00:00:00 2001 From: Tianyi Song <42670338+tysg@users.noreply.github.com> Date: Fri, 4 Mar 2022 15:06:06 +0800 Subject: [PATCH 099/111] Let test run with arm64 image --- tests/test.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/test.sh b/tests/test.sh index 95bd9dc..92cccbd 100755 --- a/tests/test.sh +++ b/tests/test.sh @@ -2,7 +2,7 @@ # Directory of the integration test HERE="$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null 2>&1 && pwd )" -: "${IMAGE:=rustserverless/lambda-rust}" +: "${IMAGE:=rustserverless/lambda-rust:lastest-arm64}" source "${HERE}"/bashtest.sh From d03ff5c54c6ef301bf29637c0e386f52c890c968 Mon Sep 17 00:00:00 2001 From: Tianyi Song <42670338+tysg@users.noreply.github.com> Date: Fri, 4 Mar 2022 15:12:55 +0800 Subject: [PATCH 100/111] Correct spelling --- tests/test.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests/test.sh b/tests/test.sh index 92cccbd..65abeb8 100755 --- a/tests/test.sh +++ b/tests/test.sh @@ -2,7 +2,7 @@ # Directory of the integration test HERE="$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null 2>&1 && pwd )" -: "${IMAGE:=rustserverless/lambda-rust:lastest-arm64}" +: "${IMAGE:=rustserverless/lambda-rust:latest-arm64}" source "${HERE}"/bashtest.sh From f49da2982f0f9f280ec5412ef08484c7b5f5adaf Mon Sep 17 00:00:00 2001 From: Tianyi Song <42670338+tysg@users.noreply.github.com> Date: Fri, 4 Mar 2022 17:18:53 +0800 Subject: [PATCH 101/111] Skip `make test` on arm64 --- .github/workflows/main.yml | 12 ++++++++---- .github/workflows/release.yml | 6 ++++-- .github/workflows/untrusted.yml | 5 ++--- tests/test.sh | 2 +- 4 files changed, 15 insertions(+), 10 deletions(-) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index a8f7d7f..983973e 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -30,22 +30,26 @@ jobs: runs-on: ubuntu-latest steps: - uses: actions/checkout@v1 + - name: Set up QEMU + uses: docker/setup-qemu-action@v1 - name: Build shell: bash - run: make build + run: make build && make build-arm64 - name: Test - run: make test + run: make test publish: needs: [scan, test] if: github.repository == 'rust-serverless/lambda-rust' runs-on: ubuntu-latest steps: - uses: actions/checkout@v1 + - name: Set up QEMU + uses: docker/setup-qemu-action@v1 - name: Build shell: bash - run: make build + run: make build && make build-arm64 - name: Publish Latest shell: bash run: | echo "${{ secrets.DOCKER_PASSWORD }}" | docker login -u "${{ secrets.DOCKER_USERNAME }}" --password-stdin - make publish + make publish && make publish-arm64 diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index fbe6d4c..585c425 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -21,11 +21,13 @@ jobs: runs-on: ubuntu-latest steps: - uses: actions/checkout@v1 + - name: Set up QEMU + uses: docker/setup-qemu-action@v1 - name: Build shell: bash - run: make build + run: make build && make build-arm64 - name: Publish shell: bash run: | echo "${{ secrets.DOCKER_PASSWORD }}" | docker login -u "${{ secrets.DOCKER_USERNAME }}" --password-stdin - make publish-tag + make publish-tag && make publish-tag-arm64 diff --git a/.github/workflows/untrusted.yml b/.github/workflows/untrusted.yml index 5e0b0af..15c9604 100644 --- a/.github/workflows/untrusted.yml +++ b/.github/workflows/untrusted.yml @@ -9,11 +9,10 @@ jobs: test: runs-on: ubuntu-latest steps: - - - name: Set up QEMU + - name: Set up QEMU uses: docker/setup-qemu-action@v1 - uses: actions/checkout@v1 - name: Build - run: make build-arm64 + run: make build && make build-arm64 - name: Test run: make test \ No newline at end of file diff --git a/tests/test.sh b/tests/test.sh index 65abeb8..95bd9dc 100755 --- a/tests/test.sh +++ b/tests/test.sh @@ -2,7 +2,7 @@ # Directory of the integration test HERE="$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null 2>&1 && pwd )" -: "${IMAGE:=rustserverless/lambda-rust:latest-arm64}" +: "${IMAGE:=rustserverless/lambda-rust}" source "${HERE}"/bashtest.sh From 28cca1c705333bfed1345e33192b7f0d3016cc75 Mon Sep 17 00:00:00 2001 From: Tianyi Song <42670338+tysg@users.noreply.github.com> Date: Fri, 4 Mar 2022 17:30:51 +0800 Subject: [PATCH 102/111] Scan the arm64 image for vulnerability too --- .github/workflows/main.yml | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 983973e..ead5f09 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -10,13 +10,15 @@ jobs: runs-on: ubuntu-latest steps: - uses: actions/checkout@v1 + - name: Set up QEMU + uses: docker/setup-qemu-action@v1 - name: Build env: REPO: ${{ github.repository }} shell: bash run: | echo "docker_repo=${{ env.REPO }}" >> $GITHUB_ENV - make build + make build && make build-arm64 - name: Trivy vulnerability scanner uses: aquasecurity/trivy-action@0.0.20 with: @@ -26,6 +28,15 @@ jobs: ignore-unfixed: true vuln-type: 'os,library' severity: 'CRITICAL,HIGH' + - name: Trivy vulnerability scanner on arm64 image + uses: aquasecurity/trivy-action@0.0.20 + with: + image-ref: '${{ env.docker_repo }}:latest-arm64' + format: 'table' + exit-code: '1' + ignore-unfixed: true + vuln-type: 'os,library' + severity: 'CRITICAL,HIGH' test: runs-on: ubuntu-latest steps: From 7136f071432676b225225e6ac5ed13a25d266d91 Mon Sep 17 00:00:00 2001 From: Tianyi Song <42670338+tysg@users.noreply.github.com> Date: Sat, 5 Mar 2022 00:55:15 +0800 Subject: [PATCH 103/111] A wrong indentation in Makefile skips docker push --- Makefile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Makefile b/Makefile index dbe3311..1ba315a 100644 --- a/Makefile +++ b/Makefile @@ -8,7 +8,7 @@ publish: build $(DOCKER) push $(REPO):${TAG} publish-arm64: build-arm64 - $(DOCKER) push $(REPO):${TAG}-arm64 + $(DOCKER) push $(REPO):${TAG}-arm64 publish-tag: build publish $(DOCKER) tag $(REPO):${TAG} "$(REPO):$(INPUT_RELEASE_VERSION)-rust-$(RUST_VERSION)" From 1ff7f054b867eb5b26bdfa7ccf3e7c509dd9e728 Mon Sep 17 00:00:00 2001 From: Alexander Zaitsev Date: Tue, 22 Mar 2022 15:09:30 +0300 Subject: [PATCH 104/111] feat: update Rust to 1.59 --- CHANGELOG.md | 4 ++++ Dockerfile | 2 +- Dockerfile_arm64 | 2 +- Makefile | 2 +- 4 files changed, 7 insertions(+), 3 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 3021ee5..7991e4d 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,7 @@ +# 0.4.0-rust-1.59.0 + +* Upgrade to Rust [`1.59.0`](https://blog.rust-lang.org/2022/02/24/Rust-1.59.0.html) + # 0.4.0-rust-1.58.1 * Upgrade to Rust [`1.58.1`](https://blog.rust-lang.org/2022/01/20/Rust-1.58.1.html) diff --git a/Dockerfile b/Dockerfile index 71a7ead..347dcba 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,6 +1,6 @@ FROM public.ecr.aws/lambda/provided:al2 -ARG RUST_VERSION=1.58.1 +ARG RUST_VERSION=1.59.0 RUN yum install -y jq openssl-devel gcc zip RUN set -o pipefail && curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs \ | CARGO_HOME=/cargo RUSTUP_HOME=/rustup sh -s -- -y --profile minimal --default-toolchain $RUST_VERSION diff --git a/Dockerfile_arm64 b/Dockerfile_arm64 index 5d7ca67..31ee7af 100644 --- a/Dockerfile_arm64 +++ b/Dockerfile_arm64 @@ -1,6 +1,6 @@ FROM public.ecr.aws/lambda/provided:al2-arm64 -ARG RUST_VERSION=1.58.1 +ARG RUST_VERSION=1.59.0 RUN yum install -y jq openssl-devel gcc zip RUN set -o pipefail && curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs \ | CARGO_HOME=/cargo RUSTUP_HOME=/rustup sh -s -- -y --profile minimal --default-toolchain $RUST_VERSION diff --git a/Makefile b/Makefile index 1ba315a..20924a2 100644 --- a/Makefile +++ b/Makefile @@ -1,6 +1,6 @@ DOCKER ?= docker INPUT_RELEASE_VERSION ?= 0.4.0 -RUST_VERSION ?= 1.58.1 +RUST_VERSION ?= 1.59.0 REPO ?= rustserverless/lambda-rust TAG ?= latest From b6ea99b1eb792267d0fcb282deb9c7360eff9093 Mon Sep 17 00:00:00 2001 From: Jeremiah Russell Date: Mon, 30 May 2022 07:59:08 +0100 Subject: [PATCH 105/111] feat: update Rust to 1.61 --- CHANGELOG.md | 12 +++++++++--- Dockerfile | 2 +- Dockerfile_arm64 | 2 +- Makefile | 2 +- tests/test-func/bootstrap | Bin 0 -> 1746432 bytes 5 files changed, 12 insertions(+), 6 deletions(-) create mode 100755 tests/test-func/bootstrap diff --git a/CHANGELOG.md b/CHANGELOG.md index 7991e4d..22afca4 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,9 +1,14 @@ + +# 0.4.0-rust-1.61.0 + +* Upgrade to Rust [`1.61.0`](https://blog.rust-lang.org/2022/05/19/Rust-1.61.0.html) + # 0.4.0-rust-1.59.0 - + * Upgrade to Rust [`1.59.0`](https://blog.rust-lang.org/2022/02/24/Rust-1.59.0.html) # 0.4.0-rust-1.58.1 - + * Upgrade to Rust [`1.58.1`](https://blog.rust-lang.org/2022/01/20/Rust-1.58.1.html) # 0.4.0-rust-1.58.0 @@ -70,6 +75,7 @@ being created and `package` hook from running. # 0.2.7-rust-1.43.1 * Upgrade to Rust [`1.43.1`](https://blog.rust-lang.org/2020/05/07/Rust.1.43.1.html) + # 0.2.7-rust-1.43.0 * Upgrade to Rust [`1.43.0`](https://blog.rust-lang.org/2020/04/23/Rust-1.43.0.html) @@ -151,7 +157,7 @@ being created and `package` hook from running. * Handle case where Cargo bin is explicitly named `bootstrap` * Introduce integration testing -# 0.2.0-rust-1.32.0 +# 0.2.0-rust-1.32.0 * Upgrade to Rust [`1.32.0`](https://blog.rust-lang.org/2019/01/17/Rust-1.32.0.html) diff --git a/Dockerfile b/Dockerfile index 347dcba..2cdd439 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,6 +1,6 @@ FROM public.ecr.aws/lambda/provided:al2 -ARG RUST_VERSION=1.59.0 +ARG RUST_VERSION=1.61.0 RUN yum install -y jq openssl-devel gcc zip RUN set -o pipefail && curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs \ | CARGO_HOME=/cargo RUSTUP_HOME=/rustup sh -s -- -y --profile minimal --default-toolchain $RUST_VERSION diff --git a/Dockerfile_arm64 b/Dockerfile_arm64 index 31ee7af..cca386e 100644 --- a/Dockerfile_arm64 +++ b/Dockerfile_arm64 @@ -1,6 +1,6 @@ FROM public.ecr.aws/lambda/provided:al2-arm64 -ARG RUST_VERSION=1.59.0 +ARG RUST_VERSION=1.61.0 RUN yum install -y jq openssl-devel gcc zip RUN set -o pipefail && curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs \ | CARGO_HOME=/cargo RUSTUP_HOME=/rustup sh -s -- -y --profile minimal --default-toolchain $RUST_VERSION diff --git a/Makefile b/Makefile index 20924a2..74a8f4f 100644 --- a/Makefile +++ b/Makefile @@ -1,6 +1,6 @@ DOCKER ?= docker INPUT_RELEASE_VERSION ?= 0.4.0 -RUST_VERSION ?= 1.59.0 +RUST_VERSION ?= 1.61.0 REPO ?= rustserverless/lambda-rust TAG ?= latest diff --git a/tests/test-func/bootstrap b/tests/test-func/bootstrap new file mode 100755 index 0000000000000000000000000000000000000000..8823508b9f95ec1e93a3fd6ddba0cfd29ca457fe GIT binary patch literal 1746432 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