Revize 7f244939
Přidáno uživatelem Lukáš Vlček před téměř 3 roky(ů)
.gitlab-ci.yml | ||
---|---|---|
1 |
image: gcr.io/kaniko-project/executor:debug |
|
2 |
|
|
3 |
stages: |
|
4 |
- Build |
|
5 |
- Deploy |
|
6 |
|
|
7 |
build-fe: |
|
8 |
stage: Build |
|
9 |
rules: |
|
10 |
- if: '$CI_COMMIT_BRANCH == "main"' |
|
11 |
when: on_success |
|
12 |
- if: "$CI_COMMIT_BRANCH == null" |
|
13 |
when: never |
|
14 |
- when: manual |
|
15 |
script: |
|
16 |
- mkdir -p /kaniko/.docker |
|
17 |
- echo "{\"auths\":{\"$CI_REGISTRY\":{\"username\":\"$CI_REGISTRY_USER\",\"password\":\"$CI_REGISTRY_PASSWORD\"}}}" > /kaniko/.docker/config.json |
|
18 |
- /kaniko/executor --cache=true --context "$CI_PROJECT_DIR/webapp" --dockerfile "$CI_PROJECT_DIR/webapp/Dockerfile" --destination $CI_REGISTRY_IMAGE/frontend:$CI_COMMIT_SHA |
|
19 |
|
|
20 |
build-be: |
|
21 |
stage: Build |
|
22 |
rules: |
|
23 |
- if: '$CI_COMMIT_BRANCH == "main"' |
|
24 |
when: on_success |
|
25 |
- if: "$CI_COMMIT_BRANCH == null" |
|
26 |
when: never |
|
27 |
- when: manual |
|
28 |
script: |
|
29 |
- mkdir -p /kaniko/.docker |
|
30 |
- echo "{\"auths\":{\"$CI_REGISTRY\":{\"username\":\"$CI_REGISTRY_USER\",\"password\":\"$CI_REGISTRY_PASSWORD\"}}}" > /kaniko/.docker/config.json |
|
31 |
- /kaniko/executor --cache=true --context "$CI_PROJECT_DIR/Backend" --dockerfile "$CI_PROJECT_DIR/Backend/Backend/Dockerfile" --destination $CI_REGISTRY_IMAGE/backend:$CI_COMMIT_SHA |
|
32 |
|
|
33 |
deploy_webapp_production: |
|
34 |
stage: Deploy |
|
35 |
image: |
|
36 |
name: bitnami/kubectl:latest |
|
37 |
environment: |
|
38 |
name: webapp_production |
|
39 |
url: https://annotation.vlc3k.com |
|
40 |
rules: |
|
41 |
- if: '$CI_COMMIT_BRANCH == "main"' |
|
42 |
when: on_success |
|
43 |
- if: "$CI_COMMIT_BRANCH == null" |
|
44 |
when: never |
|
45 |
- when: manual |
|
46 |
script: |
|
47 |
- kubectl --token=${KUBE_TOKEN} --server=${KUBE_SERVER} set image deployment/nio-annotation nio-annotation-frontend=$CI_REGISTRY_IMAGE/frontend:$CI_COMMIT_SHA --namespace=$KUBE_NAMESPACE --record --insecure-skip-tls-verify=true |
|
48 |
- kubectl --token=${KUBE_TOKEN} --server=${KUBE_SERVER} set image deployment/nio-annotation nio-annotation-backend=$CI_REGISTRY_IMAGE/backend:$CI_COMMIT_SHA --namespace=$KUBE_NAMESPACE --record --insecure-skip-tls-verify=true |
|
49 |
- kubectl --token=${KUBE_TOKEN} --server=${KUBE_SERVER} --namespace=$KUBE_NAMESPACE --insecure-skip-tls-verify=true rollout status deployment nio-annotation |
Backend/.dockerignore | ||
---|---|---|
1 |
**/.classpath |
|
2 |
**/.dockerignore |
|
3 |
**/.env |
|
4 |
**/.git |
|
5 |
**/.gitignore |
|
6 |
**/.project |
|
7 |
**/.settings |
|
8 |
**/.toolstarget |
|
9 |
**/.vs |
|
10 |
**/.vscode |
|
11 |
**/*.*proj.user |
|
12 |
**/*.dbmdl |
|
13 |
**/*.jfm |
|
14 |
**/azds.yaml |
|
15 |
**/bin |
|
16 |
**/charts |
|
17 |
**/docker-compose* |
|
18 |
**/Dockerfile* |
|
19 |
**/node_modules |
|
20 |
**/npm-debug.log |
|
21 |
**/obj |
|
22 |
**/secrets.dev.yaml |
|
23 |
**/values.dev.yaml |
|
24 |
LICENSE |
|
25 |
README.md |
Backend/Backend/.dockerignore | ||
---|---|---|
1 |
**/.dockerignore |
|
2 |
**/.env |
|
3 |
**/.git |
|
4 |
**/.gitignore |
|
5 |
**/.project |
|
6 |
**/.settings |
|
7 |
**/.toolstarget |
|
8 |
**/.vs |
|
9 |
**/.vscode |
|
10 |
**/.idea |
|
11 |
**/*.*proj.user |
|
12 |
**/*.dbmdl |
|
13 |
**/*.jfm |
|
14 |
**/azds.yaml |
|
15 |
**/bin |
|
16 |
**/charts |
|
17 |
**/docker-compose* |
|
18 |
**/Dockerfile* |
|
19 |
**/node_modules |
|
20 |
**/npm-debug.log |
|
21 |
**/obj |
|
22 |
**/secrets.dev.yaml |
|
23 |
**/values.dev.yaml |
|
24 |
LICENSE |
|
25 |
README.md |
Backend/Backend/Dockerfile | ||
---|---|---|
1 |
#See https://aka.ms/containerfastmode to understand how Visual Studio uses this Dockerfile to build your images for faster debugging. |
|
2 |
|
|
3 |
FROM mcr.microsoft.com/dotnet/aspnet:6.0 AS base |
|
1 |
FROM mcr.microsoft.com/dotnet/aspnet:6.0 AS base |
|
4 | 2 |
WORKDIR /app |
5 | 3 |
EXPOSE 80 |
6 | 4 |
EXPOSE 443 |
7 | 5 |
|
8 | 6 |
FROM mcr.microsoft.com/dotnet/sdk:6.0 AS build |
9 | 7 |
WORKDIR /src |
10 |
COPY ["Backend/Backend.csproj", "Backend/"] |
|
11 |
RUN dotnet restore "Backend/Backend.csproj" |
|
8 |
COPY ["Backend/RestAPI.csproj", "Backend/"] |
|
9 |
COPY ["Core/Core.csproj", "Core/"] |
|
10 |
COPY ["Models/Models.csproj", "Models/"] |
|
11 |
RUN dotnet restore "Backend/RestAPI.csproj" |
|
12 | 12 |
COPY . . |
13 | 13 |
WORKDIR "/src/Backend" |
14 |
RUN dotnet build "Backend.csproj" -c Release -o /app/build
|
|
14 |
RUN dotnet build "RestAPI.csproj" -c Release -o /app/build
|
|
15 | 15 |
|
16 | 16 |
FROM build AS publish |
17 |
RUN dotnet publish "Backend.csproj" -c Release -o /app/publish
|
|
17 |
RUN dotnet publish "RestAPI.csproj" -c Release -o /app/publish
|
|
18 | 18 |
|
19 | 19 |
FROM base AS final |
20 | 20 |
WORKDIR /app |
21 | 21 |
COPY --from=publish /app/publish . |
22 |
ENTRYPOINT ["dotnet", "Backend.dll"] |
|
22 |
ENTRYPOINT ["dotnet", "RestAPI.dll"] |
Backend/Backend/Program.cs | ||
---|---|---|
80 | 80 |
"http://localhost", |
81 | 81 |
"https://localhost:3000", |
82 | 82 |
"http://localhost:3000", |
83 |
"http://localhost:5007") |
|
83 |
"http://localhost:5007", |
|
84 |
"https://annotation.vlc3k.com") |
|
84 | 85 |
.SetIsOriginAllowedToAllowWildcardSubdomains() |
85 | 86 |
.AllowAnyHeader() |
86 | 87 |
.AllowAnyMethod() |
Backend/Backend/appsettings.Development.json | ||
---|---|---|
4 | 4 |
"Default": "Information", |
5 | 5 |
"Microsoft.AspNetCore": "Warning" |
6 | 6 |
} |
7 |
}, |
|
8 |
"AllowedHosts": "*", |
|
9 |
"ConnectionString": "Host=localhost:5432;Database=dbo;Username=myuser;Password=password", |
|
10 |
"JwtConfig": { |
|
11 |
"Secret": "CJgvc9BtwJjnCExzKLB2ndtxERW3YMhqMMPNrBZuTJaskPqRVfZQHRUnbRHH9Ekp5zsaTSeM73vQSKvq48w2u8jTnKUn7Uhk2zBeD9wLz48ssKMppNC9HDTXSk6RWP5PtXfCayJ67mbUWF6aknnteLg4sDKzqYeNYjyw8Jk6", |
|
12 |
"Issuer": "0x00.server" |
|
7 | 13 |
} |
8 |
} |
|
14 |
} |
Backend/Backend/appsettings.json | ||
---|---|---|
6 | 6 |
} |
7 | 7 |
}, |
8 | 8 |
"AllowedHosts": "*", |
9 |
"ConnectionString": "Host=localhost:5432;Database=dbo;Username=myuser;Password=password", |
|
10 | 9 |
"JwtConfig": { |
11 | 10 |
"Secret": "CJgvc9BtwJjnCExzKLB2ndtxERW3YMhqMMPNrBZuTJaskPqRVfZQHRUnbRHH9Ekp5zsaTSeM73vQSKvq48w2u8jTnKUn7Uhk2zBeD9wLz48ssKMppNC9HDTXSk6RWP5PtXfCayJ67mbUWF6aknnteLg4sDKzqYeNYjyw8Jk6", |
12 | 11 |
"Issuer": "0x00.server" |
13 | 12 |
} |
14 |
} |
|
13 |
} |
webapp/Dockerfile | ||
---|---|---|
1 |
FROM node:lts as build |
|
2 |
|
|
3 |
ENV NPM_CONFIG_LOGLEVEL warn |
|
4 |
WORKDIR app |
|
5 |
|
|
6 |
COPY package.json package.json |
|
7 |
COPY yarn.lock yarn.lock |
|
8 |
RUN yarn install --pure-lockfile |
|
9 |
|
|
10 |
COPY . . |
|
11 |
|
|
12 |
RUN npx browserslist@latest --update-db |
|
13 |
RUN yarn build |
|
14 |
|
|
15 |
FROM node:lts |
|
16 |
WORKDIR app |
|
17 |
|
|
18 |
COPY package.json package.json |
|
19 |
COPY yarn.lock yarn.lock |
|
20 |
RUN yarn install --pure-lockfile --production |
|
21 |
|
|
22 |
COPY --from=build app/.next .next |
|
23 |
COPY --from=build app/public public |
|
24 |
|
|
25 |
ENV NPM_CONFIG_LOGLEVEL warn |
|
26 |
|
|
27 |
|
|
28 |
ARG BACKEND_URL=$BACKEND_URL |
|
29 |
ENV BACKEND_URL=$BACKEND_URL |
|
30 |
|
|
31 |
EXPOSE 5000 |
|
32 |
|
|
33 |
CMD yarn start -p 5000 |
webapp/constants.ts | ||
---|---|---|
1 |
import env from '@beam-australia/react-env'; |
|
2 |
|
|
3 |
const DEFAULT_BASE_PATH = 'https://localhost:7241'; |
|
4 |
|
|
5 |
export function getApiBasePath() { |
|
6 |
let e = env('BACKEND_URL'); |
|
7 |
|
|
8 |
if (!e) { |
|
9 |
return DEFAULT_BASE_PATH; |
|
10 |
} else { |
|
11 |
return e; |
|
12 |
} |
|
13 |
} |
webapp/controllers.ts | ||
---|---|---|
2 | 2 |
import { axios } from './utils/axios'; |
3 | 3 |
import { Configuration } from './api'; |
4 | 4 |
import { getToken } from './utils/login'; |
5 |
import { getApiBasePath } from './constants'; |
|
5 | 6 |
|
6 |
let baseURL = 'https://localhost:7241';
|
|
7 |
let baseURL = getApiBasePath();
|
|
7 | 8 |
|
8 | 9 |
const defaultConfig: Configuration = new Configuration({ |
9 | 10 |
basePath: baseURL, |
webapp/package.json | ||
---|---|---|
3 | 3 |
"version": "0.1.0", |
4 | 4 |
"private": true, |
5 | 5 |
"scripts": { |
6 |
"dev": "next dev", |
|
6 |
"dev": "react-env --env BACKEND_URL -- next dev",
|
|
7 | 7 |
"build": "next build", |
8 |
"start": "next start", |
|
8 |
"start": "react-env --prefix ASWI_APP -- next start",
|
|
9 | 9 |
"lint": "next lint", |
10 | 10 |
"generate-api": "openapi-generator-cli generate -i http://localhost:5241/swagger/v1/swagger.json -g typescript-axios -o api", |
11 |
"postinstall": "yarn generate-api", |
|
12 | 11 |
"deduplicate": "yarn-deduplicate yarn.lock" |
13 | 12 |
}, |
14 | 13 |
"dependencies": { |
14 |
"@beam-australia/react-env": "^3.1.1", |
|
15 | 15 |
"@fortawesome/fontawesome-svg-core": "^6.1.1", |
16 | 16 |
"@fortawesome/free-solid-svg-icons": "^6.1.1", |
17 | 17 |
"@fortawesome/react-fontawesome": "^0.1.18", |
webapp/pages/_app.tsx | ||
---|---|---|
20 | 20 |
<LoggedUserProvider> |
21 | 21 |
<Head> |
22 | 22 |
<link rel="shortcut icon" href={'/favicon.ico'} /> |
23 |
<title>Annotation Tool</title> |
|
23 |
<title>Annotation Tool (AV ČR)</title> |
|
24 |
<script src="/__ENV.js" defer /> |
|
24 | 25 |
</Head> |
26 |
|
|
25 | 27 |
{Component.auth ? ( |
26 | 28 |
<Auth minRole={Component.auth?.minRole}> |
27 | 29 |
<Component {...pageProps} /> |
webapp/pages/login/index.tsx | ||
---|---|---|
8 | 8 |
import { ShowToast } from '../../utils/alerts'; |
9 | 9 |
import { getTokenData } from '../../utils/login'; |
10 | 10 |
import { LoginResponse } from '../../api'; |
11 |
import env from '@beam-australia/react-env'; |
|
11 | 12 |
|
12 | 13 |
/** |
13 | 14 |
* Creates a login screen. |
... | ... | |
16 | 17 |
function Login() { |
17 | 18 |
const { login, role } = useContext(LoggedUserContext); |
18 | 19 |
const router = useRouter(); |
20 |
|
|
19 | 21 |
/** |
20 | 22 |
* Handles submission a form when its fields were successfully validated. |
21 | 23 |
* @param values Fields of the login form. |
webapp/public/__ENV.js | ||
---|---|---|
1 |
window.__ENV = {}; |
webapp/utils/axios.ts | ||
---|---|---|
4 | 4 |
import { getToken } from './login'; |
5 | 5 |
import { useContext } from 'react'; |
6 | 6 |
import { LoggedUserContext } from '../contexts/LoggedUserContext'; |
7 |
import { getApiBasePath } from '../constants'; |
|
7 | 8 |
|
8 | 9 |
export const axios = axiosLib.create({ |
9 |
baseURL: 'https://localhost:7241',
|
|
10 |
baseURL: getApiBasePath(),
|
|
10 | 11 |
timeout: 60000, |
11 | 12 |
}); |
12 | 13 |
|
webapp/yarn.lock | ||
---|---|---|
51 | 51 |
dependencies: |
52 | 52 |
regenerator-runtime "^0.13.4" |
53 | 53 |
|
54 |
"@beam-australia/react-env@^3.1.1": |
|
55 |
version "3.1.1" |
|
56 |
resolved "https://registry.yarnpkg.com/@beam-australia/react-env/-/react-env-3.1.1.tgz#63cb8316861b8fbdb4b9c550a62139cd90675e40" |
|
57 |
integrity sha512-LdWzgqmu116t9+sOvONyB21bBmI8dm8g8s3KhnJVzCcK93GrdSisuIOtOkQPMYgenmVGTWQwWnbLAgoka/jAFw== |
|
58 |
dependencies: |
|
59 |
cross-spawn "^6.0.5" |
|
60 |
dotenv "^8.0.0" |
|
61 |
dotenv-expand "^5.1.0" |
|
62 |
minimist "^1.2.0" |
|
63 |
|
|
54 | 64 |
"@ctrl/tinycolor@^3.4.0": |
55 | 65 |
version "3.4.1" |
56 | 66 |
resolved "https://registry.yarnpkg.com/@ctrl/tinycolor/-/tinycolor-3.4.1.tgz#75b4c27948c81e88ccd3a8902047bcd797f38d32" |
... | ... | |
778 | 788 |
resolved "https://registry.yarnpkg.com/core-js-pure/-/core-js-pure-3.22.0.tgz#0eaa54b6d1f4ebb4d19976bb4916dfad149a3747" |
779 | 789 |
integrity sha512-ylOC9nVy0ak1N+fPIZj00umoZHgUVqmucklP5RT5N+vJof38klKn8Ze6KGyvchdClvEBr6LcQqJpI216LUMqYA== |
780 | 790 |
|
791 |
cross-spawn@^6.0.5: |
|
792 |
version "6.0.5" |
|
793 |
resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-6.0.5.tgz#4a5ec7c64dfae22c3a14124dbacdee846d80cbc4" |
|
794 |
integrity sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ== |
|
795 |
dependencies: |
|
796 |
nice-try "^1.0.4" |
|
797 |
path-key "^2.0.1" |
|
798 |
semver "^5.5.0" |
|
799 |
shebang-command "^1.2.0" |
|
800 |
which "^1.2.9" |
|
801 |
|
|
781 | 802 |
cross-spawn@^7.0.2: |
782 | 803 |
version "7.0.3" |
783 | 804 |
resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6" |
... | ... | |
887 | 908 |
"@babel/runtime" "^7.8.7" |
888 | 909 |
csstype "^3.0.2" |
889 | 910 |
|
911 |
dotenv-expand@^5.1.0: |
|
912 |
version "5.1.0" |
|
913 |
resolved "https://registry.yarnpkg.com/dotenv-expand/-/dotenv-expand-5.1.0.tgz#3fbaf020bfd794884072ea26b1e9791d45a629f0" |
|
914 |
integrity sha512-YXQl1DSa4/PQyRfgrv6aoNjhasp/p4qs9FjJ4q4cQk+8m4r6k4ZSiEyytKG8f8W9gi8WsQtIObNmKd+tMzNTmA== |
|
915 |
|
|
916 |
dotenv@^8.0.0: |
|
917 |
version "8.6.0" |
|
918 |
resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-8.6.0.tgz#061af664d19f7f4d8fc6e4ff9b584ce237adcb8b" |
|
919 |
integrity sha512-IrPdXQsk2BbzvCBGBOTmmSH5SodmqZNt4ERAZDmW4CT+tL8VtvinqywuANaFu4bOMWki16nqf0e4oC0QIaDr/g== |
|
920 |
|
|
890 | 921 |
easy-table@1.1.0: |
891 | 922 |
version "1.1.0" |
892 | 923 |
resolved "https://registry.yarnpkg.com/easy-table/-/easy-table-1.1.0.tgz#86f9ab4c102f0371b7297b92a651d5824bc8cb73" |
... | ... | |
1849 | 1880 |
"@next/swc-win32-ia32-msvc" "12.1.0" |
1850 | 1881 |
"@next/swc-win32-x64-msvc" "12.1.0" |
1851 | 1882 |
|
1883 |
nice-try@^1.0.4: |
|
1884 |
version "1.0.5" |
|
1885 |
resolved "https://registry.yarnpkg.com/nice-try/-/nice-try-1.0.5.tgz#a3378a7696ce7d223e88fc9b764bd7ef1089e366" |
|
1886 |
integrity sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ== |
|
1887 |
|
|
1852 | 1888 |
node-fetch@^2.6.1: |
1853 | 1889 |
version "2.6.7" |
1854 | 1890 |
resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.7.tgz#24de9fba827e3b4ae44dc8b20256a379160052ad" |
... | ... | |
2008 | 2044 |
resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" |
2009 | 2045 |
integrity sha1-F0uSaHNVNP+8es5r9TpanhtcX18= |
2010 | 2046 |
|
2047 |
path-key@^2.0.1: |
|
2048 |
version "2.0.1" |
|
2049 |
resolved "https://registry.yarnpkg.com/path-key/-/path-key-2.0.1.tgz#411cadb574c5a140d3a4b1910d40d80cc9f40b40" |
|
2050 |
integrity sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A= |
|
2051 |
|
|
2011 | 2052 |
path-key@^3.1.0: |
2012 | 2053 |
version "3.1.1" |
2013 | 2054 |
resolved "https://registry.yarnpkg.com/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375" |
... | ... | |
2669 | 2710 |
dependencies: |
2670 | 2711 |
compute-scroll-into-view "^1.0.17" |
2671 | 2712 |
|
2713 |
semver@^5.5.0: |
|
2714 |
version "5.7.1" |
|
2715 |
resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7" |
|
2716 |
integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ== |
|
2717 |
|
|
2672 | 2718 |
semver@^6.3.0: |
2673 | 2719 |
version "6.3.0" |
2674 | 2720 |
resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d" |
... | ... | |
2686 | 2732 |
resolved "https://registry.yarnpkg.com/shallowequal/-/shallowequal-1.1.0.tgz#188d521de95b9087404fd4dcb68b13df0ae4e7f8" |
2687 | 2733 |
integrity sha512-y0m1JoUZSlPAjXVtPPW70aZWfIL/dSP7AFkRnniLCrK/8MDKog3TySTBmckD+RObVxH0v4Tox67+F14PdED2oQ== |
2688 | 2734 |
|
2735 |
shebang-command@^1.2.0: |
|
2736 |
version "1.2.0" |
|
2737 |
resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-1.2.0.tgz#44aac65b695b03398968c39f363fee5deafdf1ea" |
|
2738 |
integrity sha1-RKrGW2lbAzmJaMOfNj/uXer98eo= |
|
2739 |
dependencies: |
|
2740 |
shebang-regex "^1.0.0" |
|
2741 |
|
|
2689 | 2742 |
shebang-command@^2.0.0: |
2690 | 2743 |
version "2.0.0" |
2691 | 2744 |
resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-2.0.0.tgz#ccd0af4f8835fbdc265b82461aaf0c36663f34ea" |
... | ... | |
2693 | 2746 |
dependencies: |
2694 | 2747 |
shebang-regex "^3.0.0" |
2695 | 2748 |
|
2749 |
shebang-regex@^1.0.0: |
|
2750 |
version "1.0.0" |
|
2751 |
resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-1.0.0.tgz#da42f49740c0b42db2ca9728571cb190c98efea3" |
|
2752 |
integrity sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM= |
|
2753 |
|
|
2696 | 2754 |
shebang-regex@^3.0.0: |
2697 | 2755 |
version "3.0.0" |
2698 | 2756 |
resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172" |
... | ... | |
3014 | 3072 |
is-string "^1.0.5" |
3015 | 3073 |
is-symbol "^1.0.3" |
3016 | 3074 |
|
3075 |
which@^1.2.9: |
|
3076 |
version "1.3.1" |
|
3077 |
resolved "https://registry.yarnpkg.com/which/-/which-1.3.1.tgz#a45043d54f5805316da8d62f9f50918d3da70b0a" |
|
3078 |
integrity sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ== |
|
3079 |
dependencies: |
|
3080 |
isexe "^2.0.0" |
|
3081 |
|
|
3017 | 3082 |
which@^2.0.1: |
3018 | 3083 |
version "2.0.2" |
3019 | 3084 |
resolved "https://registry.yarnpkg.com/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1" |
Také k dispozici: Unified diff
Re #9582