diff --git a/.github/workflows/binaries.yml b/.github/workflows/binaries.yml index 3d1298dc0..659b711d0 100644 --- a/.github/workflows/binaries.yml +++ b/.github/workflows/binaries.yml @@ -60,8 +60,8 @@ jobs: nim-version: 'stable' yes: true - - name: Install checksums - run: nimble install -y checksums + - name: Install dependencies + run: nimble install -y - name: build nimble run: | diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 8df5c7934..19ba78047 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -28,8 +28,8 @@ jobs: - name: Install Mercurial on macOS if: matrix.os == 'macos-latest' run: brew install mercurial - - name: Install checksums - run: nimble install checksums + - name: Install dependencies + run: nimble install -y - name: Run nim c -r tester run: | cd tests @@ -37,3 +37,8 @@ jobs: # there's no need to add nimblepkg unit tests -- # they are run by tmoduletests.nim - run: ./src/nimble install -y + - name: Build nimble with `-d:nimNimbleBootstrap` + run: | + nim c -d:release -r tests/private/clone.nim + nim c -d:nimNimbleBootstrap -d:release src/nimble.nim + diff --git a/tests/private/clone.nim b/tests/private/clone.nim new file mode 100644 index 000000000..a4716fad9 --- /dev/null +++ b/tests/private/clone.nim @@ -0,0 +1,49 @@ +import std/[os, uri, strformat] +import std/private/gitutils + +when defined(nimPreviewSlimSystem): + import std/assertions + +proc exec(cmd: string) = + echo "deps.cmd: " & cmd + let status = execShellCmd(cmd) + doAssert status == 0, cmd + +proc execRetry(cmd: string) = + let ok = retryCall(call = block: + let status = execShellCmd(cmd) + let result = status == 0 + if not result: + echo fmt"failed command: '{cmd}', status: {status}" + result) + doAssert ok, cmd + +proc cloneDependency(destDirBase: string, url: string, commit = commitHead, + appendRepoName = true) = + let destDirBase = destDirBase.absolutePath + let p = url.parseUri.path + let name = p.splitFile.name + var destDir = destDirBase + if appendRepoName: destDir = destDir / name + let quotedDestDir = destDir.quoteShell + if not dirExists(destDir): + # note: old code used `destDir / .git` but that wouldn't prevent git clone + # from failing + execRetry fmt"git clone -q {url} {quotedDestDir}" + if isGitRepo(destDir): + let oldDir = getCurrentDir() + setCurrentDir(destDir) + try: + execRetry "git fetch -q" + exec fmt"git checkout -q {commit}" + finally: + setCurrentDir(oldDir) + else: + quit "FAILURE: " & destdir & " already exists but is not a git repo" + +proc command = + const distDir = "dist" + const commit = "3fa15df7d27ecef624ed932d60f63d6a8949618d" + cloneDependency(distDir, "https://github.com/nim-lang/checksums.git", commit) + +command()