Make Docker documentation base image agnostic #2739
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| name: ci | |
| on: | |
| push: | |
| branches: [main] | |
| tags: ['*'] | |
| pull_request: | |
| branches: [main] | |
| jobs: | |
| audit: | |
| runs-on: ubuntu-latest | |
| strategy: | |
| fail-fast: true | |
| steps: | |
| - uses: actions/checkout@v4 | |
| - uses: actions/setup-node@v4 | |
| with: | |
| node-version: 16.x | |
| - run: npm install | |
| - run: npm audit --omit=dev | |
| standard: | |
| runs-on: ubuntu-latest | |
| strategy: | |
| fail-fast: true | |
| steps: | |
| - uses: actions/checkout@v4 | |
| - uses: actions/setup-node@v4 | |
| with: | |
| node-version: 16.x | |
| - run: npm install | |
| - run: npm run standard | |
| test: | |
| runs-on: ubuntu-latest | |
| strategy: | |
| fail-fast: true | |
| steps: | |
| - uses: actions/checkout@v4 | |
| - uses: actions/setup-node@v4 | |
| with: | |
| node-version: 16.x | |
| - name: install shellspec | |
| run: curl -sfSL https://git.io/shellspec | sh -s 0.28.1 --yes | |
| - run: which shellspec | |
| - run: npm install | |
| - run: | | |
| npm run test 2>&1 | tee testResults.txt | |
| test ${PIPESTATUS[0]} -eq 0 | |
| - name: set test count | |
| env: | |
| GIST_TOKEN: ${{ secrets.GIST_TOKEN }} | |
| run: | | |
| TEST_COUNT=$(tail -2 testResults.txt | head -1 | awk -F'[,: ]+' '/total/ {print $4}') | |
| export LC_NUMERIC="en_US.UTF-8" | |
| TEST_COUNT_FORMATTED=$(printf "%'d\n" $(($TEST_COUNT))) | |
| echo $TEST_COUNT_FORMATTED | |
| curl -L \ | |
| -X PATCH \ | |
| -H "Accept: application/vnd.github+json" \ | |
| -H "Authorization: Bearer $GIST_TOKEN" \ | |
| -H "X-GitHub-Api-Version: 2022-11-28" \ | |
| https://api.github.com/gists/bb76445765a9731e7d824a6efdf53524 \ | |
| -d "{\"description\":\"dotenvxTestCount\",\"files\":{\"dotenvxTestCount.json\":{\"content\":\"{ \\\"schemaVersion\\\": 1, \\\"label\\\": \\\"test suite\\\", \\\"message\\\": \\\"$TEST_COUNT_FORMATTED\\\", \\\"color\\\": \\\"green\\\" }\"}}}" | |
| - run: npm run testshell | |
| test-coverage: | |
| runs-on: ubuntu-latest | |
| strategy: | |
| fail-fast: true | |
| steps: | |
| - uses: actions/checkout@v4 | |
| - uses: actions/setup-node@v4 | |
| with: | |
| node-version: 22.x | |
| - name: install shellspec | |
| run: curl -sfSL https://git.io/shellspec | sh -s 0.28.1 --yes | |
| - run: which shellspec | |
| - run: npm install | |
| - run: npm run test-coverage | |
| test-pkg: | |
| runs-on: ubuntu-latest | |
| strategy: | |
| fail-fast: true | |
| steps: | |
| - uses: actions/checkout@v4 | |
| - uses: actions/setup-node@v4 | |
| with: | |
| node-version: 20.x | |
| - run: npm install | |
| - name: pkg | |
| run: | | |
| echo "pkg-ing" | |
| node esbuild.js | |
| cd ./build | |
| ../node_modules/.bin/pkg . --public-packages "*" --public --target node20-linuxstatic-x86_64 --output ../bin/linux-x86_64/dotenvx | |
| - name: verify version | |
| run: | | |
| cd bin/linux-x86_64/ | |
| RELEASED_VERSION=$(./dotenvx --version) | |
| EXPECTED_VERSION=$(node -p "require('./../../package.json').version") | |
| echo $RELEASED_VERSION | |
| echo $EXPECTED_VERSION | |
| if [ "$RELEASED_VERSION" != "$EXPECTED_VERSION" ]; then | |
| echo "postrelease version mismatch: expected $EXPECTED_VERSION, got $RELEASED_VERSION" | |
| exit 1 | |
| fi | |
| - name: verify dotenvx run/get | |
| run: | | |
| cd bin/linux-x86_64/ | |
| echo "HELLO=Ubuntu" > .env | |
| echo "console.log('Hello ' + process.env.HELLO)" > index.js | |
| EXPECTED_MESSAGE=$(./dotenvx run --quiet -- node index.js) | |
| echo $EXPECTED_MESSAGE | |
| if [ "$EXPECTED_MESSAGE" != "Hello Ubuntu" ]; then | |
| echo "postrelease dotenvx run failure: expected Hello Ubuntu, got $EXPECTED_MESSAGE" | |
| exit 1 | |
| fi | |
| EXPECTED_VALUE=$(./dotenvx get HELLO) | |
| echo $EXPECTED_VALUE | |
| if [ "$EXPECTED_VALUE" != "Ubuntu" ]; then | |
| echo "postrelease dotenvx get failure: expected Ubuntu, got $EXPECTED_VALUE" | |
| exit 1 | |
| fi | |
| - name: verify nested invocations | |
| run: | | |
| cd bin/linux-x86_64/ | |
| echo "HELLO=Ubuntu" > .env | |
| echo "console.log('Hello ' + process.env.HELLO)" > index.js | |
| EXPECTED_MESSAGE=$(./dotenvx run --quiet -- ./dotenvx run --quiet -- ./dotenvx run --quiet -- node index.js) | |
| echo $EXPECTED_MESSAGE | |
| if [ "$EXPECTED_MESSAGE" != "Hello Ubuntu" ]; then | |
| echo "postrelease dotenvx nested invocations: expected Hello Ubuntu, got $EXPECTED_MESSAGE" | |
| exit 1 | |
| fi | |
| - name: verify dotenvx encrypt then run/get then decrypt then run/get | |
| run: | | |
| cd bin/linux-x86_64/ | |
| echo "HELLO=Ubuntu" > .env | |
| ./dotenvx encrypt | |
| echo "console.log('Hello ' + process.env.HELLO)" > index.js | |
| EXPECTED_MESSAGE=$(./dotenvx run --quiet -- node index.js) | |
| echo $EXPECTED_MESSAGE | |
| if [ "$EXPECTED_MESSAGE" != "Hello Ubuntu" ]; then | |
| echo "postrelease dotenvx run failure: expected Hello Ubuntu, got $EXPECTED_MESSAGE" | |
| exit 1 | |
| fi | |
| EXPECTED_VALUE=$(./dotenvx get HELLO) | |
| echo $EXPECTED_VALUE | |
| if [ "$EXPECTED_VALUE" != "Ubuntu" ]; then | |
| echo "postrelease dotenvx get failure: expected Ubuntu, got $EXPECTED_VALUE" | |
| exit 1 | |
| fi | |
| ./dotenvx decrypt | |
| EXPECTED_MESSAGE=$(./dotenvx run --quiet -- node index.js) | |
| echo $EXPECTED_MESSAGE | |
| if [ "$EXPECTED_MESSAGE" != "Hello Ubuntu" ]; then | |
| echo "postrelease dotenvx run failure: expected Hello Ubuntu, got $EXPECTED_MESSAGE" | |
| exit 1 | |
| fi | |
| EXPECTED_VALUE=$(./dotenvx get HELLO) | |
| echo $EXPECTED_VALUE | |
| if [ "$EXPECTED_VALUE" != "Ubuntu" ]; then | |
| echo "postrelease dotenvx get failure: expected Ubuntu, got $EXPECTED_VALUE" | |
| exit 1 | |
| fi | |
| # run only on semantic version tag | |
| release: | |
| needs: | |
| - audit | |
| - test | |
| - test-pkg | |
| if: startsWith(github.ref, 'refs/tags/v') && contains(github.ref, '.') | |
| runs-on: ubuntu-latest | |
| strategy: | |
| fail-fast: true | |
| steps: | |
| - name: checkout | |
| uses: actions/checkout@v4 | |
| # GITHUB_ENV operates like a .env file | |
| - name: extract version | |
| run: | | |
| VERSION=${GITHUB_REF#refs/tags/} | |
| CLEAN_VERSION=${VERSION#v} | |
| echo "VERSION=$VERSION" >> $GITHUB_ENV | |
| echo "CLEAN_VERSION=$CLEAN_VERSION" >> $GITHUB_ENV | |
| - name: node | |
| uses: actions/setup-node@v4 | |
| with: | |
| node-version: 20.x | |
| # https://news.ycombinator.com/item?id=32388964 | |
| # https://github.com/procursusteam/ldid | |
| # https://www.pulumi.com/blog/nodejs-binaries-with-pkg/ | |
| # https://github.com/pulumi/pulumi-aws-static-website/blob/main/.github/workflows/release.yaml | |
| - name: ldid for macos binary building | |
| uses: MOZGIII/install-ldid-action@v1 | |
| with: | |
| tag: v2.1.5-procursus2 | |
| - name: npm install | |
| run: npm install | |
| - name: pkg | |
| run: | | |
| echo "pkg-ing" | |
| node esbuild.js | |
| cd ./build | |
| ../node_modules/.bin/pkg . --public-packages "*" --public --target node20-macos-x64 --output ../bin/darwin-amd64/dotenvx | |
| ../node_modules/.bin/pkg . --public-packages "*" --public --target node20-macos-x64 --output ../bin/darwin-x86_64/dotenvx | |
| ../node_modules/.bin/pkg . --public-packages "*" --public --target node20-macos-arm64 --output ../bin/darwin-arm64/dotenvx | |
| ../node_modules/.bin/pkg . --public-packages "*" --public --target node20-linuxstatic-x64 --output ../bin/linux-amd64/dotenvx | |
| ../node_modules/.bin/pkg . --public-packages "*" --public --target node20-linuxstatic-x64 --output ../bin/linux-x86_64/dotenvx | |
| ../node_modules/.bin/pkg . --public-packages "*" --public --target node20-linuxstatic-arm64 --output ../bin/linux-arm64/dotenvx | |
| ../node_modules/.bin/pkg . --public-packages "*" --public --target node20-linuxstatic-arm64 --output ../bin/linux-aarch64/dotenvx | |
| ../node_modules/.bin/pkg . --public-packages "*" --public --target node20-linuxstatic-armv7 --output ../bin/linux-armv7l/dotenvx | |
| ../node_modules/.bin/pkg . --public-packages "*" --public --target node20-win-x64 --output ../bin/windows-amd64/dotenvx.exe | |
| ../node_modules/.bin/pkg . --public-packages "*" --public --target node20-win-x64 --output ../bin/windows-x86_64/dotenvx.exe | |
| cd .. | |
| echo "change ownership" | |
| sudo chown -R root:root bin/ | |
| echo "dist-ing" | |
| mkdir -p dist | |
| mkdir -p dist2 | |
| mkdir -p dist2/${{ env.VERSION }} | |
| mkdir -p dist2/latest | |
| tar --gzip -cf ./dist/dotenvx-${{ env.CLEAN_VERSION }}-darwin-amd64.tar.gz -C bin/darwin-amd64/ . | |
| tar --gzip -cf ./dist/dotenvx-${{ env.CLEAN_VERSION }}-darwin-x86_64.tar.gz -C bin/darwin-x86_64/ . | |
| tar --gzip -cf ./dist/dotenvx-${{ env.CLEAN_VERSION }}-darwin-arm64.tar.gz -C bin/darwin-arm64/ . | |
| tar --gzip -cf ./dist/dotenvx-${{ env.CLEAN_VERSION }}-linux-amd64.tar.gz -C bin/linux-amd64/ . | |
| tar --gzip -cf ./dist/dotenvx-${{ env.CLEAN_VERSION }}-linux-x86_64.tar.gz -C bin/linux-x86_64/ . | |
| tar --gzip -cf ./dist/dotenvx-${{ env.CLEAN_VERSION }}-linux-arm64.tar.gz -C bin/linux-arm64/ . | |
| tar --gzip -cf ./dist/dotenvx-${{ env.CLEAN_VERSION }}-linux-aarch64.tar.gz -C bin/linux-aarch64/ . | |
| tar --gzip -cf ./dist/dotenvx-${{ env.CLEAN_VERSION }}-linux-armv7l.tar.gz -C bin/linux-armv7l/ . | |
| tar --gzip -cf ./dist/dotenvx-${{ env.CLEAN_VERSION }}-windows-amd64.tar.gz -C bin/windows-amd64/ . | |
| tar --gzip -cf ./dist/dotenvx-${{ env.CLEAN_VERSION }}-windows-x86_64.tar.gz -C bin/windows-x86_64/ . | |
| zip -j ./dist/dotenvx-${{ env.CLEAN_VERSION }}-windows-amd64.zip bin/windows-amd64/dotenvx.exe | |
| zip -j ./dist/dotenvx-${{ env.CLEAN_VERSION }}-windows-x86_64.zip bin/windows-x86_64/dotenvx.exe | |
| tar --gzip -cf ./dist/dotenvx-darwin-amd64.tar.gz -C bin/darwin-amd64/ . | |
| tar --gzip -cf ./dist/dotenvx-darwin-x86_64.tar.gz -C bin/darwin-x86_64/ . | |
| tar --gzip -cf ./dist/dotenvx-darwin-arm64.tar.gz -C bin/darwin-arm64/ . | |
| tar --gzip -cf ./dist/dotenvx-linux-amd64.tar.gz -C bin/linux-amd64/ . | |
| tar --gzip -cf ./dist/dotenvx-linux-x86_64.tar.gz -C bin/linux-x86_64/ . | |
| tar --gzip -cf ./dist/dotenvx-linux-arm64.tar.gz -C bin/linux-arm64/ . | |
| tar --gzip -cf ./dist/dotenvx-linux-armv7l.tar.gz -C bin/linux-armv7l/ . | |
| tar --gzip -cf ./dist/dotenvx-windows-amd64.tar.gz -C bin/windows-amd64/ . | |
| tar --gzip -cf ./dist/dotenvx-windows-x86_64.tar.gz -C bin/windows-x86_64/ . | |
| zip -j ./dist/dotenvx-windows-amd64.zip bin/windows-amd64/dotenvx.exe | |
| zip -j ./dist/dotenvx-windows-x86_64.zip bin/windows-x86_64/dotenvx.exe | |
| tar --gzip -cf ./dist2/latest/dotenvx-darwin-amd64.tar.gz -C bin/darwin-amd64/ . | |
| tar --gzip -cf ./dist2/latest/dotenvx-darwin-x86_64.tar.gz -C bin/darwin-x86_64/ . | |
| tar --gzip -cf ./dist2/latest/dotenvx-darwin-arm64.tar.gz -C bin/darwin-arm64/ . | |
| tar --gzip -cf ./dist2/latest/dotenvx-linux-amd64.tar.gz -C bin/linux-amd64/ . | |
| tar --gzip -cf ./dist2/latest/dotenvx-linux-x86_64.tar.gz -C bin/linux-x86_64/ . | |
| tar --gzip -cf ./dist2/latest/dotenvx-linux-arm64.tar.gz -C bin/linux-arm64/ . | |
| tar --gzip -cf ./dist2/latest/dotenvx-linux-aarch64.tar.gz -C bin/linux-aarch64/ . | |
| tar --gzip -cf ./dist2/latest/dotenvx-linux-armv7l.tar.gz -C bin/linux-armv7l/ . | |
| tar --gzip -cf ./dist2/latest/dotenvx-windows-amd64.tar.gz -C bin/windows-amd64/ . | |
| tar --gzip -cf ./dist2/latest/dotenvx-windows-x86_64.tar.gz -C bin/windows-x86_64/ . | |
| zip -j ./dist2/latest/dotenvx-windows-amd64.zip bin/windows-amd64/dotenvx.exe | |
| zip -j ./dist2/latest/dotenvx-windows-x86_64.zip bin/windows-x86_64/dotenvx.exe | |
| - name: update install.sh with VERSION | |
| run: | | |
| sed "0,/^VERSION=\".*\"/s//VERSION=\"${{ env.CLEAN_VERSION }}\"/" install.sh > ./dist/install.sh | |
| sed "0,/^VERSION=\".*\"/s//VERSION=\"${{ env.CLEAN_VERSION }}\"/" install.sh > ./dist2/install.sh | |
| - name: create release | |
| uses: softprops/action-gh-release@v1 | |
| with: | |
| files: | | |
| dist/*.tar.gz | |
| dist/*.zip | |
| dist/install.sh | |
| body: "see [CHANGELOG](https://github.com/dotenvx/dotenvx/blob/main/CHANGELOG.md)" | |
| env: | |
| GITHUB_TOKEN: ${{ secrets.PERSONAL_ACCESS_TOKEN }} | |
| - name: publish checksums to release | |
| uses: wangzuo/action-release-checksums@main | |
| with: | |
| token: ${{ secrets.PERSONAL_ACCESS_TOKEN }} | |
| - name: checkout dotenvx/releases repo | |
| uses: actions/checkout@v4 | |
| with: | |
| repository: "dotenvx/releases" | |
| token: ${{ secrets.PERSONAL_ACCESS_TOKEN }} | |
| path: "releases" | |
| - name: copy dist2 files to release repo | |
| run: | | |
| mkdir -p releases/latest | |
| cp -r dist2/* releases/ | |
| echo "${{ env.CLEAN_VERSION }}" > releases/VERSION | |
| cp README.md releases/latest/README.md | |
| - name: commit and push | |
| run: | | |
| cd releases | |
| git config --global user.name 'motdotenv' | |
| git config --global user.email '[email protected]' | |
| git add . | |
| git commit -m "${{ env.VERSION }}" | |
| git tag "${{ env.VERSION }}" | |
| git push origin HEAD --tags | |
| homebrew: | |
| needs: release | |
| runs-on: ubuntu-latest | |
| strategy: | |
| fail-fast: true | |
| steps: | |
| # GITHUB_ENV operates like a .env file | |
| - name: extract version | |
| run: | | |
| VERSION=${GITHUB_REF#refs/tags/} | |
| CLEAN_VERSION=${VERSION#v} | |
| echo "VERSION=$VERSION" >> $GITHUB_ENV | |
| echo "CLEAN_VERSION=$CLEAN_VERSION" >> $GITHUB_ENV | |
| # https://github.com/Justintime50/homebrew-releaser | |
| - name: homebrew releaser | |
| uses: Justintime50/homebrew-releaser@v1 | |
| with: | |
| debug: false | |
| homebrew_owner: dotenvx | |
| homebrew_tap: homebrew-brew | |
| formula_folder: Formula | |
| github_token: ${{ secrets.PERSONAL_ACCESS_TOKEN }} | |
| commit_owner: motdotenv | |
| commit_email: [email protected] | |
| version: ${{ env.VERSION }} | |
| install: | | |
| bin.install "dotenvx" | |
| bin.install_symlink "dotenvx" => "git-dotenvx" | |
| test: | | |
| system bin/"dotenvx", "--version" | |
| target_darwin_amd64: true | |
| target_darwin_arm64: true | |
| target_linux_amd64: true | |
| target_linux_arm64: true | |
| update_readme_table: true | |
| npm: | |
| needs: release | |
| runs-on: ubuntu-latest | |
| permissions: | |
| id-token: write | |
| steps: | |
| - uses: actions/checkout@v4 | |
| # Setup .npmrc file to publish to npm | |
| - uses: actions/setup-node@v4 | |
| with: | |
| node-version: '16.x' | |
| registry-url: 'https://registry.npmjs.org' | |
| scope: '@dotenvx' | |
| # update npm to v9 (last 16.x supported version) for npm provenance to work | |
| - run: npm install -g npm@9 | |
| - run: npm publish | |
| env: | |
| NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }} | |
| docker: | |
| needs: release | |
| runs-on: ubuntu-latest | |
| steps: | |
| # GITHUB_ENV operates like a .env file | |
| - name: extract version | |
| run: | | |
| VERSION=${GITHUB_REF#refs/tags/} | |
| CLEAN_VERSION=${VERSION#v} | |
| echo "VERSION=$VERSION" >> $GITHUB_ENV | |
| echo "CLEAN_VERSION=$CLEAN_VERSION" >> $GITHUB_ENV | |
| - name: Set up QEMU | |
| uses: docker/setup-qemu-action@v2 | |
| - name: Set up Docker Buildx | |
| uses: docker/setup-buildx-action@v2 | |
| - name: Login to Docker Hub | |
| uses: docker/login-action@v2 | |
| with: | |
| username: ${{ secrets.DOCKERHUB_USERNAME }} | |
| password: ${{ secrets.DOCKERHUB_TOKEN }} | |
| - name: Build and push | |
| uses: docker/build-push-action@v4 | |
| with: | |
| push: true | |
| tags: dotenv/dotenvx:latest | |
| platforms: linux/amd64,linux/arm64 | |
| - name: Build and push tag | |
| uses: docker/build-push-action@v4 | |
| with: | |
| push: true | |
| tags: dotenv/dotenvx:${{ env.VERSION }} | |
| platforms: linux/amd64,linux/arm64 | |
| - uses: actions/checkout@v4 | |
| - name: Docker Hub Description | |
| uses: peter-evans/dockerhub-description@v3 | |
| with: | |
| username: ${{ secrets.DOCKERHUB_USERNAME }} | |
| password: ${{ secrets.DOCKERHUB_TOKEN }} | |
| repository: dotenv/dotenvx | |
| short-description: ${{ github.event.repository.description }} | |
| winget: | |
| needs: release | |
| runs-on: windows-latest | |
| steps: | |
| - name: extract version using powershell | |
| shell: pwsh | |
| run: | | |
| $VERSION = $env:GITHUB_REF -replace 'refs/tags/', '' | |
| $CLEAN_VERSION = $VERSION -replace '^v', '' | |
| echo "VERSION=$VERSION" | Out-File -FilePath $env:GITHUB_ENV -Append | |
| echo "CLEAN_VERSION=$CLEAN_VERSION" | Out-File -FilePath $env:GITHUB_ENV -Append | |
| - name: Submit using wingetcreate | |
| run: | | |
| iwr https://aka.ms/wingetcreate/latest -OutFile wingetcreate.exe | |
| .\wingetcreate.exe update dotenvx.dotenvx -s -v ${{ env.CLEAN_VERSION }} -u https://github.com/dotenvx/dotenvx/releases/download/${{ env.VERSION }}/dotenvx-${{ env.CLEAN_VERSION }}-windows-x86_64.zip -t ${{ secrets.PERSONAL_ACCESS_TOKEN }} | |
| dotenvx-darwin-amd64: | |
| needs: release | |
| runs-on: ubuntu-latest | |
| strategy: | |
| fail-fast: true | |
| steps: | |
| - name: checkout | |
| uses: actions/checkout@v4 | |
| - name: commit binary to github | |
| uses: ./.github/actions/commit-binary-to-github | |
| with: | |
| version: ${GITHUB_REF#refs/tags/} | |
| platform: darwin-amd64 | |
| env: | |
| PERSONAL_ACCESS_TOKEN: ${{ secrets.PERSONAL_ACCESS_TOKEN }} | |
| dotenvx-darwin-arm64: | |
| needs: release | |
| runs-on: ubuntu-latest | |
| strategy: | |
| fail-fast: true | |
| steps: | |
| - name: checkout | |
| uses: actions/checkout@v4 | |
| - name: commit binary to github | |
| uses: ./.github/actions/commit-binary-to-github | |
| with: | |
| version: ${GITHUB_REF#refs/tags/} | |
| platform: darwin-arm64 | |
| env: | |
| PERSONAL_ACCESS_TOKEN: ${{ secrets.PERSONAL_ACCESS_TOKEN }} | |
| dotenvx-darwin-x86_64: | |
| needs: release | |
| runs-on: ubuntu-latest | |
| strategy: | |
| fail-fast: true | |
| steps: | |
| - name: checkout | |
| uses: actions/checkout@v4 | |
| - name: commit binary to github | |
| uses: ./.github/actions/commit-binary-to-github | |
| with: | |
| version: ${GITHUB_REF#refs/tags/} | |
| platform: darwin-x86_64 | |
| env: | |
| PERSONAL_ACCESS_TOKEN: ${{ secrets.PERSONAL_ACCESS_TOKEN }} | |
| dotenvx-linux-armv7l: | |
| needs: release | |
| runs-on: ubuntu-latest | |
| strategy: | |
| fail-fast: true | |
| steps: | |
| - name: checkout | |
| uses: actions/checkout@v4 | |
| - name: commit binary to github | |
| uses: ./.github/actions/commit-binary-to-github | |
| with: | |
| version: ${GITHUB_REF#refs/tags/} | |
| platform: linux-armv7l | |
| env: | |
| PERSONAL_ACCESS_TOKEN: ${{ secrets.PERSONAL_ACCESS_TOKEN }} | |
| dotenvx-linux-aarch64: | |
| needs: release | |
| runs-on: ubuntu-latest | |
| strategy: | |
| fail-fast: true | |
| steps: | |
| - name: checkout | |
| uses: actions/checkout@v4 | |
| - name: commit binary to github | |
| uses: ./.github/actions/commit-binary-to-github | |
| with: | |
| version: ${GITHUB_REF#refs/tags/} | |
| platform: linux-aarch64 | |
| env: | |
| PERSONAL_ACCESS_TOKEN: ${{ secrets.PERSONAL_ACCESS_TOKEN }} | |
| dotenvx-linux-amd64: | |
| needs: release | |
| runs-on: ubuntu-latest | |
| strategy: | |
| fail-fast: true | |
| steps: | |
| - name: checkout | |
| uses: actions/checkout@v4 | |
| - name: commit binary to github | |
| uses: ./.github/actions/commit-binary-to-github | |
| with: | |
| version: ${GITHUB_REF#refs/tags/} | |
| platform: linux-amd64 | |
| env: | |
| PERSONAL_ACCESS_TOKEN: ${{ secrets.PERSONAL_ACCESS_TOKEN }} | |
| dotenvx-linux-arm64: | |
| needs: release | |
| runs-on: ubuntu-latest | |
| strategy: | |
| fail-fast: true | |
| steps: | |
| - name: checkout | |
| uses: actions/checkout@v4 | |
| - name: commit binary to github | |
| uses: ./.github/actions/commit-binary-to-github | |
| with: | |
| version: ${GITHUB_REF#refs/tags/} | |
| platform: linux-arm64 | |
| env: | |
| PERSONAL_ACCESS_TOKEN: ${{ secrets.PERSONAL_ACCESS_TOKEN }} | |
| dotenvx-linux-x86_64: | |
| needs: release | |
| runs-on: ubuntu-latest | |
| strategy: | |
| fail-fast: true | |
| steps: | |
| - name: checkout | |
| uses: actions/checkout@v4 | |
| - name: commit binary to github | |
| uses: ./.github/actions/commit-binary-to-github | |
| with: | |
| version: ${GITHUB_REF#refs/tags/} | |
| platform: linux-x86_64 | |
| env: | |
| PERSONAL_ACCESS_TOKEN: ${{ secrets.PERSONAL_ACCESS_TOKEN }} | |
| dotenvx-windows-amd64: | |
| needs: release | |
| runs-on: ubuntu-latest | |
| strategy: | |
| fail-fast: true | |
| steps: | |
| - name: checkout | |
| uses: actions/checkout@v4 | |
| - name: commit binary to github | |
| uses: ./.github/actions/commit-binary-to-github | |
| with: | |
| version: ${GITHUB_REF#refs/tags/} | |
| platform: windows-amd64 | |
| env: | |
| PERSONAL_ACCESS_TOKEN: ${{ secrets.PERSONAL_ACCESS_TOKEN }} | |
| dotenvx-windows-x86_64: | |
| needs: release | |
| runs-on: ubuntu-latest | |
| strategy: | |
| fail-fast: true | |
| steps: | |
| - name: checkout | |
| uses: actions/checkout@v4 | |
| - name: commit binary to github | |
| uses: ./.github/actions/commit-binary-to-github | |
| with: | |
| version: ${GITHUB_REF#refs/tags/} | |
| platform: windows-x86_64 | |
| env: | |
| PERSONAL_ACCESS_TOKEN: ${{ secrets.PERSONAL_ACCESS_TOKEN }} | |
| # aggregate publish-all job to wait for all previous jobs to complete | |
| publish-all: | |
| runs-on: ubuntu-latest | |
| needs: | |
| - homebrew | |
| - npm | |
| - dotenvx-darwin-amd64 | |
| - dotenvx-darwin-arm64 | |
| - dotenvx-darwin-x86_64 | |
| - dotenvx-linux-aarch64 | |
| - dotenvx-linux-amd64 | |
| - dotenvx-linux-arm64 | |
| - dotenvx-linux-x86_64 | |
| - dotenvx-linux-armv7l | |
| - dotenvx-windows-amd64 | |
| - dotenvx-windows-x86_64 | |
| steps: | |
| - name: publish-all aggregate step | |
| run: echo "publish-all completed" | |
| dotenvx-sh: | |
| needs: publish-all | |
| runs-on: ubuntu-latest | |
| strategy: | |
| fail-fast: true | |
| steps: | |
| - uses: actions/checkout@v4 | |
| - name: extract version | |
| run: | | |
| VERSION=${GITHUB_REF#refs/tags/} | |
| CLEAN_VERSION=${VERSION#v} | |
| echo "VERSION=$VERSION" >> $GITHUB_ENV | |
| echo "CLEAN_VERSION=$CLEAN_VERSION" >> $GITHUB_ENV | |
| - name: update install.sh with VERSION | |
| run: | | |
| mkdir -p dist | |
| sed "0,/^VERSION=\".*\"/s//VERSION=\"${{ env.CLEAN_VERSION }}\"/" install.sh > ./dist/install.sh | |
| - name: checkout dotenvx/dotenvx.sh repo | |
| uses: actions/checkout@v4 | |
| with: | |
| repository: "dotenvx/dotenvx.sh" | |
| token: ${{ secrets.PERSONAL_ACCESS_TOKEN }} | |
| path: "dotenvx.sh" | |
| - name: copy install.sh to dotenvx.sh repo | |
| run: | | |
| cp dist/install.sh dotenvx.sh/install.sh | |
| echo "${{ env.CLEAN_VERSION }}" > dotenvx.sh/VERSION | |
| - name: commit and push | |
| run: | | |
| cd dotenvx.sh | |
| git config --global user.name 'motdotenv' | |
| git config --global user.email '[email protected]' | |
| git add . | |
| git commit -m "${{ env.VERSION }}" --allow-empty | |
| git tag "${{ env.VERSION }}" --force | |
| git push origin HEAD --tags --force | |
| confirm-dotenvx-sh: | |
| needs: dotenvx-sh | |
| runs-on: ubuntu-latest | |
| strategy: | |
| fail-fast: true | |
| steps: | |
| - name: extract version | |
| run: | | |
| VERSION=${GITHUB_REF#refs/tags/} | |
| CLEAN_VERSION=${VERSION#v} | |
| echo "VERSION=$VERSION" >> $GITHUB_ENV | |
| echo "CLEAN_VERSION=$CLEAN_VERSION" >> $GITHUB_ENV | |
| - name: wait for deployment | |
| run: | | |
| end=$((SECONDS+300)) | |
| while [ $SECONDS -lt $end ]; do | |
| current_version=$(curl -s -L https://dotenvx.sh/VERSION) | |
| if [ "$current_version" == "${{ env.CLEAN_VERSION }}" ]; then | |
| echo "dotenvx.sh deployment successful with version $current_version" | |
| exit 0 | |
| fi | |
| echo "waiting for deployment..." | |
| sleep 10 | |
| done | |
| echo "[DEPLOYMENT_FAILED]: VERSION did not update to ${{ env.CLEAN_VERSION }} within 5 minutes" | |
| exit 1 | |
| postrelease-npm: | |
| needs: confirm-dotenvx-sh | |
| runs-on: ubuntu-latest | |
| strategy: | |
| fail-fast: true | |
| steps: | |
| - uses: actions/checkout@v4 | |
| - uses: actions/setup-node@v4 | |
| with: | |
| node-version: 16.x | |
| - name: sleep | |
| run: sleep 60 | |
| - name: verify version | |
| run: | | |
| npm install @dotenvx/dotenvx --save | |
| RELEASED_VERSION=$(npx @dotenvx/dotenvx --version) | |
| EXPECTED_VERSION=$(node -p "require('./package.json').version") | |
| echo $RELEASED_VERSION | |
| echo $EXPECTED_VERSION | |
| if [ "$RELEASED_VERSION" != "$EXPECTED_VERSION" ]; then | |
| echo "postrelease version mismatch: expected $EXPECTED_VERSION, got $RELEASED_VERSION" | |
| exit 1 | |
| fi | |
| - name: verify dotenvx run/get | |
| run: | | |
| npm install @dotenvx/dotenvx --save | |
| echo "HELLO=NPM" > .env | |
| echo "console.log('Hello ' + process.env.HELLO)" > index.js | |
| EXPECTED_MESSAGE=$(npx @dotenvx/dotenvx run --quiet -- node index.js) | |
| echo $EXPECTED_MESSAGE | |
| if [ "$EXPECTED_MESSAGE" != "Hello NPM" ]; then | |
| echo "postrelease dotenvx run failure: expected Hello NPM, got $EXPECTED_MESSAGE" | |
| exit 1 | |
| fi | |
| EXPECTED_VALUE=$(npx @dotenvx/dotenvx get HELLO) | |
| echo $EXPECTED_VALUE | |
| if [ "$EXPECTED_VALUE" != "NPM" ]; then | |
| echo "postrelease dotenvx get failure: expected NPM, got $EXPECTED_VALUE" | |
| exit 1 | |
| fi | |
| postrelease-ubuntu: | |
| needs: confirm-dotenvx-sh | |
| runs-on: ubuntu-latest | |
| strategy: | |
| fail-fast: true | |
| steps: | |
| - uses: actions/checkout@v4 | |
| - uses: actions/setup-node@v4 | |
| with: | |
| node-version: 16.x | |
| - name: sleep | |
| run: sleep 60 | |
| - name: install dotenvx | |
| run: curl -fsS https://dotenvx.sh/ | sh | |
| - name: verify version | |
| run: | | |
| RELEASED_VERSION=$(dotenvx --version) | |
| EXPECTED_VERSION=$(node -p "require('./package.json').version") | |
| echo $RELEASED_VERSION | |
| echo $EXPECTED_VERSION | |
| if [ "$RELEASED_VERSION" != "$EXPECTED_VERSION" ]; then | |
| echo "postrelease version mismatch: expected $EXPECTED_VERSION, got $RELEASED_VERSION" | |
| exit 1 | |
| fi | |
| - name: verify dotenvx run/get | |
| run: | | |
| echo "HELLO=Ubuntu" > .env | |
| echo "console.log('Hello ' + process.env.HELLO)" > index.js | |
| EXPECTED_MESSAGE=$(dotenvx run --quiet -- node index.js) | |
| echo $EXPECTED_MESSAGE | |
| if [ "$EXPECTED_MESSAGE" != "Hello Ubuntu" ]; then | |
| echo "postrelease dotenvx run failure: expected Hello Ubuntu, got $EXPECTED_MESSAGE" | |
| exit 1 | |
| fi | |
| EXPECTED_VALUE=$(dotenvx get HELLO) | |
| echo $EXPECTED_VALUE | |
| if [ "$EXPECTED_VALUE" != "Ubuntu" ]; then | |
| echo "postrelease dotenvx get failure: expected Ubuntu, got $EXPECTED_VALUE" | |
| exit 1 | |
| fi | |
| - name: verify nested invocations | |
| run: | | |
| echo "HELLO=Ubuntu" > .env | |
| echo "console.log('Hello ' + process.env.HELLO)" > index.js | |
| EXPECTED_MESSAGE=$(dotenvx run --quiet -- dotenvx run --quiet -- dotenvx run --quiet -- node index.js) | |
| echo $EXPECTED_MESSAGE | |
| if [ "$EXPECTED_MESSAGE" != "Hello Ubuntu" ]; then | |
| echo "postrelease dotenvx nested invocations: expected Hello Ubuntu, got $EXPECTED_MESSAGE" | |
| exit 1 | |
| fi | |
| postrelease-mac: | |
| needs: confirm-dotenvx-sh | |
| runs-on: macos-latest | |
| strategy: | |
| fail-fast: true | |
| steps: | |
| - uses: actions/checkout@v4 | |
| - uses: actions/setup-node@v4 | |
| with: | |
| node-version: 16.x | |
| - name: sleep | |
| run: sleep 60 | |
| - name: install dotenvx | |
| run: brew install dotenvx/brew/dotenvx | |
| - name: verify version | |
| run: | | |
| RELEASED_VERSION=$(dotenvx --version) | |
| EXPECTED_VERSION=$(node -p "require('./package.json').version") | |
| echo $RELEASED_VERSION | |
| echo $EXPECTED_VERSION | |
| if [ "$RELEASED_VERSION" != "$EXPECTED_VERSION" ]; then | |
| echo "postrelease version mismatch: expected $EXPECTED_VERSION, got $RELEASED_VERSION" | |
| exit 1 | |
| fi | |
| - name: verify dotenvx run/get | |
| run: | | |
| echo "HELLO=Mac" > .env | |
| echo "console.log('Hello ' + process.env.HELLO)" > index.js | |
| EXPECTED_MESSAGE=$(dotenvx run --quiet -- node index.js) | |
| echo $EXPECTED_MESSAGE | |
| if [ "$EXPECTED_MESSAGE" != "Hello Mac" ]; then | |
| echo "postrelease dotenvx run failure: expected Hello Mac, got $EXPECTED_MESSAGE" | |
| exit 1 | |
| fi | |
| EXPECTED_VALUE=$(dotenvx get HELLO) | |
| echo $EXPECTED_VALUE | |
| if [ "$EXPECTED_VALUE" != "Mac" ]; then | |
| echo "postrelease dotenvx get failure: expected Mac, got $EXPECTED_VALUE" | |
| exit 1 | |
| fi | |
| - name: verify nested invocations | |
| run: | | |
| echo "HELLO=Mac" > .env | |
| echo "console.log('Hello ' + process.env.HELLO)" > index.js | |
| EXPECTED_MESSAGE=$(dotenvx run --quiet -- dotenvx run --quiet -- dotenvx run --quiet -- node index.js) | |
| echo $EXPECTED_MESSAGE | |
| if [ "$EXPECTED_MESSAGE" != "Hello Mac" ]; then | |
| echo "postrelease dotenvx run failure: expected Hello Mac, got $EXPECTED_MESSAGE" | |
| exit 1 | |
| fi | |
| postrelease-windows: | |
| needs: confirm-dotenvx-sh | |
| runs-on: windows-latest | |
| strategy: | |
| fail-fast: true | |
| steps: | |
| - uses: actions/checkout@v4 | |
| - uses: actions/setup-node@v4 | |
| with: | |
| node-version: 16.x | |
| - name: sleep | |
| run: sleep 60 | |
| - name: install dotenvx | |
| run: | | |
| curl -L -o dotenvx-windows-x86_64.zip https://github.com/dotenvx/releases/blob/main/latest/dotenvx-windows-x86_64.zip?raw=true | |
| Expand-Archive -Path dotenvx-windows-x86_64.zip -DestinationPath .\dotenvx | |
| - name: verify version | |
| run: | | |
| $RELEASED_VERSION = .\dotenvx\dotenvx.exe --version | |
| $EXPECTED_VERSION = node -p "require('./package.json').version" | |
| Write-Output "released version: $RELEASED_VERSION" | |
| Write-Output "expected version: $EXPECTED_VERSION" | |
| if ($RELEASED_VERSION -ne $EXPECTED_VERSION) { | |
| Write-Output "postrelease version mismatch: expected $EXPECTED_VERSION, got $RELEASED_VERSION" | |
| exit 1 | |
| } | |
| shell: pwsh | |
| - name: verify dotenvx run/get | |
| run: | | |
| "HELLO=Windows" | Out-File -FilePath .env | |
| "console.log('Hello ' + process.env.HELLO)" | Out-File -FilePath index.js | |
| $EXPECTED_MESSAGE = .\dotenvx\dotenvx.exe run --quiet -- node index.js | |
| Write-Output "Expected Message: $EXPECTED_MESSAGE" | |
| if ($EXPECTED_MESSAGE -ne "Hello Windows") { | |
| Write-Output "postrelease dotenvx run failure: expected 'Hello Windows', got '$EXPECTED_MESSAGE'" | |
| exit 1 | |
| } | |
| $EXPECTED_VALUE = .\dotenvx\dotenvx.exe get HELLO | |
| Write-Output "Expected Value: $EXPECTED_VALUE" | |
| if ($EXPECTED_VALUE -ne "Windows") { | |
| Write-Output "postrelease dotenvx get failure: expected 'Windows', got '$EXPECTED_VALUE'" | |
| exit 1 | |
| } | |
| shell: pwsh | |
| - name: verify nested invocations | |
| run: | | |
| "HELLO=Windows" | Out-File -FilePath .env | |
| "console.log('Hello ' + process.env.HELLO)" | Out-File -FilePath index.js | |
| $EXPECTED_MESSAGE = .\dotenvx\dotenvx.exe run --quiet -- .\dotenvx\dotenvx.exe run --quiet -- .\dotenvx\dotenvx.exe run --quiet -- node index.js | |
| Write-Output "Expected Message: $EXPECTED_MESSAGE" | |
| if ($EXPECTED_MESSAGE -ne "Hello Windows") { | |
| Write-Output "postrelease dotenvx run failure: expected 'Hello Windows', got '$EXPECTED_MESSAGE'" | |
| exit 1 | |
| } | |
| shell: pwsh | |
| postrelease-bunx: | |
| needs: confirm-dotenvx-sh | |
| runs-on: ubuntu-latest | |
| strategy: | |
| fail-fast: true | |
| steps: | |
| - uses: actions/checkout@v4 | |
| - uses: actions/setup-node@v4 | |
| with: | |
| node-version: 16.x | |
| - name: verify dotenvx run | |
| run: | | |
| echo "HELLO=Bun" > .env | |
| EXPECTED_VERSION=$(node -p "require('./package.json').version") | |
| docker run --rm \ | |
| -v $(pwd):/workspace \ | |
| -w /workspace \ | |
| oven/bun:1.1.25-alpine \ | |
| sh -c "bunx @dotenvx/dotenvx@$EXPECTED_VERSION run --overload --quiet -- sh -c 'echo Hello \$HELLO'" | tee output.txt | |
| output=$(cat output.txt) | |
| if [ "$output" != "Hello Bun" ]; then | |
| echo "postrelease dotenvx run failure: expected Hello Bun, got $output" | |
| exit 1 | |
| fi |