diff --git a/.github/workflows/release.yaml b/.github/workflows/release.yaml new file mode 100644 index 0000000..68c633c --- /dev/null +++ b/.github/workflows/release.yaml @@ -0,0 +1,13 @@ +on: + push: + branches: [main] + +jobs: + release: + name: release + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v3 + - run: curl -LsSf https://astral.sh/uv/install.sh | sh + - run: ./blind_chess.py + - run: gh release create --notes "" "$(date +%y-%m-%d)" blind_chess.apkg diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..b184dd6 --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +*.apkg diff --git a/generate_deck.py b/blind_chess.py similarity index 76% rename from generate_deck.py rename to blind_chess.py index 117f320..fc04ac2 100755 --- a/generate_deck.py +++ b/blind_chess.py @@ -1,4 +1,7 @@ #!/usr/bin/env -S uv run --script +# +# Generates the blind_chess.apkg Anki Deck +# # /// script # requires-python = ">=3.13" # dependencies = [ @@ -12,14 +15,9 @@ import genanki import chess import chess.svg -deck = genanki.Deck( - 2059400110, - 'Blind Chess' -) +deck = genanki.Deck(2059400110, 'Blind Chess') -model= genanki.Model( - 1120858226, - 'Chess Model', +model = genanki.Model(1120858226, 'Chess Model', fields=[ {'name': 'guid'}, {'name': 'Question'}, @@ -38,7 +36,6 @@ model= genanki.Model( class ChessNote(genanki.Note): @property def guid(self): - # slug-square-piece return genanki.guid_for(self.fields[0]) def square_color(sq_name): @@ -58,25 +55,21 @@ def knight_moves(sq_name): board.set_piece_at(sq_id, chess.Piece(chess.KNIGHT, chess.WHITE)) attacks = board.attacks(sq_id) - guid = f'{sq_name}-knight-moves' #guid + guid = f'{sq_name}-knight-moves' question = f'Where can the knight move from square {sq_name}?' answer = ', '.join(chess.SQUARE_NAMES[sq] for sq in list(attacks)) board_svg = chess.svg.board(board, fill=dict.fromkeys(attacks, "#cc0000cc")) - # return ChessNote(model, [guid, question, answer, board_svg]) - return ChessNote(model, [guid,question,answer,board_svg]) + return ChessNote(model, [guid, question, answer, board_svg]) def notes(): - # square colors for sq_name in chess.SQUARE_NAMES: yield square_color(sq_name) yield knight_moves(sq_name) -notes = list(notes()) - # randomize the order of the notes -random.shuffle(notes) -for note in notes: +for note in random.shuffle(list(notes())) deck.add_note(note) -genanki.Package(deck).write_to_file('chess.apkg') -print(f'Created deck chess.apkg with {len(deck.notes)} notes') +out = 'blind_chess.apkg' +genanki.Package(deck).write_to_file(out) +print(f'Created deck {out} with {len(deck.notes)} notes') diff --git a/chess.apkg b/chess.apkg deleted file mode 100644 index 859e8fe..0000000 Binary files a/chess.apkg and /dev/null differ